pdfOptions 与 printOptions 详解

两阶段:先排版成 PDF,再投递打印机

await webPrintPdf.printHtml(
  html,
  pdfOptions,    // 第 2 参:HTML → PDF 版式
  printOptions,  // 第 3 参:PDF → 物理打印机
  extraOptions   // 第 4 参:preview/print、超时、Cookie 等
);

同名字段对比(最容易配错的地方)

下列字段在两边名称相同,但作用阶段不同。建议成对填写且语义一致,否则容易出现「PDF 预览正常、出纸被裁切」或「空白边距异常」。

字段 pdfOptions printOptions 技巧 / 踩坑
paperFormat 固定尺寸枚举(A4、Letter…),优先于 width/height 须为该打印机驱动支持的名称;不支持则回退默认纸 两边都设时请保持一致。热敏/标签纸名称各异,用 getPrinterPapers 查 print 侧可用值
landscape 控制生成的 PDF 页面方向(纵向/横向) 控制内容排版方向不旋转物理纸盒 横向须两边同时landscape: true,并与 paperFormat 成对一致;只设 pdfOptions 或只设 printOptions 往往不生效
pageRanges 生成 PDF 时裁剪页码区间 打印时再次裁剪页码区间 通常两边设相同区间;只在一侧设置可能导致预览与出纸张数不一致

paperFormat 专讲(同名字段)

pdfOptions.paperFormat — 排版阶段

可选值

Letter、Legal、Tabloid、Ledger、A0、A1、A2、A3、A4、A5、A6(默认 A4)。

printOptions.paperFormat — 出纸阶段

可选值

const printers = await webPrintPdf.utils.getPrinterList();
const target = printers.find(p => p.isDefault) || printers[0];
const papers = await webPrintPdf.utils.getPrinterPapers(target);
// papers[].name → printOptions.paperFormat
console.log(papers.map(p => p.name));

怎么配对

// pdf 侧:80mm 小票,不设 paperFormat
const pdfOptions = { width: '80mm', height: '200mm', margin: { top: '0', bottom: '0', left: '0', right: '0' } };

// print 侧:非标纸通常应指定 paperFormat — 从驱动列表里选物理尺寸匹配的一项
const papers = await webPrintPdf.utils.getPrinterPapers('热敏打印机');
const printOptions = {
  printerName: '热敏打印机',
  paperFormat: papers.find(p => p.name.includes('80'))?.name ?? papers[0].name
  // 一般知道具体的纸张名称时,直接填写名称即可,例如 paperFormat: '80mm Series'
};

默认规则

pdfOptions 全字段(HTML → PDF)

字段类型 / 默认说明与技巧
paperFormatstring · A4
width / heightstring|number
marginobject · 0
landscapeboolean · falsefalse 纵向,true 横向。须与 printOptions.landscape 同时为 true 才生效。
printBackgroundboolean · false
preferCSSPageSizeboolean · false
displayHeaderFooterboolean · false
headerTemplate / footerTemplatestring
watermarkobject
pageNumberobject
pageRangesArray · [][{from:1,to:3}];空数组表示全部页。

printOptions 全字段(PDF → 打印机)

字段类型 / 默认说明与技巧
printerNamestring
paperFormatstring
colorfulboolean · falsefalse 黑白,true 彩色。驱动不支持彩色时会降级。
landscapeboolean · falsefalse 纵向,true 横向。须与 pdfOptions.landscape 同时为 true;控制投递方向,不替代驱动纸盒旋转。
copiesnumber打印份数。
duplexModestring · simplex
scaleModestring · shrink
binnumber|string纸盘/进纸托盘,依驱动支持。
pageRangesArray · []格式同 pdfOptions。

常见踩坑清单

实战配方(可直接套用)

A4 办公文档(带背景色)

const pdfOptions = {
  paperFormat: 'A4',
  margin: { top: '15mm', bottom: '15mm', left: '12mm', right: '12mm' },
  printBackground: true
};
const printOptions = {
  paperFormat: 'A4',
  printerName: '默认打印机',
  scaleMode: 'shrink'
};
await webPrintPdf.printHtml(html, pdfOptions, printOptions);

100×60mm 标签(自定义尺寸)

const pdfOptions = {
  width: '100mm',
  height: '60mm',
  margin: { top: '0', bottom: '0', left: '0', right: '0' }
  // 不要同时设置 paperFormat
};
const printOptions = {
  printerName: '标签打印机',
  paperFormat: '100x60' // 名称以 getPrinterPapers 返回为准
};
await webPrintPdf.printHtml(labelHtml, pdfOptions, printOptions);

A4 横向(宽表、甘特图)

const pdfOptions = {
  paperFormat: 'A4',
  landscape: true,
  margin: { top: '10mm', bottom: '10mm', left: '8mm', right: '8mm' },
  printBackground: true
};
const printOptions = {
  paperFormat: 'A4',
  landscape: true   // pdfOptions 与 printOptions 须同时为 true
};
await webPrintPdf.printHtml(html, pdfOptions, printOptions);

双面合同 + 预览对比缩放

// 先用 preview 对比 scaleMode,再改为 print
await webPrintPdf.printHtml(html,
  { paperFormat: 'A4', printBackground: true },
  { paperFormat: 'A4', duplexMode: 'duplexlong', scaleMode: 'fit' },
  { action: 'preview' }
);

batchPrint 参数合并规则

await webPrintPdf.batchPrint(
  [
    { type: 'printHtml', data: html1, pdfOptions: { width: '80mm', height: '200mm' } },
    { type: 'printHtml', data: html2 }
  ],
  { margin: { top: '2mm' } },           // 批量默认 pdfOptions
  { printerName: '热敏打印机' },         // 批量默认 printOptions
  { requestTimeout: 20 }
);
// 单条任务内的 pdfOptions / printOptions 会覆盖批量默认值
免费下载客户端 打开在线样例