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

Abh*_*uke 4 pdf image-manipulation image imagemagick

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

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

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

因此,我无法在初始视图中看到创建的PDF,但我需要将其缩放到100%.

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

Kur*_*fle 5

你可以在Ghostscript的帮助下实现你想要的.

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

PostScript有一个特殊的运算符叫pdfmark.大多数PostScript解释器都不理解此运算符,但Acrobat Distiller和(对于其大多数参数)在生成PDF时也由Ghostscript理解.

所以你可以尝试插入

-c "[ /PageMode /UseNone /Page 1 /View [/XYZ null null 1] \
      /PageLayout /SinglePage /DOCVIEW pdfmark"
Run Code Online (Sandbox Code Playgroud)

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

请注意有关此代码段的各种基本内容:

  1. 关于[]运营商/关键字,命令行代码段的内容似乎是"不平衡的" .但事实并非如此!最初的[由final pdfmark关键字平衡.(不要问 - 我没有定义这种语法...)

  2. "内部" [ ... ]括号分隔表示所需页面设置的数组/View.

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

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

关于此代码段的一些具体事项:

  1. 页面模式/UseNone表示:文档显示没有书签或缩略图.它可以被替换为
    • /UseOutlines (也显示书签,而不仅仅是页面)
    • /UseThumbs (显示页面的缩略图图像,而不仅仅是页面
    • /FullScreen (以全屏模式打开文档)
  2. 构造为视图模式的数组[/XYZ <left> <top> <zoom>]意味着:缩放因子为1(= 100%),距页面原点的左边距离是特殊的"空"值,这意味着保留先前的用户设置值; 页面原点的最远距离也是"空".这个数组可以替换为
    • /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
Run Code Online (Sandbox Code Playgroud)

要检查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
   >>
Run Code Online (Sandbox Code Playgroud)

要了解有关pdfmark运算符的更多信息,请访问"pdfmark参考文件类型:pdf".您应该可以在Adobe网站和其他地方找到它:

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