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?) | 特定シートのみのピンポイント出力 |
主な引数とオプション
| 引数 | 型 | 説明 |
|---|---|---|
savePath | string | 保存先の PDF ファイルパス。 |
includeLayout | boolean | true の場合、シートの行番号・列番号の見出しとセル枠線を含めて出力します。 |
sheetNames | string[] | 出力対象のシート名の配列。空配列 [] の場合はすべての可視シートを出力します。 |
includeHeaderFooter | boolean | ヘッダー・フッターを含めるかどうか(既定: false)。 |
options | dto.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();
解説
- 外部依存のない高速 PDF レンダリング: osbxl 内蔵のレンダリングエンジンによって、Excel の書式・罫線・フォント・数値表示形式を忠実に再現した PDF を超高速に出力します。
includeLayoutの使い分け: 帳票や納品書など通常の印刷用途ではfalseを指定します。trueにすると、Excel の行番号・列番号(1, 2, 3... や A, B, C...)とグリッド枠線が付与されるため、レビュー資料や校正用途に最適です。- メモリバッファ出力(
saveAsPdfToBuffer): 一時ファイルをディスクに作成することなくバイナリを取得できるため、サーバーレス環境(AWS Lambda や Cloud Functions)や Web API から直接ダウンロード配信する場合に最適です。 - 余白と拡大率の調整: 標準では Excel の標準余白が適用されます。余白を
0.25〜0.3インチに設定し、ps.setCenterHorizontally(true)を指定することで、用紙いっぱいに美しくレイアウトされた印刷面が得られます。
注意点
- PDF 出力前のブック保存:
saveAsPdf()を呼び出す前に、ワークシートへの変更内容をwb.save()して最新状態を確定させておくことが推奨されます。 - 出力対象シートの指定:
sheetNamesを省略または空配列[]を渡すと、ブック内のすべての「表示(visible)」シートが出力されます。非表示(hidden)シートは出力対象外となります。