【问题标题】:Command line tool to mark PDF to open in Single Page view用于标记 PDF 以在单页视图中打开的命令行工具
【发布时间】:2014-10-22 00:46:58
【问题描述】:
小问题:
是否有 PDF 命令行/shell 工具(用于 osx)可以在 PDF 上设置必要的属性,以便最初在“单页视图”(适合窗口)中打开它
更多信息
我目前正在使用 WkhtmlToPdf 生成 PDF,在某些情况下,通过 PHP 使用 PDFTK 和 Mac 上的一些 shell 调用合并生成的文件。
但是,我希望用户 PDF 阅读器默认在“单页视图”/“适合窗口”中打开这些文档。
我遇到了以下question,这表明此功能已被放在 PDFTk 的功能请求列表中,但我找不到有关它正在实施的参考。我也遇到过Advanced PDF Tools(参见 -q [OpenAction] 标志)但是,这个工具似乎只适用于 Windows,我需要支持 OSX 的东西
【问题讨论】:
标签:
php
macos
shell
pdf
pdftk
【解决方案1】:
由于提问者提到了命令行,所以这个答案假定读者知道如何创建脚本并使其可执行。
使用您的操作系统的软件包系统(对于 MacOS,我建议 brew)您应该能够安装 python3-pike 库。然后创建一个包含以下内容的 Python 脚本:
from pikepdf import Pdf, Dictionary, Name
pdf=Pdf.open('input.pdf')
pdf.root.PageLayout=Name('/SinglePage')
pdf.root.PageMode=Name('/FullScreen')
pdf.save('output.pdf')
当您运行它时,它将创建 output.pdf,它是 input.pdf 的副本,除了 PDF 默认为单页布局和全屏。
【解决方案2】:
您可以使用 PostScript sn-ps 使用特殊的 pdfmark 运算符在 Ghostscript 的帮助下将适当的 DOCVIEW 设置插入到目标 PDF 中。
这是一个嵌入在文本文件中的示例,my-pdf-docview-pdfmark.ps:
[ /PageMode /UseOutlines % Display bookmarks upon opening the doc
%/PageMode /UseThumbs % Display thumbnails upon opening the doc
%/PageMode /FullScreen % Open the document in fullscreen mode
%/PageMode /None % Display neither bookmarks nor thumbnails upon opening
/Page 2 % Open document with page 2, not page 1!
%/View [ /XYZ null null null ]
% Go to specified page and retain same ...
% ... horizontal/vertical offset+zoom as current page
/View /Fit % Fit page to window
%/View /FitB % Fit visible part of page to window
%/View [/FitH 220] % Fit page width to window; 220 is distance ...
% ... of page origin from top of window
/DOCVIEW pdfmark
[ {Catalog} <<
/PageLayout /SinglePage
%/PageLayout /OneColumn
%/PageLayout /TwoColumnRight
%/PageLayout /TwoColumnLeft
>> /PUT pdfmark
注意,只看到左方括号 [ 并不是错误,但没有右方括号。 [ 是一个操作符,被final关键字pdfmark封闭。
上面的某些行未使用初始 % 字符进行注释,以向您展示其他替代方案。
请注意,这可能不适用于所有用户或所有查看者。这些设置只是对观众的提示和建议,他们可能尊重也可能不尊重它们。此外,用户可以覆盖查看器的配置,并告诉它始终忽略这些提示,而是按照用户指定的方式打开所有 PDF。
创建上述文件后,将其应用于 PDF:
gs -o output.pdf \
-sDEVICE=pdfwrite \
my-pdf-docview-pdfmark.ps \
-f input.pdf
【解决方案3】:
您可以使用CPDF:
cpdf in.pdf -set-page-layout SinglePage AND -fit-window -o out.pdf