使用Ghostscript 9.15将PDF转换为PCL

使用Ghostscript 9.15将PDF转换为PCL,pdf,ghostscript,printer-control-language,Pdf,Ghostscript,Printer Control Language,要求是将PDF转换为嵌入宏的PCL(目前正在Windows上进行测试,但我需要在应用程序中使用此运行时并从UNIX打印)。该宏稍后将在另一个文档中用于嵌入此裁剪图像并打印在一个页面上。我将使用PCL转义码调用宏数,然后图像将被打印。(你可以认为这是一个标志性的图像。) 通过使用CropBox,我可以将带空格的PDF转换为不带任何空格的PDF "c:\progra~1\gs\gs9.15\bin\gswin64.exe" -o _sourcePDFcropped.pdf \ -sDEVIC

要求是将PDF转换为嵌入宏的PCL(目前正在Windows上进行测试,但我需要在应用程序中使用此运行时并从UNIX打印)。该宏稍后将在另一个文档中用于嵌入此裁剪图像并打印在一个页面上。我将使用PCL转义码调用宏数,然后图像将被打印。(你可以认为这是一个标志性的图像。)

通过使用CropBox,我可以将带空格的PDF转换为不带任何空格的PDF

"c:\progra~1\gs\gs9.15\bin\gswin64.exe" -o _sourcePDFcropped.pdf \
    -sDEVICE=pdfwrite -c "[/CropBox [1 140 320 650] /PAGES pdfmark" \
    -f _sourcePDF.pdf
但是,当我将这个
\u sourcePDFcropped.pdf
转换为PCL时,仍然添加了空格

"c:\progra~1\gs\gs9.15\bin\gswin64c.exe" -dBATCH -dNOPAUSE \
   -sDEVICE=pxlcolor -g100x200 -sOutputFile=_sourceFedGroundCroppedTest.pcl \
   -f _sourceFedGroundCropped.pdf
我试过使用它,但效果很好。因为它没有太多的支持,所以我尝试使用Ghostscript

MKPCL.EXE -c4 -t -m 100 -p Image.jpg Image.MAC
我还尝试了ImageMagick,它在内部使用Ghostscript。所以我猜,如果我在GS中使用正确的开关,我应该能够实现我的目标

输入PDF文件:

注:我见过其他关于Stackoverflow的PDF-to-PCL查询,其他更多的是直接的PDF-to-PCL查询。我的任务是裁剪PDF,输出应该是PCL


问题继续:

添加CropBox实际上没有什么作用,它使PDF完全相同,但为页面添加了CropBox条目。GS通常使用MediaBox,而不是CropBox,因此将CropBox添加到PDF中没有任何效果


您可以尝试添加
-dUseCropBox
。如果您认为正在添加的空白实际上存在于原始PDF中,但被CropBox掩盖,则使用
-dUseCropBox
将让GS在呈现PDF时使用CropBox。

添加CropBox实际上没有什么作用,它会使PDF完全相同,但会为页面添加CropBox条目。GS通常使用MediaBox,而不是CropBox,因此将CropBox添加到PDF中没有任何效果


您可以尝试添加
-dUseCropBox
。如果您认为正在添加的空白实际上存在于原始PDF中,但被CropBox屏蔽,则使用
-dUseCropBox
将让GS在呈现PDF时使用CropBox。

我使用自编译的Ghostscript v9.16使用以下命令行处理示例输入PDF(未发布,来自当前GhostPDL GIT来源):

(正如您可能已经注意到的,我正在通过一个管道连接两个不同的Ghostscript命令,以避免将临时PDF文件写入磁盘。)

如果要在Windows上执行相同操作,则
cmd.exe
/DOS框中的命令行将是:

gswin64c.exe -o -                                ^
   -sDEVICE=pdfwrite                             ^
   -c "[/CropBox [1 140 320 650] /PAGES pdfmark" ^
   -f source.pdf                                 ^
                                                 ^
| gswin64c.exe -o tst.pcl                        ^
    -sDEVICE=pxlcolor                            ^
    -dUseCropBox                                 ^
    -f -
然后我用自编的PCL查看器(也来自GhostPDL源)打开了它,
pcl6

pcl6 tst.pcl
这是显示
pcl6
窗口的屏幕截图:


正如KenS还指出的:在处理裁剪的PDF中间数据时,使用
-dUseCropBox
非常重要。

我使用自编译的Ghostscript v9.16(未发布,来自当前GhostPDL GIT源),使用以下命令行处理示例输入PDF:

(正如您可能已经注意到的,我正在通过一个管道连接两个不同的Ghostscript命令,以避免将临时PDF文件写入磁盘。)

如果要在Windows上执行相同操作,则
cmd.exe
/DOS框中的命令行将是:

gswin64c.exe -o -                                ^
   -sDEVICE=pdfwrite                             ^
   -c "[/CropBox [1 140 320 650] /PAGES pdfmark" ^
   -f source.pdf                                 ^
                                                 ^
| gswin64c.exe -o tst.pcl                        ^
    -sDEVICE=pxlcolor                            ^
    -dUseCropBox                                 ^
    -f -
然后我用自编的PCL查看器(也来自GhostPDL源)打开了它,
pcl6

pcl6 tst.pcl
这是显示
pcl6
窗口的屏幕截图:


正如KenS还指出的:在处理裁剪的PDF中间数据时,使用
-dUseCropBox
非常重要!

如果这不可能,请告诉我我们是否可以拥有PCL输出的透明背景(而不是白色背景)。如果您不提供(指向a的链接),谢谢示例输入PDF,您获得有用答案的机会较低…只有输入PDF允许分析CropBox是否确实掩盖了PDF页面周围的空白…我添加了原始输入PDF(),我认为我没有得到完整答案:)(问题中发布了w.r.t to macro)你的问题听起来好像你很清楚如何处理它的宏观方面,主要问题是白边…如果这不可能,请告诉我我们是否可以有一个透明的PCL输出背景(而不是白色背景)。谢谢如果你不提供一个(链接到一个)示例输入PDF,你得到一个有用答案的机会就会降低。。。只有输入PDF允许分析CropBox是否真的屏蔽了PDF页面周围的空白…我添加了原始输入PDF(),我想我还没有得到完整的答案:)(问题中发布了宏的w.r.t)你的问题听起来好像你非常清楚如何处理它的宏方面,主要的问题是空白…你不能避免将一个临时文件写入磁盘,pdfwrite总是写入多个临时文件。您所做的只是阻止编写中间PDF文件。我强烈建议不要将pdfwrite的输出管道化到任何地方,这不是一种受支持的用法,如果将PDF文件线性化,它肯定不会起作用。我没有创建线性化PDF,我的意思是避免显式存储和读取中间PDF文件。我理解你的想法我担心的是,这不是pdfwrite的设计目标,在某个时候,我可能会改变行为,使其根本无法工作,然后人们会抱怨,如果他们使用的管道停止工作……您并不是在避免将临时文件写入磁盘,pdfwrite总是写入多个临时文件。您所做的只是阻止编写中间PDF文件。我强烈建议不要将pdfwrite的输出管道化到任何地方,这不是一种受支持的用法,如果将PDF文件线性化,它肯定不会起作用。我没有创建线性化PDF,我的意思是避免显式存储和读取中间PDF文件。不过我理解你的想法;