我能否创建始终以 100% 缩放级别打开的 PDF?

Can I create a PDF which will always opens at zoom level 100%?

我 运行 遇到 PNG 到 PDF 转换的问题。

实际上我有很多 PNG 文件,不是大小而是内容。

在 PDF 转换中,它会创建一个大的 PDF 文件。我对它的质量没有任何问题,但每当我尝试在 PDF 查看器中打开此 PDF 时,它都会以 "Fit to Page" 模式打开。

因此,我在初始视图中看不到创建的 PDF,但我需要将其放大到 100%。

我的问题是:我可以创建一个始终以 100% 缩放比例打开的 PDF 吗?

PDF 规范以这种方式支持此功能:创建转到第一页并将缩放级别设置为 100% 的 GoTo 操作,然后将该操作设置为文档打开操作。
如何在现实生活中具体实施它在很大程度上取决于您用来创建 PDF 文件的工具。我不知道ImageMagick是否可以创建这样的动作。

您可以借助 Ghostscript 实现您想要的。

Ghostscript 支持通过 -c "...[PostScript code here]...".

将 PostScript 片段插入其命令行参数

PostScript 有一个名为 pdfmark 的特殊运算符。大多数 PostScript 解释器不理解此运算符,但 Acrobat Distiller 和生成 PDF 时(对于其大部分参数)Ghostscript 也能理解。

所以你可以尝试插入

-c "[ /PageMode /UseNone /Page 1 /View [/XYZ null null 1] \
      /PageLayout /SinglePage /DOCVIEW pdfmark"

进入PDF->PDF转换Ghostscript命令行。

请注意有关此代码段的各种基本事项:

  1. 关于 [] operators/keywords,命令行片段的内容似乎是 'unbalanced'。但事实并非如此!初始 [ 由最终 pdfmark 关键字平衡。 (别问——我没有定义这个语法...)

  2. 'inner'[ ... ] 括号分隔了一个 数组,代表您想要的页面 /View 设置。

  3. 并非所有 PDF 查看器都尊重 PDF 文件中嵌入的视图设置(Acrobat 软件支持!)。

  4. 大多数 PDF 查看器允许用户覆盖嵌入在 PDF 文件中的视图设置(Acrobat 软件也这样做)。也就是说,您可以告诉您的查看器永远不要尊重它打开的 PDF 文件中的任何设置,而是 f.e。始终使用 "fit to width".

  5. 打开它

关于这个片段的一些具体事情:

  1. 页面模式/UseNone表示:文档显示时没有书签或缩略图。它可以被替换为
    • /UseOutlines(也显示书签,而不仅仅是页面)
    • /UseThumbs(显示页面的缩略图,而不仅仅是页面
    • /FullScreen(以全屏模式打开文档)
  2. 构造为[/XYZ <left> <top> <zoom>]的视图模式数组表示:缩放系数为1(=100%),页面原点左侧距离为特殊的'null'值,表示保持先前用户设定的值;距页面原点的顶部距离也是 'null'。该数组可以替换为
    • /Fit(使页面适应当前 window 大小)
    • /FitB(使可见页面内容适应当前window大小)
    • /FitH <top>' (to adapt the page width to the current window width);`表示页面原点到window.
    • 上边缘所需的距离
    • ...加上其他几个我现在记不起来了。

因此,要更改现有 PDF 文件的设置,您可以执行以下操作:

gs                                                              \
  -o out.pdf                                                    \
  -sDEVICE=pdfwrite                                             \
  -c "[ /PageMode /UseNone /Page 1 /View [ /XYZ null null 1 ] " \
  -c "  /PageLayout /SinglePage /DOCVIEW pdfmark"               \
  -f in.pdf

要检查 Ghostscript 命令是否有效,请在能够处理二进制文件的文本编辑器中打开 PDF。搜索 /View/PageMode 关键字并检查它们是否存在,并作为值插入到 PDF 根对象中。

如果有效,请检查您的 PDF 查看器是否支持这些设置。如果它不尊重他们,请查看观众偏好设置中是否有覆盖设置。

我对我的示例 PDF 进行了快速测试 运行。这是 PDF 根对象的字典现在的样子,在 pdf-parser.py:

的帮助下检查过
pdf-parser-beta.py -s Catalog a.pdf
 obj 1 0
  Type: /Catalog
  Referencing: 3 0 R, 9 0 R

   <<
     /Type       /Catalog
     /Pages      3 0 R
     /PageMode   /UseNone
     /Page       1
     /View       [/XYZ null null 1]
     /PageLayout /SinglePage
     /Metadata   9 0 R
   >>

要了解有关 pdfmark 运算符的更多信息,google for 'pdfmark reference filetype:pdf'。您应该能够在 Adob​​e 网站和其他地方找到它:

为了让 ImageMagick 根据需要创建 PDF,您可以破解定义 delegate 设置的文件。有关此主题的更多帮助,请参见此处的示例: