如何将PDF文件中的页面图像更多地向左或向右移动?

时间:2010-08-10 09:51:15

标签: pdf ghostscript

我们有一堆扫描页面(大约600页),每个PDF查看器在右边缘显示零边距的图像,但左边约2英寸边距。 (据推测,在扫描时,使用了错误的设置......)

我们想要打印这些页面,最好是作为小册子。有没有办法永久性地将所有页面图像移向中心,并让PDF以更令人愉悦的方式显示这些页面? Ghostscript能做到吗?可以用其他方法做到这一点,比如在一些PDF处理库的帮助下编程吗?

2 个答案:

答案 0 :(得分:9)

如果您不想编写自己的程序代码(如Nikolaus建议的那样),但是使用Ghostscript命令行,则需要知道3件事:

  1. PostScript有一个setpagedevice运算符,它带有PageOffset参数;
  2. 如果您在命令行上使用-c ...传递,则Ghostscript将处理PostScript代码的片段;
  3. 即使是直接 PDF => PDF 转换,Ghostscript也可以评估并应用(某些) PostScript 代码。
  4. 现在尝试使用此命令行将所有页面图像向左移动1英寸(== 72pt):

    gswin32c.exe ^
      -sDEVICE=pdfwrite ^
      -o c:/path/to/output/pdf-shifted-by-1-inch-to-left.pdf ^
      -dPDFSETTINGS=/prepress ^
      -c "<</PageOffset [-72 0]>> setpagedevice" ^
      -f c:/path/to/input/pdf-original.pdf
    

    (我放入的-dPDFSETTINGS=/prepress是为了不丢失扫描的任何图片质量......)

答案 1 :(得分:1)

您可以使用iText移动,缩放或裁剪pdf页面

您需要为源文件定义PdfReader,并为目标文件定义Document 然后你迭代页面如果Reader,在Document中创建一个新页面 并将sourcePage作为模板添加到新页面(在任何地方移动,缩放等)

    PdfReader reader = new PdfReader( input );
    int n = reader.getNumberOfPages();

    Rectangle psize = reader.getPageSize(1);
    float width = psize.getHeight();
    float height = psize.getWidth();

    Document document = new Document(new Rectangle(height, width));
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream( output ));

    document.open();

    PdfContentByte cb = writer.getDirectContent();

    int i = 0;
    while (i < n) {
        i++;
        document.newPage();
        PdfImportedPage page = writer.getImportedPage(reader, i);
        cb.addTemplate(page, factor, 0, 0, factor, left, down);
    }

    document.close();