ConTeXt:打印时替换 PDF 内容

ConTeXt:打印时替换 PDF 内容

是否可以创建一个打印时看起来不同的单个文档?

不是每个输入 TeX 排版多个文档的单独模式,而是打印方式与电子版不同的单个文档?

我知道有各种适用于 LaTeX 的 OCG 包。有适用于 ConTeXt 的包吗?

我的目标是在打印时将第一个链接转换为第二个链接:

\definefallbackfamily   [mainface] [serif] [Symbola] [range={miscellaneoussymbolsandpictographs}]
\definefontfamily       [mainface] [serif] [DejaVu Serif]
\definefontfamily       [mainface] [sans]  [DejaVu Sans]
\definefontfamily       [mainface] [mono]  [DejaVu Sans Mono]

\setupbodyfont[mainface]

\definesymbol[link][\utfchar{"1F517}]

\def\raisedlink{%
    \tfxx%
    \setbox\scratchbox\hbox{\symbol[link]}%
    \raise0.5\dp\scratchbox\box\scratchbox%
}

\setupinteraction
    [state=start,
     style=,
     color=,
    ]

\useURL
    [web:contextElectronic]
    [https://github.com/contextgarden/context-mirror]
    []
    [{github.com/contextgarden\raisedlink}]

\useURL
    [web:contextPrint]
    [https://github.com/contextgarden/context-mirror]
    []
    [{github.com/contextgarden}]

\showallmakeup


\starttext
[\from[web:contextElectronic]]

[\from[web:contextPrint]]
\stoptext

* 在打印版本中,请注意链接和结束括号之间缺少空格。

答案1

您可以使用该机制创建仅在文档的屏幕或打印版本中显示的图层viewerlayer。命令的内容是否出现在打印输出中由键控制printable

在此处输入图片描述

您应该知道,许多 PDF 查看器会忽略设置并在屏幕上显示命令的参数,并且只有 Adob​​e Reader 具有可靠的输出。

\usesymbols [fontawesome]

\defineviewerlayer [print] [state=stop,printable=yes]

\setupinteraction [state=start]

\useURL
  [context-github]
  [https://github.com/contextgarden/context-mirror]
  []
  [{github.com/contextgarden\viewerlayer[print]{\symbol[fontawesome][external-link]}}]

\starttext

\from[context-github]

\stoptext

答案2

尽管viewerlayer图层是独立查看的,但它们是一起排版的。内容的定位好像所有图层都是可见的,并且周围的文本不会根据图层的可见性而移动。

\defineviewerlayer [print] [state=stop,printable=yes]

\starttext
\rightaligned{First flush-right sentence\viewerlayer[print]{... or is it}}

\rightaligned{Second flush-right sentence}
\stoptext

打印时,两个句子看起来彼此对齐,并且右边缘对齐。查看时,第一个句子与第二个句子对齐,因为其位置由后续查看器层内容决定,即使该层被隐藏。要解决这个问题,您需要对所有受影响的内容进行两次排版,将每个内容分配给两个独有层之一(即仅打印与仅查看),然后重叠这些层:

\defineviewerlayer [print] [state=stop,printable=yes]
\defineviewerlayer [view]  [state=start,printable=no]

\starttext
\rightaligned{\viewerlayer[view]{First flush-right sentence}\llap{\viewerlayer[print]{First flush-right sentence... or is it}}}

\rightaligned{Second flush-right sentence}
\stoptext

然而,这正是你开始遇到错误的地方。以下示例演示了 ConTeXt 的问题2018.12.18在排版具有多个查看器层的文档时会出现此问题。主要是这些层似乎没有正确关闭,因此该层会包含所有后续内容。文档在 Adob​​e Reader 11 中进行了测试。

\showallmakeup启用时,之后的所有内容都\viewerlayer[print]属于该层:

\defineviewerlayer[print][state=stop,printable=yes,]
\showallmakeup

\starttext
    \viewerlayer[print]{One} more.

    \samplefile{knuth}
\stoptext

与上面相同的问题,用\start...stopviewerlayer而不是 来演示\viewerlayer

\defineviewerlayer[print][state=stop,printable=yes,]
\showallmakeup

\starttext
    \startviewerlayer[print]
        And then:
    \stopviewerlayer

    \samplefile{knuth}
\stoptext

打印层(以及其他内容)属于视图层,而不是两个独立的层。因此隐藏视图层会隐藏全部本文档内容:

  • [看法]
    • 第一的
    • \samplefile{knuth}
    • [打印]
      • 第二
\defineviewerlayer[print][state=stop,printable=yes,]
\defineviewerlayer[view][state=start,printable=no,]

\starttext
    \startviewerlayer[view]{first}

    \samplefile{knuth}

    \startviewerlayer[print]{second}
\stoptext

没关系,我忘了用 关闭块了\stopviewerlayer

此外,ConTeXt 创建的 PDF 的打印图层会被 ghostscript 和 poppler 引擎忽略,尽管这些引擎支持此类功能。请参阅对已接受答案的评论

如果你不需要如此复杂的排版,你最好使用链接注释。请参阅对问题的评论

请记住,链接注释不是标记注释,因此不会显示“内容”条目。因此,它们只能通过覆盖 Border、BS、BE、AP 和 AS 条目指定的附加内容来补充标准页面内容(即 URI,它将始终显示,无论是打印还是屏幕)... [以及链接操作]。

以下是 ConTeXt 支持的(可见)链接注释功能,lpdf-ano.lua。有关更多信息,请参阅第 8.4 节“注释”。Adobe PDF 1.7 规范,评论中也提到了。

  • /Border

    {0,0,0}ConTeXt 仅支持 PDF 1.0 字段。若未references.border使用则设置为;否则{0,0,0.5}设置为。用户无法配置。

    horizontal corner radius (PDF 1.0)
    vertical corder radius   (PDF 1.0)
    border width             (PDF 1.0)
    dash array               (PDF 1.1)
    
  • /C(颜色)

    这是 设置的字段references.border。ConTeXt 仅支持三项版本DeviceRGB。由于 ConTeXt 特定的转换,您可以使用“绿色”之类的颜色名称。

  • /H(突出显示;特定于链接注释)

    设置为N,则不突出显示,如果actions.highlightFalse。这是您通常看到的。否则,ConTeXt 将此字段留空,并且根据 PDF 规范,它默认为I,反转 - 反转注释矩形的内容。我不确定如何设置actions.highlight

ConTeXt 不支持或设置较新的“边框样式”(BS,PDF 1.2)、“边框效果”(BE,PDF 1.5)、外观(AP,PDF 1.2)或外观状态(AS,PDF 1.2)字段。

/F条目是一个表示各种标志的位字段。对于链接注释 ConTeXt似乎设置/F为 4或 0b100。这仅启用字段Print,并且应强制在打印页面时打印链接注释边框以实现 PDF/A 兼容性。这不会发生 - 打印时链接注释边框被隐藏 - 我不知道为什么。

相关内容