PDF - 删除白边距PDF - 删除白边距(PDF - Remove White Margin

2019-05-13 18:52发布

我想知道怎样从一个PDF文件中删除白色边缘。 就像使用Adobe Acrobat X PRO一样。 我知道它不会与每一个PDF文件的工作。

我猜想,做到这一点的方式,是获取利润的文字,然后裁剪出来,利润率的。

PyPdf是优选的。

iText的发现基于此代码文本边距:

public void addMarginRectangle(String src, String dest)
    throws IOException, DocumentException {
    PdfReader reader = new PdfReader(src);
    PdfReaderContentParser parser = new PdfReaderContentParser(reader);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT));
    TextMarginFinder finder;
    for (int i = 1; i <= reader.getNumberOfPages(); i++) {
        finder = parser.processContent(i, new TextMarginFinder());
        PdfContentByte cb = stamper.getOverContent(i);
        cb.rectangle(finder.getLlx(), finder.getLly(),
            finder.getWidth(), finder.getHeight());
        cb.stroke();
    }
    stamper.close();
}

Answer 1:

我不是太熟悉PyPDF,但我知道的Ghostscript将能为你做这个。 这里是链接到类似的问题其他一些答案:

  1. 每页2个双方将PDF转换为1个侧每页 (SuperUser.com)
  2. 免费软件来分割PDF格式的网页拦腰? (SuperUser.com)
  3. 裁剪使用的Ghostscript 9.01 PDF文件 (StackOverflow.com)

第三个答案可能是什么让你说“ 我明白它不会与每一个PDF文件的工作 ”。 它使用有关pdfmark命令来尝试并设置/CropBox到PDF页面对象。

前两个答案的方法,将最有可能成功,而第三个失败。 此方法使用的的PostScript命令片断<</PageOffset [NNN MMM]>> setpagedevice转移并放置PDF页面上由所限定的(较小的)介质尺寸-gNNNNxMMMM参数(其定义在像素装置的宽度和高度)。

如果你理解了前两个答案背后的概念,你会很容易能够适应那里使用裁剪的PDF页面的所有4个边缘利润的方法:

一个示例命令裁剪信函大小的PDF(8.5x11in == 612x792pt)通过在每个4个边缘(命令是用于Windows)的半英寸(== 36pt):

gswin32c.exe ^
    -o cropped.pdf ^
    -sDEVICE=pdfwrite ^
    -g5400x7200 ^
    -c "<</PageOffset [-36 -36]>> setpagedevice" ^
    -f input.pdf

结果页面大小将是7.5x10in(== 540x720pt)。 做同样在Linux或Mac,使用方法:

gs \
    -o cropped.pdf \
    -sDEVICE=pdfwrite \
    -g5400x7200 \
    -c "<</PageOffset [-36 -36]>> setpagedevice" \
    -f input.pdf

更新:如何确定“利润”使用Ghostscript

注释要求的白色边缘的“自动”的决心。 您可以使用的Ghostscript的过这一点。 其bbox设备可以确定每个页面上包括的(虚拟的)墨水的区域(且因此,间接地对在画布的每个边缘空白)。

下面是一个命令:

gs \
  -q -dBATCH -dNOPAUSE \
  -sDEVICE=bbox \
   input.pdf 

输出(示例):

 %%BoundingBox: 57 29 562 764
 %%HiResBoundingBox: 57.265030 29.347046 560.245045 763.649977
 %%BoundingBox: 57 28 562 667
 %%HiResBoundingBox: 57.265030 28.347046 560.245045 666.295011

bbox设备呈现在内存中的每个页面的PDF(无需编写任何输出到磁盘),然后打印出的BoundingBox和HiResBoundingBox信息到stderr 。 您可以修改此命令一样,使结果更易于解析:

gs \
    -q -dBATCH -dNOPAUSE \
    -sDEVICE=bbox \
     input.pdf \
     2>&1 \  
  | grep -v HiResBoundingBox

输出(示例):

 %%BoundingBox: 57 29 562 764
 %%BoundingBox: 57 28 561 667

这将告诉你...

  • ...即第1页的内容矩形的左下角为坐标[57 29]与右上角是在[562 741]
  • ... 第2页的内容矩形的左下角为坐标[57 28]与右上角是在[561 667]

这意味着:

  • 页面1使用57pt的上左边缘空白( 72pt == 1in == 25,4mm )。
  • 页面1使用29pt对底部边缘的空格。
  • 页2使用57pt的上左边缘空白。
  • 页2使用28PT对底部边缘的空格。

你可以从已经这个简单的例子看,空白是不完全的每一页相同。 根据您的需要(您可能想为多页PDF的每个页面的大小相同,不是吗?),你必须弄清什么是整个文档的所有页面,每个页面边缘的最低按金。

现在关于权利和顶边的空白呢? 要计算的是,你需要知道每个页面的原始页面大小。 最简单的方法来确定这一点: pdfinfo实用。 对于5页PDF示例命令:

pdfinfo \
  -f 1 \
  -l 5 \
   input.pdf \
| grep "Page "

输出(示例):

Page    1 size: 612 x 792 pts (letter)
Page    2 size: 612 x 792 pts (letter)
Page    3 size: 595 x 842 pts (A4)
Page    4 size: 842 x 1191 pts (A3)
Page    5 size: 612 x 792 pts (letter)

这将帮助你确定所需的画布大小和所需的(最大)白色顶部的边缘和每个新的PDF页面的右边缘。

这些计算都可以过剧本,当然。

但是,如果你的PDF文件都是一个uniq的页面大小,或者如果他们1页文档,这一切是很容易得到完成...



Answer 2:

尝试pdfcrop 。 它需要ghostscript的。



文章来源: PDF - Remove White Margins