有时,在扫描或导出文档后,PDF页面会以倒置、横向或错误的方向显示。
用户通常并不需要手动重新制作文档,而是需要一种快速的方法来旋转页面并保存修改后的版本。
现代浏览器可以通过JavaScript直接实现这一功能。
在本教程中,你将学习如何使用JavaScript开发一个基于浏览器的PDF旋转工具。
该工具允许用户上传PDF文件、预览页面、旋转选定的页面、调整页面方向、生成新的PDF文件、预览最终结果、重命名文件,并直接通过浏览器下载所有内容。
整个过程完全在客户端完成,无需任何后端服务器的支持。

目录
PDF旋转的原理
PDF旋转是通过修改页面的方向数据来实现的。
JavaScript技术库可以编程方式自动旋转页面,并生成更新后的文档文件。
浏览器会加载PDF文件,读取页面信息,然后应用90°、180°或横向等旋转角度,最终生成新的可下载PDF文件。
整个过程都在浏览器内部完成,因此速度快、操作方便,且无需将文件上传到外部服务器。
项目设置
这个项目被设计得相当简单。
你只需要一个HTML文件、一个JavaScript文件,以及一个用于处理PDF文件的库即可。
整个系统完全在浏览器中通过JavaScript运行,不需要任何后端服务器或数据库。
我们使用的是什么库?
我们会使用PDF-lib库来直接在浏览器中编辑PDF文件。
你可以通过CDN添加这个库:
<script src="https://unpkg.com/pdf-lib/dist/pdf-lib.min.js"></script>
这个库能让我们做到以下事情:
-
加载PDF文件
-
旋转页面
-
调整页面方向
-
导出更新后的PDF文件
创建上传界面
首先从一个基本的上传输入框开始:
<input type="file" id="pdfUpload" accept="application/pdf">
<button onclick="rotatePDF()">
旋转PDF文件
</button>
这样用户就可以直接通过浏览器上传PDF文件了。
下面是这个工具中上传界面的实际样子:

预览上传的PDF页面
在上传PDF文件后,用户可以在浏览器中直接预览这些页面,然后再进行旋转操作。
预览界面还提供了旋转控制功能,因此用户可以根据需要单独旋转某些页面,再生成最终的PDF文件。
为了显示预览内容,我们首先会加载上传来的PDF文件:
const pdfDoc = await PDFLib.PDFDocument.load(arrayBuffer);
const totalPages = pdfDoc.getPageCount();
接下来,我们会动态地渲染页面预览:
for (let i = 0; i < totalPages; i++) {
const page = pdfDoc getPage(i);
console.log("正在渲染页面:", i + 1);
}
用户可以使用左右的导航按钮在页面之间切换。
每个预览页面上还可以添加旋转按钮:
rotateLeftBtn.addEventListener("click", () => {
rotatePage(currentPage, -90);
});
rotateRightBtn.addEventListener("click", () => {
rotatePage(currentPage, 90);
});
这样用户在生成更新后的PDF文件之前,就可以更方便地检查页面的方向是否正确。
下面是页面预览界面的实际样子:

选择需要旋转的页面
并非所有文档都需要所有页面都进行旋转处理。
有些用户可能只希望旋转文档中的偶数页、奇数页,或者特定的页面。
该工具允许用户在生成最终的PDF文件之前,选择哪些页面需要进行旋转操作。
例如,用户可以如下方式指定旋转范围:
const selectedMode = document.querySelector(
'input[name="pageMode"]:checked'
).value;
也可以指定具体的页面范围:
const customPages = document
.getElementById("customPages")
.value;
这样,用户就能更好地控制哪些文档页面会被修改。
以下是该工具中页面选择界面的示意图:

应用旋转设置
一旦选定了需要旋转的页面,用户就可以直接在浏览器中执行各种旋转操作。
页面可以向左旋转90度、向右旋转90度、翻转180度,或者将页面方向调整为竖屏或横屏。
以下是一个使用PDF-lib的简单示例:
const page = pdfDoc.getPage(pageIndex);
page.rotation(
PDFLib.degrees(90)
);
如果想将页面向左旋转,可以这样操作:
pagerotation(
PDFLib.degrees(-90)
);
你还可以动态地应用预设的页面方向设置:
if (orientation === "landscape") {
page.rotation(PDFLib.degrees(90));
}
这些功能使得用户能够在浏览器中直接修复扫描后的文档或调整错误的页面布局。
以下是该工具中旋转设置界面的示意图:

生成旋转后的PDF文件
配置完旋转设置后,用户就可以直接在浏览器中生成更新后的PDF文件。
该工具会立即处理选定的页面,应用旋转操作,并导出新的可下载PDF文件。
例如:
const pdfBytes = await pdfDoc.save();
接下来,创建一个可供下载的文件:
const blob = new Blob(
[pdfBytes],
{ type: "application/pdf" }
);
const url = URL.createObjectURL(blob);
最后,触发下载操作:
const link = document.createElement("a");
link.href = url;
link.download = "rotated-document.pdf";
link.click();
整个处理流程都是在浏览器中本地运行的,无需任何后端服务器。
这是该工具中“生成”按钮的外观:

预览并下载最终的PDF文件
处理完成后,该工具会实时显示旋转后的文档预览效果。
用户可以在下载最终文件之前先查看更新后的页面内容。
界面还会显示文档的其他详细信息,比如总页数和文件大小。
在下载生成的PDF文件之前,还可以选择重新命名文件。
例如,用户可以这样为文件指定新名称:
const fileName = prompt(
"请输入PDF文件的名称:",
"rotated-document"
);
预览区域还提供了左右导航按钮,让用户可以直接在浏览器中浏览旋转后的页面。
文档的详细信息也可以动态显示出来:
fileSizeElement.textContent =
formatFileSize(blob.size);
pageCountElement.textContent =
pdfDoc.getPageCount();
这些设计提高了用户体验,帮助用户在下载之前确认最终结果是否满足需求。
这是最终输出页面的外观:

