GhostScript 菜鸟帮助 - 将多页 PDF 文件分解为多个单页 PS 或 EPS 文件

god*_*a_g 3 pdf ghostscript ps

我正在尝试使用 ghostscript 执行以下操作:

将一个多页 PDF 文件(约 3,000 页,200mb 文件)转换为:

PDF 的每页一个文件,并将每个(页面/文件)转换为 EPS 或 PS(后脚本(最好))。

例子:

hello.pdf (10 pages)
Run Code Online (Sandbox Code Playgroud)

会产生:

hello1.ps (page 1 out of 10)
hello2.ps
hello3.ps
...
hello10.ps
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我已经尝试了4天,无法弄清楚。

我有一个我试过的脚本(不起作用):

Note: Windows(7) user here.

gs -sDEVICE=epswrite -o documentname-%.eps documentname.pdf
Run Code Online (Sandbox Code Playgroud)

我也不知道如何导航到我的文件所在的目录(也无法弄清楚)。如果可以,请告诉我怎么做。

非常感谢你。

fra*_*ous 5

首先,我使用 Linux,而不是 Windows,所以我无法对此进行测试,但我认为这样的事情是正确的。(我几乎很想告诉你为此在虚拟机中安装 Linux,因为对于成熟的操作系统来说,这样的事情要容易得多,但无论如何,这是我使用 Windows 的最佳选择。)

首先,打开命令/Dos 提示符。

要导航到文件所在的文件夹,请使用 CD 命令,后跟用引号引起来的文件的完整路径。例如,如果它们在“C:\Users\Somebody\Documents and Settings\My Documents\PDFs\”中,则键入:

cd "C:\Users\Somebody\Documents and Settings\My Documents\PDFs\"

我认为另一种方法是简单地在与 PDF 相同的目录中创建一个批处理文件,然后从那里运行批处理文件。

好的,现在我认为您必须使用 Ghostscript 可执行文件的完整路径,您必须自己找到它。我将假设它是“C:\Program Files (x86)\gs\gs9.00\bin\gswin32c.exe”,但您需要在自己的计算机上仔细检查。如果您使用的是不同版本的 ghostscript 或 32 位版本的 Windows 7,它将位于其他地方。还要确保您使用 gswin32c.exe 而不是 gswin32.exe,这是不同的。

现在找出这个 PDF 中有多少页。我会知道如何在 Linux 中使用命令来做到这一点,但我在 Windows 中一无所知。我假设它是3002。

现在在命令提示符下输入此命令(全部为一行):

FOR \L %G IN (1,1,3002) DO "C:\Program Files (x86)\gs\gs9.00\bin\gswin32c.exe" -dBATCH -dSAFER -dNOPAUSE -dFirstPage=%G -dLastPage=%G -sDEVICE=pswrite -o hello%G.ps hello.pdf

这是我最好的猜测。但希望真正使用 Windows 的人可以确认这是有效的。

对于epsfiles而不是改变-sDEVICE#pswrite,以-sDEVICE=epswrite和变化hello%G.pshello%G.eps

如果您使用的是批处理文件,请在任何地方使用 %%G 而不是 %G,将 ='s 更改为 #'s。

如果将“hello.pdf”更改为带有空格的内容,请使用引号“hello world.pdf”。与“hello%G.ps”相同。


在 GNU/Linux(或 Mac OS X)上,相应的命令是:

for G in {1..3002} ; do gs -dSAFER -dBATCH -dNOPAUSE -dFirstPage=$G -dLastPage=$G -sDEVICE=pswrite -o "hello$G.ps" "hello.pdf" ; done

要让它自动计算要执行的页数,如果您安装了 seq 和 poppler 实用程序(我相信这是在 Ubuntu 上默认提供的),您可以使用:

for G in $(seq 1 $(pdfinfo academicregs.pdf | sed -n 's/Pages:[^0-9]*\([0-9]*\).*/\1/p')) ; do gs -dSAFER -dBATCH -dNOPAUSE -dFirstPage=$G -dLastPage=$G -sDEVICE=pswrite -o "hello$G.ps" "hello.pdf" ; done

那些我测试过的,他们工作。


Kur*_*fle 5

frabjous 的命令有效,但使事情变得比像这样的简单任务所需的更复杂。

他为 PDF 的每一页运行一个单独的 Ghostscript 命令,通过-dFirstPage=... -dLastPage=...参数只选择想要的 PDF 页面。(他的 Windows 版本也有一点错别字:应该是for /L %G in...-- 而不是for \L %G in...

这也是不必要的慢,因为它为 3002 页的 PDF 运行 3002 个命令。

您可以在单个 Ghostscript 命令传递中实现相同的目标,而无需 3002 次循环。在 Windows 上:

 gswin32c.exe ^
   -o hello%04d.eps ^
   -sDEVICE=epswrite ^
    hello.pdf
Run Code Online (Sandbox Code Playgroud)

在 Linux 或 Mac OS X 上:

 gs \
   -o hello%04d.eps \
   -sDEVICE=epswrite \
    hello.pdf
Run Code Online (Sandbox Code Playgroud)

%04d输出名称中的部分将为输出 EPS 文件创建 4 位(页面)编号,用前导零填充未使用的数字(这不是您想要的输出示例使用的)。