Linux 下合并多个 PDF 文件为一个 PDF 文件的方法

Linux 下合并多个 PDF 文件为一个 PDF 文件的方法

技术背景

在 Linux 系统中,有时需要将多个 PDF 文件合并成一个大的 PDF 文件。例如,在整理文档、生成报告等场景下,合并多个相关的 PDF 文件可以提高文档的整体性和可读性。有多种工具和方法可实现这一需求,下面将介绍一些常见的解决方案。


实现步骤

1. 使用 pdfunite

pdfunitepoppler 工具集的一部分,安装较为常见,使用也相对简单。

复制代码
pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf

为避免覆盖最后一个输入文件,可添加文件存在性检查:

复制代码
export output_file=out.pdf && \! test -e $output_file && \pdfunite in-1.pdf in-2.pdf in-n.pdf $output_file

2. 使用 Ghostscript

Ghostscript 是一个强大的工具,无需额外安装其他软件。

复制代码
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=merged.pdf mine1.pdf mine2.pdf

对于低分辨率的 PDF 文件,可使用以下改进版本:

复制代码
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=merged.pdf mine1.pdf mine2.pdf

还可使用 -o 选项简化命令:

复制代码
gs -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -o merged.pdf mine1.pdf mine2.pdf

3. 使用 pdftk

pdftk 可以处理加密的 PDF 文件。

复制代码
pdftk file1.pdf file2.pdf cat output output.pdf

4. 使用 qpdf

qpdf 适合处理复杂的 PDF 操作,如选择特定页面合并。

复制代码
qpdf --empty --pages *.pdf -- out.pdf

5. 使用 pdfjoin

复制代码
pdfjoin a.pdf b.pdf

这会创建一个新的 b-joined.pdf 文件,包含 a.pdfb.pdf 的内容。

6. 使用 Python 和 PyPDF2

当需要合并大量文件时,可使用 Python 结合 PyPDF2 库。

复制代码
from pathlib import Pathfrom PyPDF2 import PdfMergerimport natsortDIR = Path("dir-with-pdfs/")OUTPUT = "output.pdf"paths = DIR.glob("*.pdf")paths = natsort.natsorted(paths)merger = PdfMerger()for path in paths:    merger.append(path)merger.write(OUTPUT)

核心代码

以下是使用 Ghostscript 合并多个 PDF 文件的核心代码:

复制代码
gs -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -o merged.pdf mine1.pdf mine2.pdf

使用 Python 和 PyPDF2 合并 PDF 文件的核心代码:

复制代码
from PyPDF2 import PdfMergermerger = PdfMerger()pdf_files = ['file1.pdf', 'file2.pdf', 'file3.pdf']for pdf in pdf_files:    merger.append(pdf)merger.write('merged.pdf')merger.close()

最佳实践

  • 选择合适的工具

    根据具体需求选择合适的工具。如果只是简单合并整个 PDF 文件,pdfunite 是不错的选择;如果需要处理加密文件,可使用 pdftk;如果需要更复杂的操作,如选择特定页面合并,qpdf 更合适。

  • 注意文件大小

    某些工具可能会导致合并后的文件大小显著增加,可根据情况调整参数,如使用 Ghostscript 时设置合适的 PDFSETTINGS

  • 检查文件完整性

    合并前确保所有输入的 PDF 文件完整且可读,避免合并过程中出现错误。

常见问题

  • pdfunite 覆盖文件

    使用 pdfunite 时,如果忘记指定输出文件名,会覆盖最后一个输入文件。可添加文件存在性检查来避免。

  • convert 命令效果不佳

    convert 命令通常会将 PDF 转换为图像,导致质量下降和文件大小增加,不建议用于 PDF 合并。

  • pdftk 依赖问题

    在某些系统中,pdftk 可能依赖于 gcj,而部分系统不再支持该依赖,可考虑使用其他工具替代。

  • 超链接和注释丢失

    部分工具在合并过程中可能会导致超链接和注释丢失,如 pdfunitepdfjoin 等。可使用 pdftksejda-console 等工具来保留这些信息。


循环开课-面授/直播

课程配套服务:

相关推荐
weedsfly4 分钟前
前端开发中的命令模式——从点餐退单到异步任务调度
前端·javascript·面试
慢功夫4 分钟前
💡第四篇:编辑器内核, Monaco model、URI、dirty 状态和 tabs 是怎么协作的?
前端·visual studio code
小马过河R7 分钟前
微前端实践:从概念、原理到 qiankun 落地
前端·人工智能·前端框架
用户0595401744614 分钟前
AI记忆存储一致性踩坑实录:每天手工回归200条对话,直到我用pytest+Redis搭建自动化验证
前端·css
weedsfly15 分钟前
前端中的适配器模式 vs 外观模式
前端·javascript·面试
图扑软件16 分钟前
其域创新 × 图扑软件|3DGS 高斯泼溅智慧钢厂实景孪生
前端·低代码·3d·编辑器·图形渲染·可视化
labixiong18 分钟前
写给前端的 Generator 指南:从 yield 到 async/await 的完整进化
前端·javascript·前端框架
asdzx6719 分钟前
使用 Spire.WordJS 在 React 中实现在线 Word 文档编辑
前端·react.js·word
大大大大晴天20 分钟前
聊聊Flink的几种血缘方案
前端·flink
消失的旧时光-194325 分钟前
KMP Web 开发实战(二):js、wasmJs、browser、executable 到底是什么意思?
开发语言·前端·javascript·跨平台·kmp