Ghostscript:PDF 总页数

问题描述 投票:0回答:6

我正在使用 Ghostscript 库 API(从 C# 封装)从我的应用程序打印 PDF 文档。
使用“-dFirstPage”和“-dLastPage”参数,我可以选择要打印的页面范围,但是 PDF 页面的总数又如何呢?

当 PDF 文档只有 4 页时,允许用户选择 2 到 10 之间的页面间隔并不是很好。

假设我通过 gsapi_init_with_args API 库调用使用 Ghostscript 库。

api pdf ghostscript
6个回答
40
投票

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

嗯,这不是一个单一的操作——它只是一个命令行中的两个不同的操作。


4
投票

对于在 Ghostscript >9.50 中遇到问题的人添加 --permit-file-read=input.pdf


2
投票

我尝试制作这个脚本:

gswin32c ^
  -q ^
  -c "(input.pdf) (r) file runpdfbegin pdfpagecount =" ^
  -f input.pdf

c#wrapped 解决方案中工作并不断收到错误“/undefinedfilename”。在这种情况下,请确保您的文件路径将斜杠“/”作为 DirectorySeperator,而不是反斜杠“\”。我知道 Kurt Pfeifle 已经写了它,但这发生在我身上,我只是忽略了它。


1
投票

在 Windows 系统中:

“gs exec 的路径”-q -dNODISPLAY -dNOSAFER --permit-file-read="路径 你的文件" -c "(""文件路径"") (r) file runpdfbegin pdfpagecount = 退出”

备注:

  • 只需用您的路径更改“到...的路径”的位置,其余部分保持原样。
  • 在 -c 路径上,您必须使用双斜杠或类似 UNIX 的斜杠。例如:C:\youfile.pdf(好)、C:/youfile.pdf(好)、C:\yourfile.pdf(坏)。

示例:

  • 路径:C:\Temp\Some文件夹\myFile.pdf
  • gs路径:C:\Temp\Some文件夹\gs in\gswin64c.exe
  • 路径-c 1:C:\ Temp \某些文件夹\ myFile.pdf
  • 路径-c 2:C:/Temp/某些文件夹/myFile.pdf

命令:

"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"

0
投票

总结一下上面的一些单独注释,供 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 之一

  • cd /c "%~dp1" 会将控制台切换到引用的文件驱动器路径
  • “GSwin..c.exe”的完整引用路径可以安全地远程调用它
  • -q 将抑制(不显示)开始消息
  • 自版本 9.5+ 起,建议/必需使用 --permit-file-read="file name"
  • -c "(%~nx1) 不需要 name.xtension 的引号
  • 如果运行cmd作为快捷方式,需要暂停才能看到结果

注意仅在您信任的文件上使用作为您的首要 GS -dSAFER 限制。


0
投票

对于那些因为这个不起作用而抓狂的人(就像我一样),命令行上实际上需要一个插入符号(^)字符,而换行符是:

gswin32c -q -dNODISPLAY ^ -c "(input.pdf) (r) file runpdfbegin pdfpagecount = quit"
    
© www.soinside.com 2019 - 2024. All rights reserved.