纯前端 PDF 旋转避坑指南:旋转方向不对怎么办?

1 阅读3分钟

PDF 旋转听起来简单,但很多人遇到旋转方向反了、页面尺寸变错、或旋转后内容被裁切的问题。今天聊聊纯前端 PDF 旋转的核心问题和解决方案。


旋转的常见场景

场景说明
扫描件颠倒扫描时放反了,整份 PDF 上下颠倒
手机照片手机拍照后方向不对,生成 PDF 也歪了
横竖混排部分页面横版、部分竖版,需要统一方向
打印准备打印前检查页面方向是否正确

技术方案:pdf-lib 旋转 PDF

核心实现

import { PDFDocument, degrees } from 'pdf-lib'async function rotatePdf(
  arrayBuffer: ArrayBuffer,
  angle: number
): Promise<Uint8Array> {
  const pdfDoc = await PDFDocument.load(arrayBuffer)
  const pages = pdfDoc.getPages()
  
  for (const page of pages) {
    const currentRotation = page.getRotation().angle
    page.setRotation(degrees(currentRotation + angle))
    
    // 90°/270° 需要交换宽高
    if (angle === 90 || angle === 270) {
      const { width, height } = page.getSize()
      page.setSize(height, width)
    }
  }
  
  return await pdfDoc.save()
}

关键点:旋转角度

  • 90°:顺时针旋转 90 度
  • 180°:上下颠倒
  • 270°:逆时针旋转 90 度(等同于顺时针 270 度)

关键点:尺寸交换

旋转 90°/270° 后,宽度和高度需要互换:

if (angle === 90 || angle === 270) {
  const { width, height } = page.getSize()
  page.setSize(height, width)
}

常见坑位

坑 1:旋转方向搞反

用户想顺时针转 90 度,结果变成了逆时针。

解决方案

  • 预览确认旋转方向
  • 90° 和 270° 是相反方向,选择时注意
  • 不确定时先用小样本测试

坑 2:180 度旋转后尺寸没变

部分工具只改变旋转角度,不交换页面尺寸。

解决方案

  • 使用纯前端工具(pdf-lib 自动处理)
  • 检查旋转后的页面尺寸是否正确
  • 如果发现尺寸异常,尝试重新旋转

坑 3:部分内容被裁切

旋转后靠近边缘的内容可能被裁掉。

解决方案

  • 旋转前检查内容布局
  • 使用专业工具添加边距
  • 复杂文档考虑用桌面软件处理

坑 4:只有部分页面旋转

用户只想旋转某些页面,但工具一次性旋转所有页面。

解决方案

  • 先拆分 PDF,旋转指定页面,再合并
  • 或使用支持选择性旋转的专业工具
  • 批量处理时注意页码顺序

坑 5:旋转后内容模糊

部分工具在旋转时重新渲染内容,导致质量下降。

解决方案

  • 使用矢量旋转(pdf-lib 方式),不重新渲染
  • 避免多次旋转同一 PDF
  • 保存为原始格式而非重新编码

和其他转换方式的区别

工具处理方式适用场景
纯前端工具浏览器本地处理敏感文档、隐私优先
在线转换工具上传服务器处理普通文档
Adobe Acrobat桌面软件完整处理复杂文档、专业需求

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


使用建议

  1. 预览效果:旋转前先确认方向是否正确
  2. 控制旋转次数:避免反复旋转导致质量损失
  3. 敏感文档本地处理:不要用上传式工具
  4. 检查输出效果:旋转后抽查几页确认

总结

  • PDF 旋转核心是角度选择尺寸处理
  • 90°/270° 需要交换页面宽高
  • 纯前端方案适合私密文档
  • 复杂文档建议使用桌面软件

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