【问题标题】:Can I create a PDF which will always opens at zoom level 100%?我可以创建一个始终以 100% 缩放级别打开的 PDF 吗?
【发布时间】:2015-03-27 16:05:41
【问题描述】:

我遇到了将 PNG 转换为 PDF 的问题。

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

在 PDF 转换中,它会创建一个大的 PDF 文件。我对其质量没有任何问题,但每当我尝试在 PDF 查看器中打开此 PDF 时,它都会以“适合页面”模式打开。

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

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

【问题讨论】:

  • 你能提供一个示例PNG吗?
  • 如果 PDF 已经在 “适合页面”中打开,我不明白您应该如何“放大到 100%”模式?适合页面处于这种(自动)缩放级别,以便您始终看到整页。 100% 缩放可以使页面视图非常小(对于原始 PDF 页面的小尺寸)和非常大,以便您只能看到部分页面内容(对于 PDF 页面的大尺寸)。
  • 您知道您还可以将大多数 PDF 查看器设置为覆盖 PDF 中为初始查看模式设置的任何内容吗?你可以告诉 f.e. Acrobat Reader 始终以 100% 缩放打开文件。查找“首选项” 菜单....

标签: image pdf imagemagick image-manipulation


【解决方案1】:

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

【讨论】:

  • 感谢您的回复..你能举个例子...我怎样才能在pdf中实现这一点?
  • 您使用什么工具来创建 PDF 文件?
  • 我认为不需要 PDF 操作。正如 Kurt Pfeifle 所建议的,页面的 PageMode 设置需要在创建时或之后设置为原始大小。
  • @iPDFdev 正在使用 ImageMagick 通过 convert 命令从 png 创建一个 pdf。
【解决方案2】:

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

Ghostscript 支持通过-c "...[PostScript code here]..." 将 PostScript sn-ps 插入其命令行参数中。

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

所以你可以尝试插入

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

转成PDF->PDF转换Ghostscript命令行。

请注意关于这个sn-p的各种基本事项:

  1. 关于[] 运算符/关键字,命令行 sn-p 的内容似乎“不平衡”。但事实并非如此!最初的 [ 由最后的 pdfmark 关键字平衡。 (别问——我没有定义这个语法……)

  2. “内部”[ ... ] 方括号分隔一个 数组,表示您想要的页面 /View 设置。

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

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

关于这个 sn-p 的一些具体事情:

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

因此,要更改现有 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 上搜索 'pdfmark reference filetype:pdf'。您应该可以在 Adob​​e 网站和其他地方找到它:

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

【讨论】:

    猜你喜欢
    • 2014-03-08
    • 2015-12-27
    • 2021-05-29
    • 2022-10-07
    • 2014-06-17
    • 2011-11-15
    • 1970-01-01
    • 2014-08-26
    相关资源
    最近更新 更多