Ghostscript:裁剪特定区域?
Posted
技术标签:
【中文标题】Ghostscript:裁剪特定区域?【英文标题】:Ghostscript : Crop Certain Area? 【发布时间】:2019-11-29 08:39:15 【问题描述】:我是 ghostscript 的新手。
我有一个包含卡片的 pdf。我想剪掉那张卡片。
目前,在了解文档的情况下,我只能将 pdf 转换为图像,但在裁剪方面没有运气。 看到了所有其他相关的问题,但没有为我工作。
这是我在批处理文件中用于将 pdf 转换为图像的代码:
"C:\Program Files\gs\gs9.50\bin\gswin64c.exe" -sDEVICE=png16m -r300 -o c:\users\jen\desktop\pdf.png -f "c:\users\jen\desktop\pdf.pdf
pause
现在我也不知道如何裁剪它?
我想在某个位置裁剪,例如:Left:28 Top:524 Width:492.3 Height:161
编辑 我将在 firebase 函数中使用它。
示例 PDF 文件THE_PDF_TO_CROP。我想将pdf的蓝色区域剪切为图像。
【问题讨论】:
【参考方案1】:你需要设置几个参数;首先,您需要指定输出位图的宽度和高度。您可以使用 either -dDEVICEHEIGHTPOINTS
和 -dDEVICEWIDTHPOINTS
,或者您可以使用 -g<x>x<y>
指定以像素为单位的输出大小,其中 和 是 x 和 y 方向的像素数。显然,这将取决于分辨率。您不能(显然)使用小数像素。
如果您使用-dDEVICEWIDTHPOINTS
和-dDEVICEHEIGHTPOINTS
,那么您还需要设置-dFIXEDMEDIA
来告诉解释器不要使用PDF 文件中的媒体大小。
所以应该创建一个正确大小的输出位图。如果您尝试仅使用它来渲染文件,您将看到它仅从左下角渲染页面的一部分。所以现在您需要移动内容,以便您想要的部分位于媒体的左下角。您可以使用 PageOffset PostScript 操作符来做到这一点。
您没有给出任何数字,也没有提供示例文件,因此假设(为了示例)您想要渲染文档的 1 英寸乘 2 英寸部分。让我们进一步说,您要渲染的部分从左边缘开始 2.5 英寸,距离底边缘 1.5 英寸。
合适的命令行是:
gs -sDEVICEWIDTHPOINTS=72 -dDEVICEHEIGHTPOINTS=144 -dFIXEDMEDIA -r300 -sDEVICE=png16m -o out.png -c "<</PageOffset [-180 -108]>> setpagedevice" -f input.pdf
请注意,PDF(和 PostScript)单位为 1/72 英寸,因此 72 = 1 英寸,144 = 2 英寸。您需要将页面的原点向下和向左移动,这就是 PageOffset 的值为负数的原因。
如果这对您不起作用,我需要查看您的 PDF 文件,并且您需要告诉我您使用的是哪个版本的 Ghostscript。
【讨论】:
好的,所以这工作-sDEVICEWIDTHPOINTS
应该是 -dDEVICEWIDTHPOINTS
但是在转换为 png/jpeg 后 pdf 中的图像并不好,现在完整的 cmd 是这样的 "C:\Program Files\gs\gs9.50\bin\gswin64c.exe" ^ -dSAFER -dBATCH -dNOPAUSE ^ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 ^ -dDEVICEWIDTHPOINTS=243 -dDEVICEHEIGHTPOINTS=152 ^ -dFIXEDMEDIA -r600 -dDownScaleFactor=2 -sDEVICE=jpeg -o out3.jpeg ^ -c "<</PageOffset [ -315.2 31 ]>> setpagedevice" ^ -sPDFPassword=ADGE8874 ^ -f "c:\users\ane\desktop\EPAN.pdf"
以上是关于Ghostscript:裁剪特定区域?的主要内容,如果未能解决你的问题,请参考以下文章
Ghost4J/Ghostscript - 尝试将字体嵌入 PDF 时出现错误 100