设置带有 hyperref 的链接上的打印标志,以便使用 Ghostscript >= 9.25 保存它们

设置带有 hyperref 的链接上的打印标志,以便使用 Ghostscript >= 9.25 保存它们

为了减小所生成的 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 页):
    1. 无形的
    2. 隐藏 (PDF 1.2)
    3. 打印(PDF 1.2)
    4. 无缩放 (PDF 1.3)
    5. 禁止旋转 (PDF 1.3)
    6. 无视图 (PDF 1.3)
    7. [ReadOnly (PDF 1.3)] 忽略小部件注释,见表 8.70
    8. 已锁定(PDF 1.4)
    9. 切换无视图 (PDF 1.5)
    10. 锁定内容 (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}

相关内容