将多个 PDF 文件合并/转换为一个 PDF [关闭]

2024-10-10 08:38:00
admin
原创
214
摘要:问题描述:如何将多个 PDF 文件合并/转换为一个大的 PDF 文件?我尝试了以下操作,但目标文件的内容并不像预期的那样:convert file1.pdf file2.pdf merged.pdf 我需要一个非常简单/基本的命令行 (CLI) 解决方案。最好的办法是,我可以将合并/转换的输出直接通过管道传输...

问题描述:

如何将多个 PDF 文件合并/转换为一个大的 PDF 文件?

我尝试了以下操作,但目标文件的内容并不像预期的那样:

convert file1.pdf file2.pdf merged.pdf

我需要一个非常简单/基本的命令行 (CLI) 解决方案。最好的办法是,我可以将合并/转换的输出直接通过管道传输到pdf2ps(正如我之前在此处提出的问题中最初尝试的那样:Linux 管道(转换 -> pdf2ps -> lp))。


解决方案 1:

考虑到它pdfunite是poppler的一部分,因此安装的可能性更高,使用也比以下更简单pdftk

⚠ 重要提示:请务必记得提供out.pdf,否则它将覆盖命令中的最后一个输入文件 ⚠

pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf

更安全的解决方案可能包括针对输出文件的不存在性测试

export output_file=out.pdf && \n! test -e $output_file && \npdfunite in-1.pdf in-2.pdf in-n.pdf $output_file

解决方案 2:

尝试一下好的ghostscript:

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=merged.pdf mine1.pdf mine2.pdf

或者甚至可以通过这种方式获得针对低分辨率 PDF 的改进版本(感谢 Adriano 指出这一点):

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

在这两种情况下,输出分辨率都比使用转换的方式高得多且更好:

convert -density 300x300 -quality 100 mine1.pdf mine2.pdf merged.pdf

这样,您就不需要安装任何其他东西,只需使用您系统中已经安装的东西(至少在我的盒子里两者都默认安装)。

更新 #1:首先感谢大家的精彩评论!!这只是一个可能对你们有用的提示,在谷歌搜索之后,我发现了一个缩小 PDF 大小的绝妙技巧,我用它将一个 300 MB 的 PDF 缩小到只有 15 MB,并且分辨率可以接受!所有这些都使用优秀的 ghostscript,如下所示:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=output.pdf input.pdf

更新 #2:如果您需要“刻录”编辑并压缩使用 Acrobat 制作的 PDF,这将有所帮助:

gs -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dPDFSETTINGS=/screen -dEmbedAllFonts=true -dSubsetFonts=true -dColorImageDownsampleType=/Bicubic -dColorImageResolution=144 -dGrayImageDownsampleType=/Bicubic -dGrayImageResolution=144 -dMonoImageDownsampleType=/Bicubic -dMonoImageResolution=144 -sOutputFile=compressed.pdf withedits.pdf

解决方案 3:

抱歉,我通过谷歌和一点点运气自己找到了答案:)

对于那些感兴趣的人;

我在我们的 debian 服务器上安装了 pdftk(pdf 工具包),并使用以下命令获得了所需的输出:

pdftk file1.pdf file2.pdf cat output output.pdf

或者

gs -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf file1.pdf file2.pdf file3.pdf ...

这反过来可以直接传输到pdf2ps。

解决方案 4:

如果您有多个文件并且不想逐个输入名称,这是最简单的解决方案:

qpdf --empty --pages *.pdf -- out.pdf

解决方案 5:

还将pdfjoin a.pdf b.pdf创建一个新的,b-joined.pdf其中包含 a.pdf 和 b.pdf 的内容

解决方案 6:

pdfunite可以合并整个 PDF。例如,如果您想要 file1.pdf 中的第 2-7 页和 file2.pdf 中的第 1、3、4 页,则必须使用pdfseparate将文件拆分为单独的 PDF,并将每页提供给pdfunite

