【问题标题】:How can I shift page images in PDF files more to the left or to the right?如何将 PDF 文件中的页面图像向左或向右移动更多?
【发布时间】:2011-03-27 17:43:00
【问题描述】:

我们有一堆扫描的页面(大约 600 个),每个 PDF 查看器都会在这些页面上显示右边缘零边距但左边约 2 英寸边距的图像。 (大概是在扫描时,使用了错误的设置……)

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

【问题讨论】:

  • 这不是一个编程问题,如果转移到 SuperUser 会受益。
  • @Robino 对不起,postscript 不是编程语言吗?
  • @ebyrob 目标是以特定方式更改 PDF。这与编程无关,即使有使用编程语言的解决方案。
  • @Robino 按照这个逻辑,在月球上行走与轨道力学无关。 PS - PDF(尽管经过压缩和混淆)基本上也是一种编程语言。当然,我们不希望用户比程序员更了解 *.doc 格式。

标签: pdf ghostscript


【解决方案1】:

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

您需要为您的源文件定义一个 PdfReader,并为您的目标文件定义一个 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();

【讨论】:

    【解决方案2】:

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

    1. PostScript 有一个 setpagedevice 运算符,它采用 PageOffset 参数;
    2. 如果您在命令行中使用 -c ... 传递 PostScript 代码的 sn-ps,Ghostscript 将处理它们;
    3. Ghostscript 可以评估和应用(某些)PostScript 代码,即使是直接 PDF=>PDF 转换。

    现在试试这个命令行将所有页面图像向左移动 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我为了不丢失扫描的任何图片质量而放入...)

    【讨论】:

    • 我现在遇到了一个新问题。它是关于字体提取的。我会问一个单独的问题。
    • @Community: NO -- Ghostscript not 需要反斜杠而不是正斜杠。您可以将它们保持原样,并且它会以相同的方式工作。 (虽然更改为反斜杠并没有什么坏处...但是,对于某些版本,您可能需要更改为 double 反斜杠...)并且 NO,您不需要不需要将连字符 (-) 更改为正斜杠 (/) - 这甚至会造成伤害!我会恢复你的修改,对不起!
    • 我在启动此命令时收到错误**** Unable to open the initial device, quitting.。有什么想法吗?
    • @Stéphane:您的-o ... 参数是否指向您没有写入权限的输出目录?
    • 嗯,不,那是 /tmp 指向...无论如何我结束了使用转换命令,这并不完美。我修改了我原来的 odt 文档以添加边距。谢谢
    猜你喜欢
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2020-07-10
    • 1970-01-01
    相关资源
    最近更新 更多