纯前端 PDF 双面打印避坑指南:翻页顺序错了整个白印?

PDF 双面打印听起来简单,但很多人遇到打印后翻页顺序错乱、正反面对不上、或最后一张只有正面没有背面的问题。今天聊聊纯前端 PDF 双面打印准备的核心问题和解决方案。


PDF 双面打印的常见场景

场景 说明
普通打印机打双面 打印机不支持自动双面,需分两次打印
小册子装订 长边装订像书本翻页
便签式打印 短边装订像笔记本翻页
打印店交付 需要正反面分成两个文件

技术方案:pdf-lib 拆分双面打印

核心实现

typescript 复制代码
import { PDFDocument } from 'pdf-lib'
​
type BindingMode = 'long-edge' | 'short-edge'
​
async function prepareDuplex(
  arrayBuffer: ArrayBuffer,
  mode: BindingMode,
  padToEven: boolean
): Promise<{ front: Uint8Array; back: Uint8Array }> {
  const source = await PDFDocument.load(arrayBuffer)
  const total = source.getPageCount()
  
  // 奇数页补一个空白页
  if (padToEven && total % 2 === 1) {
    source.addPage()
  }
  
  // 正面页序列(奇数页)
  const frontIndices = []
  for (let i = 0; i < total; i += 2) frontIndices.push(i)
  
  // 背面页序列(偶数页,需要反转)
  const backIndices = []
  for (let i = 1; i < total; i += 2) backIndices.push(i)
  backIndices.reverse()
  
  const frontDoc = await PDFDocument.create()
  frontDoc.addPage(await source.copyPage(frontIndices))
  
  const backDoc = await PDFDocument.create()
  backDoc.addPage(await source.copyPage(backIndices))
  
  return {
    front: await frontDoc.save(),
    back: await backDoc.save(),
  }
}

关键点:背面页序列反转

这是最容易错的地方。正面页是 1, 3, 5, 7,背面页必须是 8, 6, 4, 2(反转顺序),这样翻面后页 2 才能对准页 1。

scss 复制代码
// 正面:奇数页 1,3,5,7(0 起算 0,2,4,6)
// 背面:偶数页 8,6,4,2(0 起算 7,5,3,1)→ 反转后 1,3,5,7
const backIndices = []
for (let i = 1; i < total; i += 2) backIndices.push(i)
backIndices.reverse()  // 关键:反转

关键点:装订模式

两种装订方式的分页逻辑不同:

  • 长边装订(像书本):沿长边翻
  • 短边装订(像便签):沿短边翻

日常双面打印大多数用短边装订(奇偶页 + 背面反转)。


常见坑位

坑 1:背面页没反转

背面页忘记反转,导致翻面后页面错位。

解决方案:

  • 背面序列务必 reverse()
  • 打印前用 4 页小文档测试
  • 对照生成的正反面文件核对

坑 2:奇数页导致最后一页只有正面

页数为奇数时,最后一张纸只有正面没有背面。

解决方案:

  • 开启补空白页选项,自动补到偶数
  • 或接受最后一张单面

坑 3:装订模式选错

长边/短边装订的分页逻辑不同,选错会导致翻面方向不对。

解决方案:

  • 确认实际翻纸方式
  • 书本式 → 长边
  • 便签式 → 短边

坑 4:页码 0 起算混淆

内部页码 0 起算,容易和显示页码搞混。

解决方案:

  • 统一 0 起算
  • 正面 = 0,2,4... 背面 = 7,5,3,1(反转)
  • 拆完检查每页顺序

坑 5:纸张透字

薄纸双面打印时,背面的字会透到正面。

解决方案:

  • 用 20 磅以上较厚纸张
  • 或降低背面打印浓度

双面打印 vs 其他方案

方案 适用
纯前端双面准备 普通打印机、隐私优先
自动双面打印机 支持双面的设备直接打印
Adobe Acrobat 复杂装订、专业需求

纯前端的优势是隐私安全,适合处理敏感文档。


使用建议

  1. 确认装订方式:长边还是短边
  2. 奇数页补空白:开启 padding
  3. 小文档先测:4 页测试翻页方向
  4. 敏感文档本地处理:不要用上传式工具

总结

  • PDF 双面打印核心是 奇偶页拆分 + 背面反转
  • 选对装订方式,注意 0 起算页码
  • 纯前端方案适合 私密文档
  • 打印前务必备份原始文件

搜索「PDF双面打印」即可找到纯浏览器端工具,文件不上传服务器。

相关推荐
庖丁解牛1 小时前
第四课:循环,让电脑重复做事(4)
前端
数据掘金1 小时前
用户路径分析的会话切分与节点聚合实现
前端
SensorFlow1 小时前
从神策 SDK 迁移到 SensorFlow:采集层平滑迁移实战
javascript
代码猎人1 小时前
前端怎么搭建项目基础架构
前端
lichenyang4531 小时前
Promise 基础与进阶:状态规则、链式错误处理和异步执行顺序
前端
Amos_Web1 小时前
Rspack 源码解析(二十五):CssParserAndGenerator 如何把 CSS 变成可 Tree Shaking 的模块
前端·rust·前端框架
wespaul2 小时前
VeapAI 自然语言操作实战|第 06 篇:AiConsole 前端运行时——一个 Hub,八个注册表
前端·人工智能·milvus
龙亘川2 小时前
健康服务规范化背后,数字化如何 “辅助赋能“
大数据·前端·人工智能·智慧城市·数据可视化
data analyse 4562 小时前
SourceMap 上传版本与报错版本对不上?版本校验与错误还原设计
大数据·前端·人工智能·数据分析