image - 我可以创建一个始终以 100% 缩放级别打开的 PDF 吗?

标签 image pdf imagemagick image-manipulation

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

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

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

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

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

最佳答案

您可以在 Ghostscript 的帮助下实现您想要的。

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

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

所以你可以尝试插入

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

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

请注意有关此代码段的各种基本信息:
  • 关于 [,命令行片段的内容似乎“不平衡”。和 ]运算符/关键字。但事实并非如此!初始的 [ 由最终的 pdfmark 平衡。关键词。 (别问——我没有定义这个语法……)
  • '内在' [ ... ]括号分隔代表页面的数组/View您想要的设置。
  • 并非所有 PDF 查看器都尊重嵌入在 PDF 文件中的 View 设置(Acrobat 软件会这样做!)。
  • 大多数 PDF 查看器允许用户覆盖嵌入在 PDF 文件中的 View 设置(Acrobat 软件也这样做)。也就是说,您可以告诉您的查看器永远不要尊重它打开的 PDF 文件中的任何设置,但是 f.e.始终以“适合宽度”打开它。

  • 关于这个片段的一些具体事情:
  • 页面模式/UseNone表示:文档显示时没有书签或缩略图。它可以替换为
  • /UseOutlines (也显示书签,而不仅仅是页面)
  • /UseThumbs (显示页面的缩略图,而不仅仅是页面
  • /FullScreen (以全屏模式打开文档)
  • View 模式的数组构造为 [/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 运算符的更多信息,请在谷歌中搜索“pdfmark 引用文件类型:pdf”。您应该可以在 Adob​​e 网站和其他地方找到它:
  • https://www.google.de/search?q=pdfmark%20reference%20filetype%3Apdf&oq=pdfmark%20reference%20filetype%3Apdf

  • 为了让 ImageMagick 根据需要创建 PDF,您可以破解定义代理设置的文件。有关此主题的更多帮助,请参见此处的示例:
  • http://www.imagemagick.org/Usage/files/#delegates
  • 关于image - 我可以创建一个始终以 100% 缩放级别打开的 PDF 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28189523/

    相关文章:

    c# - 如何将 'System.Windows.Media.Imaging.BitmapImage' 转换为 'System.Drawing.Image' ?

    r - R打开时打开pdf文件

    python - 使用 imagemagick 保存 matplotlib 动画,不使用 ffmpeg 或 mencoder

    python - 如何在 Jupyter 笔记本中加载多个图像?

    php - 显示图像 HTML

    java - 使用 iText 复制带有注释的 PDF

    c - imageMagick 的 Plane2Cylinder 扭曲中是否有一个选项可以制作如下所示的图像?

    ImageMagick, "which"未被识别为内部或外部命令

    c# - 从(切孔到)图像中反转裁剪

    php - 使用 FPDM 填充 PDF 表单