1

我想从 pdf 页面中提取由 xy 坐标给出的区域。提取的区域可以作为页面存储在新的pdf文档中。这需要做几次,所以我希望这个过程被脚本化。是否有任何工具/库可以帮助做到这一点?

4

3 回答 3

2

如果 iText(用于 Java)或 iText(Sharp)(用于 .Net)对您来说是可接受的库,您可以使用它们从某个 PDF 导入现有页面作为模板,其中的部分可以在另一个 PDF 中显示。

查看iText in Action — 第 2 版6 章中的示例TilingHero.java/TilingHero.cs。中心代码是:

PdfImportedPage page = writer.getImportedPage(reader, 1);
// adding the same page 16 times with a different offset
float x, y;
for (int i = 0; i < 16; i++) {
    x = -pagesize.getWidth() * (i % 4);
    y = pagesize.getHeight() * (i / 4 - 3);
    content.addTemplate(page, 4, 0, 0, 4, x, y);
    document.newPage();
}

如您所见,原始页面被导入一次,并且它的不同部分显示在不同的页面上。

(iText and iTextSharp are available either for free --- subject to the AGPL --- or commercially)

于 2013-03-31T23:27:49.250 回答
1

你可以使用 'pdftoppm' 来完成这个任务:

pdftoppm -f <first page> -l <last page> -jpeg -x <start x> -y <start y> -W <width> -H <height> -jpeg <in file> > <out file>

例如,从点 (x,y) = (100,200) 裁剪第一个 PDF 页面的区域,这是裁剪区域的左上角,宽度为 50,高度为 80,并将其保存为 JPEG文件是通过使用完成的:

pdftoppm -f 1 -l 1 -jpeg -x 100 -y 200 -W 50 -H 80 'my.pdf' > 'crop.jpg'

如果您在文档分辨率方面遇到问题,可以使用 'pdftoppm' 的 '-r' 选项(有关更多信息,请参见 'pdftoppm' 的手册页)。

当然,如果需要,您可以轻松地将 JPEG 文件转换为 PDF。

于 2013-03-30T13:21:50.703 回答
1

使用ghostscript,您可以通过以下方式裁剪 pdf:

gs -f original.pdf -o final.pdf -sDEVICE=pdfwrite \
    -c "[/CropBox [x-left y-bottom x-right y-top] /PAGES pdfmark"

x-left, y-bottom, 等等,坐标可以用所需的坐标代替。请注意,对于gs,坐标(0, 0)位于页面的左下角。

这可以很容易地编写脚本。

于 2013-03-31T18:02:40.933 回答