pax
我必须将一些 HTML 文档合并到 LaTeX 工作流程中。我在使用该软件包时遇到了内部链接问题。
我用它wkhtmltopdf
来从 html 生成 pdf 页面。我使用该pdfpages
包将pax
这些 pdf 页面嵌入到 LaTeX 源中。
当我使用 pdflatex 编译时,来自 html 源 pdf 的链接不再起作用。
链接做工作在 wkhtmltopdf 生成的 pdf 中,然后才将其包含在 LaTeX 文档中。
我使用以下命令,使用 java 1.6 提取链接信息:
java -cp /usr/local/share/java/pax.jar:/usr/local/share/java/PDFBox-0.7.3.jar \
pax.PDFAnnotExtractor filename.pdf
我也使用了pdfannotextractor.pl
pax 附带的脚本,结果相同:我收到许多类似这样的错误消息:
!!! Warning: Annotation on page 1 not recognized!
java.lang.NullPointerException
尽管在这些警告的最后,它说来自脚本的* Result: [ok]
信息debug
如下所示:
PDFAnnotExtractor 0.1l, 2012/04/18 - Copyright (c) 2008, 2011, 2012 by Heiko Oberdiek.
* CLASSPATH: []
* is_win: [0]
* pax.jar: [/usr/local/share/java/pax.jar]
* pdfbox.jar: [/usr/local/share/java/PDFBox-0.7.3.jar]
* Which java: [/usr/local/bin/java]
* System: [java -cp /usr/local/share/java/pax.jar:/usr/local/share/java/PDFBox-0.7.3.jar pax.PDFAnnotExtractor logistic_python.pdf]
如果我使用 wkhtmltopdf 关闭内部链接,则不会出现任何错误。
pax 文件仍然被创建,但它看起来没有任何信息——其行看起来像这样:
\[{pagenum}{18}\\
\[{page}{1}{0 0 612 792}{}\\
\[{annot}{1}{Link}{50.82 579.93 75.57 591.18}{GoTo}{
DestLabel={1},
Border={[0 0 0]},
}\\
果然,当我将 LaTeX 文档转换为 pdflatex 时,生成的 PDF 中的链接不起作用。
我在 FreeBSD 上,使用 TeXLive 2015、PDFBox-0.7.3。我在 Windows 机器上使用最新的 wkhtmltopdf 从 html 创建 pdf。
编辑
考虑到平台之间的差异可能是原因,我尝试pax
在 Windows 上使用该 Java 程序以及该wkhtmltopdf
程序 (Win7)。结果相同。此外,我现在正在使用这个简单的 html 文件进行测试:
<html>
<head><title>my title</title></head>
<body>
<h1>test</h1>
<p><a href="#myanchor">Click</a> me.</p>
<h2><a name="myanchor">Anchor</a></h4>
<p>text</p>
</body>
</html>
即使是这种简单的情况,我也会收到空指针异常。
wkhtmltopdf test.htm test.pdf
java -cp path\to\pax.jar;\path\to\pdfbox.jar test.pdf
答案1
事实证明这不是pax
软件包或其对应的 Java 程序的问题。创建的 PDFwkhtmltopdf
具有非标准结构(无论 PDF 中的标准真正意味着什么)。
pax
我编写了一个非常具体的 Python 程序来解析此类 PDF,并按照包的 Java 程序的样式写出文件pax
。它对我有用,我可以在我的 LaTeX 工作流程中“包含”html 文件。
- 使用 wkhtmltopdf 将 html+css 转换为 pdf
- 使用我的python程序写出
pax
文件 - 使用
pdfpages
和pax
包用 LaTeX 创建最终的 pdf。
结果是包含的 PDF 看起来不错(wkhtmltopdf 理解 css)并且链接有效。这个pax
包很棒。
如果其他人遇到此问题,请参阅我的 github repo 中的代码: