如何获取包含Y的页面X的输出文件名

时间:2014-10-21 10:05:27

标签: ghostscript

我正在使用ghostscript将多页pdf转换为png。我需要将png文件的输出文件名设为pageXofY.png,其中X是页码,Y是pdf中的总页数。

我知道我可以使用page%d.png获取当前页码。

有人可以帮忙吗?我有多个pdf的数量,因此手动重命名png文件不是一个选项。

谢谢。

1 个答案:

答案 0 :(得分:0)

您无法在标准Ghostscript中执行此操作。主要原因是设备无法知道输入中的页数。虽然可以确定单个输入PDF文件,但如果您有2个输入文件,那么您如何知道(在处理文件1时)所有文件中的总页数是多少?

一旦确定了页数,您就可以使用PDF解释器重置设备的OutputFile。

在/ghostpdl/gs/Resource/Init/pdf_main.ps中查找过程/ runpdfpagerange,例程终止:

       QUIET not { 
         (Processing pages ) print 1 index =only ( through ) print dup =only
         (.) = flush
       } if
     } ifelse
   } ifelse
} bind def

立即在"}绑定def"你可以尝试添加类似的东西:

10 LastPage cvs              %% (LastPage)
dup length 15 add string     %% (LastPage) string
dup (Page %d of ) exch copy  %% (LastPage) (Page %d of ) (Page %d of)
dup 12 3 index               %% (LastPage) (Page %d of ) (Page %d of) 12 (LastPage)
putinterval                  %% (LastPage) (Page %d of LastPage)
dup 3 1 roll                 %% (Page %d of LastPage) (Page %d of LastPage) (LastPage)
length 12 add                %% (Page %d of LastPage) (Page %d of LastPage) n
(.png) putinterval           %% (Page %d of LastPage.png)
<< /OutputFile 3 1 roll>> setpagedevice

哪些可能有效,我还没试过。

或者,使用Ghostscript的pdf_info.ps确定输入PDF文件中的页数,然后再次从pdf_info.ps返回的信息中调用Ghostscript创建OutputFile(例如-sOutputFile =&# 34; Page%d of 100.png&#34;)

<强>更新

pdf_info.ps作为Ghostscript源的一部分进行分发,它不在预先打包的Windows安装程序中,因此您需要获取源代码分发的副本(www.ghostscript.com,只需下载源而不是Windows安装程序)。

该文件可以在ghostpdl / gs / toolbin中找到,如果用文本编辑器打开它,你会在评论中看到顶部附近的用法。这是输出的一个例子:

D:\tests>\ghostpdl\gs\debugbin\gswin32c -dNODISPLAY -sFile=01_001.pdf /ghostpdl/
gs/toolbin/pdf_info.ps
GPL Ghostscript GIT PRERELEASE 9.16 (2014-09-22)
Copyright (C) 2014 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.

        01_001.pdf has 9 pages

Title: 571l_p
Author: mwang
Subject: 571l_p
Keywords:
Creator: Adobe PageMaker 6.52
Producer: Acrobat Distiller 4.05 for Windows
CreationDate: D:20001113140954
ModDate: D:20010305115330-08'00'

Page 1 MediaBox: [0 0 612 792] CropBox: [0 0 612 792]    Rotate = 0
Page 2 MediaBox: [0 0 612 792] CropBox: [0 0 612 792]    Rotate = 0
Page 3 MediaBox: [0 0 612 792] CropBox: [0 0 612 792]    Rotate = 0
Page 4 MediaBox: [0 0 612 792] CropBox: [0 0 612 792]    Rotate = 0
Page 5 MediaBox: [0 0 612 792] CropBox: [0 0 612 792]    Rotate = 0
Page 6 MediaBox: [0 0 612 792] CropBox: [0 0 612 792]    Rotate = 0
Page 7 MediaBox: [0 0 612 792] CropBox: [0 0 612 792]    Rotate = 0
Page 8 MediaBox: [0 0 612 792] CropBox: [0 0 612 792]    Rotate = 0
Page 9 MediaBox: [0 0 612 792] CropBox: [0 0 612 792]    Rotate = 0

Fonts Needed that are not embedded (system fonts required):
    Arial
    Arial,Bold

D:\tests>

因此,您需要将其输出到文件并进行扫描,或者通过grep或类似的东西管道输出以查找页数。