此时,您可能需要一个具有更多选项的程序。qpdf是我发现的用于处理 PDF 的最佳实用程序。pdftk更大、更慢,Red Hat/Fedora 不会打包它,因为它依赖于 gcj。 其他 PDF 实用程序具有 Mono 或 Python 依赖项。 我发现qpdf生成的输出文件比使用pdfseparatepdfunite将页面组装成 30 页输出 PDF 要小得多,970kB vs. 1,6450 kB。 由于它提供了更多选项,qpdf因此命令行并不那么简单; 合并文件 1 和文件 2 的原始请求可以使用以下方式执行

qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf

解决方案 7:

您可以直接使用转换命令,

例如

convert sub1.pdf sub2.pdf sub3.pdf merged.pdf

解决方案 8:

安装 python3 并pdftools从 PyPI 安装:

pip install pdftools

并运行以下命令

pdftools merge file1.pdf file2.pdf file3.pdf -o output.pdf

此工具支持

  • 添加:将源文件中的页面添加到输出 PDF 文件

  • 复制:将 PDF 文件的特定页面复制到新文件中

  • 插入:将一个文件的页面插入另一个文件的页面

  • 合并:将多个输入文件的页面合并为一个输出文件

  • 删除:从 PDF 文件中删除页面

  • 旋转:将 PDF 文件的页面旋转 90 度

  • 拆分:将 PDF 文件拆分为多个文档

  • zip:类似 Python 的压缩方式,将两个文档的页面交错压缩到一个输出文件中

你可以在 GitHub 上找到更多详细信息,它是开源的

解决方案 9:

Apache PDFBox
http://pdfbox.apache.org/

PDFMerger 此应用程序将获取 pdf 文档列表并将其合并,并将结果保存在新文档中。

用法:java -jar pdfbox-app-xyzjar PDFMerger“源 PDF 文件 (2 ..n)”“目标 PDF 文件”

解决方案 10:

虽然它不是一个命令行解决方案,但它可以帮助macos用户:

  1. 选择您的 PDF 文件

  2. 右键单击突出显示的文件

  3. 选择“快速操作” > “创建 PDF”

解决方案 11:

您可以使用sejda-console,免费且开源。解压并运行 sejda-console merge -f file1.pdf file2.pdf -o merged.pdf

它保存书签、链接注释、acroforms 等。它实际上有很多选项可供您使用,只需运行sejda-console merge -h即可查看所有选项。

解决方案 12:

作为 PyMuPDF(MuPDF 的 Python 绑定)的开发人员之一,我有偏见。

你可以用它轻松做你想做的事(甚至更多)。骨架代码的工作原理如下:

#-------------------------------------------------
import fitz         # the binding PyMuPDF
fout = fitz.open()  # new PDF for joined output
flist = ["1.pdf", "2.pdf", ...]  # list of filenames to be joined

for f in flist:
    fin = fitz.open(f)  # open an input file
    fout.insertPDF(fin) # append f
    fin.close()

fout.save("joined.pdf")
#-------------------------------------------------

就是这样。有多个选项可用于仅选择页面范围、维护联合目录、反转页面顺序或更改页面旋转等。

我们在 PyPi 上。

解决方案 13:

我赞同这个建议。但是当我尝试合并 > 2k 个 PDF 文件时,pdfunite出现了错误。Argument list too long

为此,我使用了 Python 和两个外部包:PyPDF2(用于处理所有与 PDF 相关的内容)和natsort(用于对目录的文件名进行“自然”排序)。希望这对某人有所帮助:

from pathlib import Path
from PyPDF2 import PdfMerger
import natsort

DIR = 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)

解决方案 14:

我使用终端的 qpdf 在 Windows(Mobaxterm)和 Linux 上工作,例如将 A.pdf 与 B.pdf 合并为新文件 C.pdf 的命令是:

qpdf --empty --pages oficios/A.pdf informes/B.pdf -- salida/C.PDF

如果需要更多文档https://net2.com/how-to-merge-or-split-pdf-files-on-linux/

解决方案 15:

如果你想将所有下载的图像转换为一个 pdf,请执行

convert img{0..19}.jpg slides.pdf

解决方案 16:

您可以看到使用免费的开源pdftools(免责声明:我是它的作者)。

它基本上是 Latex 包的 Python 接口pdfpages

要逐个合并 pdf 文件,您可以运行:

pdftools --input-file file1.pdf --input-file file2.pdf --output output.pdf

要将目录中的所有 pdf 文件合并在一起,您可以运行:

pdftools --input-dir ./dir_with_pdfs --output output.pdf

解决方案 17:

这是一个检查合并错误的 Bash 脚本。

我遇到了一个问题,几个 PDF 合并产生了一些错误消息。由于要找到损坏的 PDF 需要反复尝试,所以我为此编写了一个脚本。

以下 Bash 脚本会逐个合并文件夹中所有可用的 PDF,并在每次合并后显示成功状态。只需将其复制到包含 PDF 的文件夹中并从那里执行即可。

#!/bin/bash

PDFOUT=_all_merged.pdf
rm -f "${PDFOUT}"

for f in *.pdf
do
  printf "processing %-50s" "$f  ..." >&2
  if [ -f "$PDFOUT" ]; then
    # https://stackoverflow.com/questions/8158584/ghostscript-to-merge-pdfs-compresses-the-result
    #  -dPDFSETTINGS=/prepress
    status=$(gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="${PDFOUT}.new" "${PDFOUT}" "$f" 2> /dev/null)
    if [ "$status" ]
    then
      echo "gs ERROR: $status" >&2
    else
      echo "successful" >&2
    fi
    mv "${PDFOUT}.new" "${PDFOUT}"
  else
    cp "$f" "${PDFOUT}"
    echo "successful" >&2
  fi
done

示例输出:

processing inp1.pdf  ...                                     successful
processing inp2.pdf  ...                                     successful

解决方案 18:

这是我使用的方法,它有效且易于实现。这将需要 fpdffpdi,可在此处下载:

require('fpdf.php');
require('fpdi.php');

$files = ['doc1.pdf', 'doc2.pdf', 'doc3.pdf'];

$pdf = new FPDI();

foreach ($files as $file) {
    $pdf->setSourceFile($file);
    $tpl = $pdf->importPage(1, '/MediaBox');
    $pdf->addPage();
    $pdf->useTemplate($tpl);
}

$pdf->Output('F','merged.pdf');

解决方案 19:

PdfCpu 运行良好:

pdfcpu merge c.pdf a.pdf b.pdf

https://pdfcpu.io/core/merge

解决方案 20:

如果你想用 Ghostscript 合并目录中的所有 PDF 文件,你可以使用 find 来实现。以下是示例

find . -name '*.pdf' -exec gs -o -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=../out.pdf {} +

将在当前目录中找到所有 pdf,并在父目录中创建 out.pdf。如果他们正在寻找一种使用 ghostscript 处理整个目录的快速方法,这可能会很有用。

解决方案 21:

pdfconcat -o out.pdf 1.pdf 2.pdf

“pdfconcat 是一个用 ANSI C 编写的小型、快速的命令行实用程序,可以将多个 PDF 文件连接(合并)为一个长 PDF 文档。”

解决方案 22:

我喜欢 Chasmo 的想法,但我更喜欢利用以下优势

convert $(ls *.pdf) ../merged.pdf

提供多个源文件会convert导致它们合并为一个通用的 pdf。此命令将.pdf实际目录中所有带扩展名的文件合并到merged.pdf父目录中。

解决方案 23:

还有一个有用的选项是您还想选择要合并的文档内的页面:

pdfjoin image.jpg '-' doc_only_first_pages.pdf '1,2' doc_with_all_pages.pdf '-'

它附带了 texlive-extra-utils 包

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用