手动安装

手动安装

我正在尝试合并不同的 pdf 文件(所有文件都是用 latex 生成的 - 但文档类别不同)不会破坏相应的超链接

我已经尝试使用 ghostscript、apple automator 和 latex 中的选项的终端\includepdf:它们都会破坏使用 hyperref 创建的超链接。

有什么好建议吗?

编辑:这似乎是一个常见问题,有人能尝试解释/评论为什么这种看似简单的任务反而相当艰巨吗?是什么使得合并 pdf 而不破坏超链接变得困难?

答案1

我的方法使用pax包及其pdfannotextractorPerl 脚本(由海科·奥伯迪克)。

如果要合并两个 PDF 文件(a.pdfb.pdf)并保留 PDF 注释(内部和外部链接都属于 PDF 注释的一种),请使用手动或自动方法。

(如果出现问题,可以使用脚本--debug的选项pdfannotextractor。)

手动安装

  1. pax从 CTAN(或通过 TeXLive 或 MikTeX)安装包。

  2. 下载并解压缩 PDFBox-0.7.3Java 库(Apache PDFBox 的旧版本,一个 Java PDF 库)。

  3. pdfannotextractor不断使用:a.pdfb.pdf

    CLASSPATH='PDFBox-0.7.3/lib/PDFBox-0.7.3.jar:%CLASSPATH%' pdfannotextractor a.pdf
    CLASSPATH='PDFBox-0.7.3/lib/PDFBox-0.7.3.jar:%CLASSPATH%' pdfannotextractor b.pdf
    

    (您将获得两个新文件:a.paxb.pax

  4. 使用 编译以下文档pdflatex

    \documentclass{article}
    \usepackage{pax}
    \usepackage{pdfpages}
    \begin{document}
    \includepdf[pages=-]{a.pdf}
    \includepdf[pages=-]{b.pdf}
    \end{document}
    

自动安装

pdfannotextractor脚本可以自行执行安装:

  1. pax从 CTAN(或通过 TeXLive 或 MikTeX)安装包。

  2. 自动安装PDFBox-0.7.3档案:

    pdfannotextractor --install
    
  3. pdfannotextractor不断使用:a.pdfb.pdf

    pdfannotextractor a.pdf
    pdfannotextractor b.pdf
    

    (您将获得两个新文件:a.paxb.pax

  4. 使用 编译以下文档pdflatex

    \documentclass{article}
    \usepackage{pax}
    \usepackage{pdfpages}
    \begin{document}
    \includepdf[pages=-]{a.pdf}
    \includepdf[pages=-]{b.pdf}
    \end{document}
    

答案2

结论

使用

  • pdftk如果需要命令行界面,
  • pdfsam如果你想要图形用户界面,
  • 塞伊达如果您想要一个 Web 界面。

它们是免费的(就像啤酒一样语音)并且适用于大多数操作系统。
我不知道为什么大多数工具不保留超链接。


方法

有关可能的解决方案的列表 - 不幸的是没有讨论何时保留链接,请参阅。https://stackoverflow.com/q/2507766/2657549

我正在使用以下文件的两个副本进行测试,我将其命名为a.pdfb.pdf

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{bib.bib}
@misc{ex,
  author={Doe, Jack},
  title={An Example}
}
\end{filecontents*}
\usepackage{biblatex}
\addbibresource{bib.bib}
\usepackage{hyperref}

\begin{document}

\section{A section}
\label{section}

url: \href{https://tex.stackexchange.com/a/531215/34551}{this post}

reference: \cite{ex}

internal link: \ref{section}

file link: \href{run:a.pdf}{file}

\printbibliography
\end{document}

我使用以下工具将它们合并为一个tot.pdf文件,并测试 URL、引用和内部链接是否在两个文档中保留。

+-----------+----------------------------------------------------------------------------+------+-------+-------+------+
|  Software |                                   Command                                  |  url |  ref. |  link | file |
+-----------+----------------------------------------------------------------------------+------+-------+-------+------+
|  convert  | convert a.pdf b.pdf tot.pdf                                                | ✗    | ✗     | ✗     | ✗   |
|  pdfjam   | pdfjam a.pdf b.pdf -o tot.pdf                                              | ✗    | ✗     | ✗     | ✗   |
|  gs       | gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=tot.pdf a.pdf b.pdf | ✗    | ✗     | ✗     | ✗   |
|  pdfunite | pdfunite a.pdf b.pdf tot.pdf                                               | ✓    | ✗     | ✗     | ✓   |
|  pdftk    | pdftk a.pdf b.pdf cat output tot.pdf                                       | ✓    | ✓     | ✓     | ✓   |
|  pdfsam   | (it's a gui)                                                               | ✓    | ✓     | ✓     | ✓   |
| sejda.com | (it's a website)                                                           | ✓    | ✓     | ✓     | ✓   |
+-----------+----------------------------------------------------------------------------+------+-------+-------+------+

(请注意,如果引用的文档正在合并,则文件链接不会转换为内部锚点。如果不重写 LaTeX 源代码,我认为这是不可行的。)

版本

  • 转换:ImageMagick 6.9.10-23 Q16 x86_64 20190101
  • pdfjam:这是 pdfjam 3.03 版本。
  • gs:GPL Ghostscript 9.27(2019-04-04)
  • pdfunite:版本 0.71.0
  • pdftk:移植到 Java 3.0.2,打造一个操作 PDF 文档的便捷工具
  • pdfsam:PDF 拆分与合并基础版 4.0.1
  • https://www.sejda.com/merge-pdf没有提到任何版本,但于 2020/03/04 进行了测试。

许可证和定价

其他选择

未测试:

答案3

还有一些工具可以合并pdf文件同时保留超链接。我重新测试了一些比较成熟的工具。

Ghostscript(免费)

我测试的所有命令都破坏了一些链接(但我可能错过了适合您的命令)。
 

PDFSAM / Sejda(免费增值版)这些产品来自同一来源,但风格各异。

我使用 Sejda online 4 文件取得了最大的成功,它们将具有按预期工作的内部/外部链接。但是请注意,在我的有限测试中,最后一份文档为了论证起见而说的第 1-5 页现在将是例如总数的物理 15-19,但它们被保留为逻辑 1-5,因此我可以从第 3 页(18)内部跳转到第 2 页(17)或索引 5(19)- 内容 1(15)等,我确实看到旧的数字 1-5 正在使用中,这很有帮助。

Pdftk(免费增值版)也很好地合并到了免费版中。
但是,与上面类似构建的页面仅显示新的物理页码,因此看到第 1 页的链接跳转到第 15 页很奇怪。

总之,你确定这是可行的方法吗?因为内部链接和页码的编号会到处都是。将所有文件包含在 main.tex 中更有意义,因为可以控制页码和链接的编号。

答案4

PDF-XChange 编辑器这样做似乎没有任何问题。但是,这是一项“高级功能”,当您使用免费版本执行此操作时,编辑器会在整个文档上盖上通知。

相关内容