为什么PDF旋转在现实世界的文档处理中非常有用
PDF旋转虽然看起来是一个很小的功能,但它实际上解决了一个在日常文档处理中非常常见的问题。
许多扫描后的文档、手机拍摄的图片、发票、证书以及办公文件,其保存时的方向都是错误的。有些页面会以横向、倒置的方式显示,或者同时包含纵向和横向布局。
用户无需重新打开这些文件进行重新扫描,只需在浏览器中就能快速调整页面的方向。
例如,PDF旋转功能通常被用于以下场景:
-
扫描后的协议文件
-
发票和账单
-
政府表格
-
学术文档
-
施工图纸
-
横向格式的报告
-
手机相机拍摄的图片
当处理多页PDF文件时,如果只有某些页面需要调整方向,这个功能就显得尤为重要了。
有些用户可能只希望旋转以下内容:
-
偶数页
-
奇数页
-
特定页面
-
仅横向页面
正因如此,基于页面的旋转功能在现代PDF工具中显得十分重要。
通过浏览器来旋转PDF文件还能保护用户的隐私,因为上传的文档会保留在用户的设备上,而不会被发送到外部服务器。
演示:PDF旋转工具的工作原理
步骤1:上传PDF文件
用户首先需要将PDF文件直接上传到基于浏览器的工具中。
该工具支持拖放操作,也允许用户手动选择文件。
以下是上传界面的外观:

步骤2:预览PDF页面
上传文件后,该工具会自动生成页面预览。
预览界面也提供了旋转选项,用户可以根据需要调整页面的旋转角度。
以下是工具内的预览界面:

步骤3:配置旋转设置
现在,用户可以自行选择PDF页面的旋转方式。
该工具支持以下操作:
-
向左旋转
-
向右旋转
-
180度翻转
-
纵向方向
-
横向方向
用户还可以选择是让所有页面都进行旋转,还是仅针对特定页面操作。
以下是旋转设置界面的外观:

步骤4:生成旋转后的PDF文件
配置完成后,用户只需点击“生成”按钮即可应用这些旋转设置。
浏览器会立即在本地处理文档,并生成更新后的PDF文件。
以下是工具内的“生成”按钮:

步骤5:预览最终结果
处理完成后,该工具会直接在浏览器中显示旋转后的PDF预览效果。
用户可以通过左右导航按钮逐页查看文件内容,以确认最终输出效果是否满意。
界面还会显示以下信息:
-
总页数
-
文件大小
-
输出文件名
这是预览页面的部分内容:

步骤6:重命名并下载PDF文件
在下载之前,用户可以直接在浏览器中为生成的PDF文件重新命名。
命名完成后,即可立即下载更新后的文档。
这是重命名和下载的相关操作界面:
实际使用中的重要提示
在处理扫描生成的PDF文件时,页面方向问题非常常见。
有些文件的页面方向可能是混合的,即某些页面为纵向布局,而另一些页面为横向布局。
逐页进行旋转操作通常会比直接整体旋转文件获得更好的效果。
较大的PDF文件也会增加浏览器中的处理时间。
例如:
if (file.size > 50 * 1024 * 1024) {
alert("大型PDF文件的处理速度可能会较慢。");
}
另一个有用的优化方法是先预览页面内容,再进行永久性修改。
这样可以帮助用户确认页面方向是否正确,从而避免在下载更新文件时出现错误。
由于所有操作都在浏览器中本地完成,上传的文件永远不会离开用户的设备,因此这有助于保护用户的隐私和数据安全。
需要避免的常见错误
一个常见的错误是不小心多次旋转页面。
例如,连续进行两次90度的旋转操作,可能会导致页面方向出现意外变化。
另一个问题是在执行旋转操作之前没有先选择要处理的页面。
用户可能会误将整个文档的所有页面都旋转起来,而不是只修改特定部分。
较大的扫描PDF文件也会影响渲染速度和预览效果的生成速度。
在处理文件之前先验证其格式是否正确,有助于避免出现操作错误:
if (!file || file.type !== "application/pdf") {
alert("请上传有效的PDF文件。");
return;
}
预览页面与实际旋转结果不同步也是另一个常见问题。
如果旋转后页面预览没有及时更新,用户可能会误以为旋转操作失败了,但实际上导出的PDF文件是正确的。
在每次旋转文档后动态更新预览效果,能够显著提升整体使用体验。
结论
通过本教程,你学会了如何使用JavaScript构建基于浏览器的PDF文件旋转工具。
你掌握了上传PDF文件、预览文档页面、旋转选中的页面、调整页面方向、生成更新后的PDF文件,以及直接在浏览器中下载最终结果等操作方法。
更重要的是,你了解到现代浏览器能够在不依赖后端服务器的情况下,完成各种实际的PDF编辑任务。
这种设计方式使得该工具运行速度快速、使用便捷且数据隐私得到有效保护。
你也可以在这里尝试这个在线工具:AllInOneTools - PDF旋转工具。
一旦掌握了这种工作流程,你还可以进一步为其添加更多功能,比如提取PDF页面内容、添加注释、整理文档结构、添加数字签名,或是使用更高级的编辑工具等等。
而正是这些扩展功能,使得这个工具真正变得有趣起来。