为了减小所生成的 PDF 的大小,pdflatex
我通常运行以下命令:
$ gs -sDEVICE=pdfwrite \
-dCompatibilityLevel=1.4 \
-dPDFSETTINGS=/printer \
-dEmbedAllFonts=true \
-dSubsetFonts=true \
-dFastWebView=true \
-dNOPAUSE \
-dQUIET -dBATCH \
-sOutputFile=out.pdf \
in.pdf
当我将 Ghostscript 更新到版本 25 (9.25) 时,hyperref 自动创建的超链接停止工作:它们不再可点击。
我尝试在 Ghostscript bugzilla 上提交错误报告,他们回复说这是预期的行为。请参阅此错误报告。
基本上,引用他们的答案:
如果 /Link 注释的注释 /Flags 值的“打印”位未设置,则 PDF 解释器将(默认)不处理该注释。如果 PDF解释器跳过注释,那么 pdfwrite 设备就永远看不到它。
如果注释(无论何种类型)确实设置了打印位,那么(再次在默认设置中)PDF 解释器将处理注释并将其传递给 pdfwrite 设备。
您可以更改解释器的行为。如果您设置 -dPrinted=false,则解释器不再关心注释标志的 Print 位。在此模式下,它会检查 NoView 位,如果未设置,则它会处理注释。
在这种情况下,如果如果设置了 NoView 位,则会跳过注释。
因此,您需要了解当前注释的创建方式。
这之所以重要,是因为本来应该控制注释是否被处理的控件 (-dPrinted) 被忽略了。显然,这不是它应该工作的方式,并且已经修复。不幸的是,这给您带来了问题,我可能会在将来扩展此控件的操作,但截至目前,它的表现符合预期。
使用选项-dPrinted=false
链接将再次起作用(摘自 Ghostscript 手册):
-dPrinted
-dPrinted=false 确定是否应使用注释和图像的“屏幕”或“打印机”选项显示或打印文件。
使用 -dPrinted 时,输出将使用文件的“打印”选项;
使用 -dPrinted=false 时,输出将使用文件的“屏幕”选项。
如果未指定上述任何一项,则输出将使用没有 OutputFile 参数的任何输出设备的屏幕选项,以及具有此参数的设备的打印机选项。
$ gs -sDEVICE=pdfwrite \
-dCompatibilityLevel=1.4 \
-dPrinted=false \
-dPDFSETTINGS=/printer \
-dEmbedAllFonts=true \
-dSubsetFonts=true \
-dFastWebView=true \
-dNOPAUSE -dQUIET -dBATCH \
-sOutputFile=out.pdf \
in.pdf
这是有道理的使用此开关,因为超链接是不打算打印, 当然。
但是如果我想设置它们,如何在 hyperref 创建的超链接上默认设置打印标志?
我尝试检查hyperref 手册:
PDF 表单字段宏(\TextField、\CheckBox 等)支持布尔标志选项。选项名称是 PDF 规范(1.7)中名称的小写版本:
http://www.adobe.com/devnet/pdf/pdf_reference.html
http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference.pdf
选项(转换为小写),方括号中的标志除外:
- 表 8.16 注释标志(第 608 页):
- 无形的
- 隐藏 (PDF 1.2)
- 打印(PDF 1.2)
- 无缩放 (PDF 1.3)
- 禁止旋转 (PDF 1.3)
- 无视图 (PDF 1.3)
- [ReadOnly (PDF 1.3)] 忽略小部件注释,见表 8.70
- 已锁定(PDF 1.4)
- 切换无视图 (PDF 1.5)
- 锁定内容 (PDF 1.7)
但我真的不明白如何明确地设置它们。
答案1
我认为Print
如果您滥用该pdfa
选项,您就可以设置标志。
\usepackage[pdfa]{hyperref}
(参见 hyperref 手册的“5.12 选项 pdfa”部分)。
这至少似乎在我的本地安装上有效(需要 gs 9.25。如果没有该pdfa
选项并gs
使用 -dPrinted 运行命令,超链接将被删除;使用该pdfa
选项,超链接将被保留)。
答案2
OP @alex-pacini 在 hyperref repo 上提问,两年半后 :) 结果是提及可以在 hyperref 创建的超链接上默认设置打印标志,但必须使用“新 PDF 管理”:
\RequirePackage{pdfmanagement-testphase}
\DeclareDocumentMetadata{uncompress}
\documentclass{article}
\usepackage{hyperref}
\ExplSyntaxOn
\bitset_set_true:Nn \l_pdfannot_F_bitset {Print}
\pdfannot_dict_put:nnn {link/URI}{F} { \bitset_to_arabic:N \l_pdfannot_F_bitset }
\pdfannot_dict_put:nnn {link/GoTo}{F}{ \bitset_to_arabic:N \l_pdfannot_F_bitset }
\ExplSyntaxOff
\begin{document}
\url{https://github.com/latex3/hyperref}
\end{document}