我正在尝试使用Ghostscript和C#裁剪PDF的底部英寸。
当我运行我的代码时,它成功创建了新的PDF,但它完全是空白的。我对gsArgsList.Add(" -c \"[/CropBox [0 72 0 0] /PAGES pdfmark\"");
的理解是,它将从页面底部裁剪72pt(1英寸)。我已经包含了一些代码,希望有人会看到明显的东西。
我玩了CropBox的4个数字参数,但无论我通过什么,它总是会产生一个空白的PDF。我只想删除页脚。
更新 - 我的代码现在显示了正常工作的解决方案。
/// <summary>
/// Crop the bottom inch from the temporary PDF file using GhostScript.
/// A new PDF file (test_cropped.pdf) will be created with the modifications.
/// </summary>
/// <param name="tempPDF">the path to the temporary PDF</param>
/// <param name="croppedPDF">the path to the modified PDF</param>
public static void cropPDFFooter(string inputPDF, string outputPDF, string pdfPostScript)
{
try
{
string gsPath = @"C:\gs\gs9.14\bin\gswin64c.exe";
List<string> gsArgsList = new List<string>();
gsArgsList.Add(" -o " + outputFile);
gsArgsList.Add(" -sDEVICE=pdfwrite");
gsArgsList.Add(" -o " + outputFile + " -c \"mark /.HWMargins [ 0.0 288.0 0.0 0.0 ] .dicttomark setpagedevice\" -f " + inputFile + "");
var gsArgs = String.Join(null, gsArgsList);
System.Diagnostics.Process.Start(gsPath, gsArgs);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
Console.ReadLine();
}
}
答案 0 :(得分:3)
Ghostscript也支持.HWMargins [lx by rx uy],这是一个四个实数的数组,是点数(1/72英寸)的边距。如果我这样做:
gs -sDEVICE=pdfwrite -o x.pdf \
-c "mark /.HWMargins [ 144.0 288.0 0.0 0.0 ] .dicttomark setpagedevice" \
-f examples/annots.pdf
然后输出左边两英寸被裁剪,底部四英寸被裁剪。
请注意,这可以在-dPDFFitPage -dFIXEDMEDIA
之前与-c
一起使用,并且该页面适合(包括页脚在内的所有信息)到边距较大的页面。
无法通过Ghostscript(AFAIK)在一次传递中将页面缩小到较小的尺寸并裁剪其中的一部分。
答案 1 :(得分:1)
pdfwrite设备只维护输入PDF文件的大部分内容。您的CropBox pdfmark将简单地被输入PDF文件中的CropBox覆盖(如果PostScript文件中没有其他CropBox pdfmarks,它将适用于PostScript输入。)
如果您想要更改页面大小和内容,可以尝试将包含CropBox的PostScript放入文件中,并在命令行上输入输入PDF文件后将该文件添加为输入文件。
或者您可以使用-sPAPERSIZE或-g开关设置所需的页面大小,并设置-dFIXEDMEDIA开关但请注意,在PostScript中,原点(0,0)位于左下方,因此您还必须翻译起源。这可能比您想要进入的更困难,因此我建议您尝试将pdfmark放入单独的文件中,并在要修改的输入PDF文件之后将其添加到命令行。