我目前正在使用Ghostscript 9.09在C#中生成图像,我的问题是,如何只将图像转换为非连续范围内的页面? 例如,我的输入是30页的.pdf文档,我需要获得第1,4,10和21页。
到目前为止,我所做的是使用 -dFirstPage -dLastPage 参数,我可以得到范围,例如从第1页到第21页,但这不是最佳的,因为我得到许多我根本不需要的页面,这是我当前的功能:
private void GetPagesAsJpg(string inputFile, string outputFolder, List<int> pagesToConvert)
{
string ghostScriptPath = @"C:\Program Files (x86)\gs\gs9.09\bin\gswin32.exe";
String ars = "-dNOPAUSE -dFirstPage=" + pagesToConvert[0] + " -dLastPage=" + pagesToConvert[pagesToConvert.Count - 1] + " -sDEVICE=jpeg -r102.4 -o" + outputFolder + "%d.jpg -sPAPERSIZE=a4 " + inputFile;
Process proc = new Process();
proc.StartInfo.FileName = ghostScriptPath;
proc.StartInfo.Arguments = ars;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.Start();
proc.WaitForExit();
}
我怎样才能获得所需的页面?
非常感谢提前。
答案 0 :(得分:1)
您最好的选择是升级到当前最前沿的Ghostscript代码,或直到下一个版本。此功能现在显示在源代码中,请参阅this commit
对于早期版本的Ghostscript,您可以编写自定义EndPage处理程序,并在开始处理输入之前通过setpagedevice安装它。必须为EndPage提供您想要处理的页码,并拒绝那些不匹配的页码。除非您是一名称职的PostScript程序员,否则您可能会发现这一挑战。此外,由于所有渲染操作仍在进行,因此不会给您带来任何性能提升,唯一的区别是渲染的位图不会写入文件。
除此之外,仅对于PDF输入,您可以从上面提到的提交中的pdf_main.ps中提取代码,并将其应用于早期版本的源代码。源版本越旧,它就越不可能在没有进一步修改的情况下工作,并且您使用的版本现在基本上已经使用了三年。那段时间有很多变化,我认为你必须修改提交中的补丁。再说一次,除非你很了解PostScript,否则你可能会发现这是一个挑战。
唯一不涉及从源代码重建Ghostscript的解决方案是使用自定义EndPage过程,所以如果是我,我将从我们的Git存储库中提取最新代码并使用它。
答案 1 :(得分:0)
我用这种方式解决了我的问题,我有一个列表,其中包含我需要的页码,因此每个页码都调用一次Ghostscript,将每个页面的第一页和最后一页值分配给我想要的页面,我的函数看起来像这样:
private void GetPagesAsJpg(string inputFile, string outputFolder, List<int> pagesToConvert)
{
foreach (int pag in pagesToConvert)
{
string ghostScriptPath = @"C:\Program Files (x86)\gs\gs9.09\bin\gswin32.exe";
String ars = "-dNOPAUSE -dFirstPage=" + pag + " -dLastPage=" + pag + " -sDEVICE=jpeg -r110 -o" + outputFolder + "%d" + pag + ".jpg -sPAPERSIZE=a4 " + inputFile;
Process proc = new Process();
proc.StartInfo.FileName = ghostScriptPath;
proc.StartInfo.Arguments = ars;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.Start();
proc.WaitForExit();
}
}
在我的情况下,我输入.pdf目录,每个30到60页,每个只需要1到5页,所以在性能方面,这也是我找到的最好的方式,只有我得到的页面希望,希望这可以帮助将来的某个人。