将带有可点击外部链接的 PDF 文件嵌入到 LaTeX 文档中

将带有可点击外部链接的 PDF 文件嵌入到 LaTeX 文档中

我想将网页截图作为带有可点击链接的矢量图形嵌入到 LaTeX 文档中。

我在用着转PDF将网页渲染为带有有效链接的信纸大小的 pdf 文件。然后,我使用此命令裁剪 pdf 文件,同时保留链接:

gs -sDEVICE=pdfwrite -o "screenshot_cropped.pdf" -c "[/CropBox [`gs -sDEVICE=bbox -dBATCH -dNOPAUSE "screenshot.pdf" 2>&1 | awk '/HiRes/ { print $2,$3,$4,$5 }'`] /PAGES pdfmark" -f "screenshot.pdf"

(命令取自comp.text.tex 上的这个主题;我不能使用pdfcrop,因为它显然删除了链接)

最后,我使用以下命令将文件嵌入到我的 LaTeX 文档中:

\includegraphics[width=6 in]{screenshot_cropped.pdf}

不幸的是,生成的 pdf 文件中的链接不再起作用。我该如何修复?如果重要的话,我会使用 XeLaTeX。

答案1

引用pdfpages手册(第 2 页)

[...] 各种链接1将在包含过程中丢失。(使用\includepdf\includegraphics或其他低级命令。)

不过,还是有一线希望的。一些链接可能会被一个名为帕克斯可以从 CTAN 下载[3]。 看看它!

pax提到的包实际上是一个 Java 程序,它读取 PDF 文件,提取链接并将其位置写入文件.pax。此信息可以通过扩展版本进行处理,该版本\includegraphics会将链接重新插入到正确的位置。但是,该包被认为是实验性的并且只适用于pdfLaTeX

使用方法如下pax

  • 下载并安装来自 CTAN 的包
  • 运行pdfannotextractor.pl --install。这将下载并安装PDFBox,使用 所必需的 Java 库pax
  • 现在您可以运行pdfannotextractor.pl <filename.pdf>以读取任何给定 PDF 文件中的链接并将其写入filename.pax
  • 在您的 LaTeX 文档中,调用\usepackage{pax}。这将扩展\includegraphics以读取和处理辅助.pax文件。

关于使用 Ghostscript 裁剪 PDF 文件:在我的实验中,这似乎会造成混淆pax,导致超链接的位置错误。因此,最好wkhtmltopdf使用

wkhtmltopdf -B 0毫米 -L 0毫米 -R 0毫米 -T 0毫米  

以便从一开始就不产生任何利润。


这是我的工作测试用例(使用网站https://tex.stackexchange.com/about):

创建 PDF 和注释文件:

wkhtmltopdf -B 0mm -L 0mm -R 0mm -T 0mm https://tex.stackexchange.com/about screenshot.pdf
pdfannotextractor.pl 截图.pdf

LaTeX 源代码

\documentclass{article}
\usepackage[margin=0mm]{geometry}
\usepackage{pax}

% Visible squares for demonstration purposes, can be removed without harm
% (change \iftrue to \iffalse or remove the following lines altogether)
\iftrue
  \usepackage{hyperref}
  \hypersetup{
    filebordercolor={1 1 0},
  }
\fi

\begin{document}
    \includegraphics[scale=0.9]{screenshot}
\end{document}

结果:

输出结果,可见的方块表示超链接

(青色框表示超链接有效,可以删除而不会产生任何后果。)

答案2

我担心这不可能。这让我想起了 PGF 手册中关于该pgfpages包的注释。

警告:使用pgfpages将破坏超链接。实际上,超链接并没有被破坏,只是它们会在最终输出中出现在完全错误的位置。这是由于 pdf 规范中的一个根本缺陷:在 pdf 中,超链接的边界矩形以“绝对页面坐标”给出,平移或旋转不会影响它们。因此,pgfpages 为将页面放置在您想要的位置而应用的转换(甚至不能)应用于超链接的坐标。这种情况在可预见的未来不太可能改变。

答案3

您可以使用该包新人. 不像diabonas 的回答,该包可与 LuaLaTeX 和 XeTeX 配合使用。

相关内容