PDF エクスポート — ページ設定・余白・印刷範囲・用紙サイズ

level: advanced / verified: 2026-10-31 / 5言語タブ対応 / 目次へ / English

やりたいこと

Excel ワークブックやワークシートから高品質な PDF を直接エクスポートする。
外部ツール(LibreOffice や headless Chrome など)や仮想プリンターに依存せず、osbxl 単体で高速に PDF ファイルやメモリバッファへ変換出力できます。

PageSetupObject を組み合わせることで、用紙サイズ(A4/A3/Letter 等)・印刷の向き(縦/横)・余白(上下左右)・拡大縮小(ズーム)・中央配置をきめ細かく制御できます。

出力方式メソッド用途
ファイルへ直接保存wb.saveAsPdf(filePath, includeLayout, sheetNames?, includeHeaderFooter?, options?)帳票ファイルやレポートの保存
メモリバッファへ出力wb.saveAsPdfToBuffer(includeLayout, sheetNames?, includeHeaderFooter?, options?)Web API のレスポンスやメール添付用ストリーム
単一シートの保存ws.saveAsPdf(filePath, includeLayout, includeHeaderFooter?, options?)特定シートのみのピンポイント出力

主な引数とオプション

引数型説明
savePathstring保存先の PDF ファイルパス。
includeLayoutbooleantrue の場合、シートの行番号・列番号の見出しとセル枠線を含めて出力します。
sheetNamesstring[]出力対象のシート名の配列。空配列 [] の場合はすべての可視シートを出力します。
includeHeaderFooterbooleanヘッダー・フッターを含めるかどうか(既定: false)。
optionsdto.PdfExportObjectエクスポート詳細設定(フォント置換や出力範囲の指定等)。

PageSetupObject による印刷設定

ワークシートの ws.getPageSetupObject() を取得して値を設定し、ws.setPageSetupObject(ps) で反映します。

設定メソッド設定値・型説明
setPaperSize(size)enums.XlPaperSize用紙サイズを指定(PaperA4, PaperA3, PaperLetter など)。
setOrientation(orient)enums.XlPageOrientation印刷の向き(Portrait = 縦向き / Landscape = 横向き)。
setLeftMargin(val) / setRightMargin(val)数値(インチ単位)左右の余白(Excel 標準は約 0.7 インチ、狭小は約 0.25 インチ)。
setTopMargin(val) / setBottomMargin(val)数値(インチ単位)上下の余白(標準は約 0.75 インチ、狭小は約 0.3 インチ)。
setCenterHorizontally(true)boolean用紙の水平中央に印刷内容をセンタリングします。
setZoom(percent)数値(パーセント)印刷時の拡大率を指定(例: 140 で 140% 拡大)。
setPrintArea(a1c1)string印刷対象セル範囲を指定(例: "A1:G15")。

コード

売上レポートのワークブックを作成し、A4 横向き・余白調整のうえ PDF ファイルおよびメモリバッファへ出力します。

// pdf-export.js — PDF エクスポートとページ設定
const { nodeosbxl, enums } = require("nodeosbxl");

const app = new nodeosbxl.App();
const wb = app.createWorkBook("report.xlsx");
const ws = wb.openWorkSheet(0); // 0 始まり (zeroBase)

// 1. レポート表の作成
ws.getRange("A1").setValue("2026年度 部門別売上実績レポート");
const headers = ["部門名", "第1四半期", "第2四半期", "第3四半期", "第4四半期", "合計"];
headers.forEach((h, c) => ws.getCells(2, c).setValue(h));

const rows = [
    ["営業1課", 1200000, 1450000, 1380000, 1820000],
    ["営業2課", 980000,  1120000, 1050000, 1280000],
    ["開発営業", 2150000, 2300000, 2420000, 2890000]
];
rows.forEach((row, r) => {
    ws.getCells(3 + r, 0).setValue(row[0]);
    for (let c = 1; c <= 4; c++) {
        ws.getCells(3 + r, c).setNumberValue(row[c]);
    }
    // 合計列(SUM 数式)
    ws.getCells(3 + r, 5).setFormula(`SUM(B${4 + r}:E${4 + r})`);
});

// 2. ページ設定(A4・横向き・余白調整・水平中央配置)
const ps = ws.getPageSetupObject();
ps.setPaperSize(enums.XlPaperSize.PaperA4);
ps.setOrientation(enums.XlPageOrientation.Landscape);
ps.setLeftMargin(0.5);   // 左余白 0.5 インチ
ps.setRightMargin(0.5);  // 右余白 0.5 インチ
ps.setTopMargin(0.6);    // 上余白 0.6 インチ
ps.setBottomMargin(0.6); // 下余白 0.6 インチ
ps.setCenterHorizontally(true); // 水平中央に配置
ws.setPageSetupObject(ps);

// 3. ブックの保存
wb.save();

// 4. PDF 出力(ファイル出力)
const pdfResult = wb.saveAsPdf("report.pdf", false); // includeLayout = false
console.log("PDF 出力完了: 総ページ数 =", pdfResult.getTotalPages());

// 5. メモリバッファへの出力(Web API レスポンス等に最適)
const pdfBuffer = wb.saveAsPdfToBuffer(false, ["Sheet1"]);
console.log("PDF バッファ生成完了: バイト長 =", pdfBuffer.length);

wb.close();

解説

注意点

関連