我正在使用 Ghostscript 库 API(从 C# 封装)从我的应用程序打印 PDF 文档。
使用“-dFirstPage”和“-dLastPage”参数,我可以选择要打印的页面范围,但是 PDF 页面的总数又如何呢?
当 PDF 文档只有 4 页时,允许用户选择 2 到 10 之间的页面间隔并不是很好。
假设我通过 gsapi_init_with_args API 库调用使用 Ghostscript 库。
Ghostscript 可以在
stdout
上计算并显示 PDF 的页数。命令行是
gswin32c ^
-q ^
-dNODISPLAY ^
-c "(input.pdf) (r) file runpdfbegin pdfpagecount = quit"
这里所有的
-c "..."
内容都是PostScript命令行片段(使用一些GS内部命令扩展)。 input.pdf 是 PDF 文件名(也可以是完整路径,如 (c:/path/to/my.pdf)
)。
但是,对于这种类型的工作来说,更好更快的工具是使用
pdfinfo
(XPDF实用程序的一部分,也可在Windows上使用)。
更新:
@ebyrob 想知道是否可以修改我的示例命令行,以便它也可以在单个操作中显示 PDF。试试这个:
gswin32c ^
-q ^
-c "(input.pdf) (r) file runpdfbegin pdfpagecount =" ^
-f input.pdf
嗯,这不是一个单一的操作——它只是一个命令行中的两个不同的操作。
对于在 Ghostscript >9.50 中遇到问题的人添加 --permit-file-read=input.pdf
我尝试制作这个脚本:
gswin32c ^
-q ^
-c "(input.pdf) (r) file runpdfbegin pdfpagecount =" ^
-f input.pdf
在 c#wrapped 解决方案中工作并不断收到错误“/undefinedfilename”。在这种情况下,请确保您的文件路径将斜杠“/”作为 DirectorySeperator,而不是反斜杠“\”。我知道 Kurt Pfeifle 已经写了它,但这发生在我身上,我只是忽略了它。
“gs exec 的路径”-q -dNODISPLAY -dNOSAFER --permit-file-read="路径 你的文件" -c "(""文件路径"") (r) file runpdfbegin pdfpagecount = 退出”
命令:
"C:\Temp\Some Folder\gs\bin\gswin64c.exe" -q -dNODISPLAY -dNOSAFER --permit-file-read="C:\Temp\Some Folder\myFile.pdf" -c "(""C:\\Temp\\Some Folder\\myFile.pdf"") (r) file runpdfbegin pdfpagecount = quit"
"C:\Temp\Some Folder\gs\bin\gswin64c.exe" -q -dNODISPLAY -dNOSAFER --permit-file-read="C:\Temp\Some Folder\myFile.pdf" -c "(""C:/Temp/Some Folder/myFile.pdf"") (r) file runpdfbegin pdfpagecount = quit"
总结一下上面的一些单独注释,供 Windows 用户避免需要在 / 和 \ 之间更改,显示总页数可以设置为拖放或“sendTo”的快捷方式,首先切换到工作目录。
@echo off & cd /d "%~dp1" & "C:\path to gs\bin\gs.exe" -q --permit-file-read="%~nx1" -c "(%~nx1) (r) file runpdfbegin pdfpagecount = quit" & pause
其中 gs.exe 是 Windows c(onsole) 变体 gswin32c.exe 或 gswin64c.exe 之一
注意仅在您信任的文件上使用作为您的首要 GS -dSAFER 限制。
对于那些因为这个不起作用而抓狂的人(就像我一样),命令行上实际上需要一个插入符号(^)字符,而无换行符是:
gswin32c -q -dNODISPLAY ^ -c "(input.pdf) (r) file runpdfbegin pdfpagecount = quit"