2011-01-28 166 views
16

我使用Ghostscript库API(从C#打包)从我的应用程序打印PDF文档。
通过'-dFirstPage'和'-dLastPage'参数,我可以选择一系列要打印的页面,但PDF页面的总数量如何?Ghostscript:PDF总页数

当允许用户选择页面间隔从2到10时,让我说,PDF文档只有4页是不是很好。

请考虑我正在通过gsapi_init_with_args API库调用使用Ghostscript库。

+1

PDF必须在其元数据目录中声明其页数。你可以运行s.th.像* gs -q -c“(in.pdf)(r)文件runpdfbegin pdfpagecount = quit”*使Ghostscript对页面进行计数。 – 2011-01-28 10:13:19

+0

@皮皮塔斯你好,谢谢你的帮助;如果我支持,我必须使用“(in.pdf)(r)文件runpdfbegin pdfpagecount = quit”作为GS调用的输入参数吗?如果是,'in.pdf'将是输入文件,但'(r)'是什么?再次感谢。 – lorenzoff 2011-01-28 10:39:34

+0

只需使用'(r)'即可。这是一个Ghostscript内部宏,告诉Ghostscript读/运行'(in.pdf)'文件...是的,唯一的变量是'in.pdf` - 用它的[path +]文件名取代它。 – 2011-01-28 14:23:22

回答

31

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 

那么,它不是一个单一的操作 - 这是在一个单一的命令行只有两个不同的操作。

0

我试图让这个脚本:

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

工作包裹解决方案,并不断收到错误 “/ undefinedfilename”。在这种情况下,请确保您的文件路径具有斜杠“/”作为DirectorySeperator而不是反斜杠“\”。我知道库尔特普菲弗已经写了它,但它发生在我身上,我只是忽略了它。