使用Ghostscript从PDF裁剪页脚

时间:2014-06-03 18:26:05

标签: c# ghostscript

我正在尝试使用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();
    }
}

2 个答案:

答案 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文件之后将其添加到命令行。