从pdf中提取区域

从pdf中提取区域,pdf,Pdf,我想从pdf页面中提取一个由x-y坐标给出的区域。提取的区域可以作为页面存储在新的pdf文档中。这需要做几次,所以我希望这个过程是脚本化的。是否有任何工具/库可以帮助完成此任务?您可以使用“pdftoppm”完成此任务: pdftoppm -f <first page> -l <last page> -jpeg -x <start x> -y <start y> -W <width> -H <height> -jpeg &l

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

您可以使用“pdftoppm”完成此任务:

pdftoppm -f <first page> -l <last page> -jpeg -x <start x> -y <start y> -W <width> -H <height> -jpeg <in file> > <out file>
如果您在文档解析方面遇到问题,可以使用“pdftoppm”的“-r”选项。有关更多信息,请参阅“pdftoppm”的手册页


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

您可以使用“pdftoppm”完成此任务:

pdftoppm -f <first page> -l <last page> -jpeg -x <start x> -y <start y> -W <width> -H <height> -jpeg <in file> > <out file>
如果您在文档解析方面遇到问题,可以使用“pdftoppm”的“-r”选项。有关更多信息,请参阅“pdftoppm”的手册页

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

使用ghostscript,您可以按以下方式裁剪PDF:

gs -f original.pdf -o final.pdf -sDEVICE=pdfwrite \
    -c "[/CropBox [x-left y-bottom x-right y-top] /PAGES pdfmark"
x-左、y-底等坐标可替换为所需坐标。请注意,对于gs,坐标0,0位于页面的左下角

然后可以很容易地编写脚本。

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

gs -f original.pdf -o final.pdf -sDEVICE=pdfwrite \
    -c "[/CropBox [x-left y-bottom x-right y-top] /PAGES pdfmark"
x-左、y-底等坐标可替换为所需坐标。请注意,对于gs,坐标0,0位于页面的左下角


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

如果您可以使用iText for Java或iTextSharp for.Net库,您可以使用它们从某些PDF导入现有页面,作为模板,其中的部分可以在另一个PDF中显示

看一看的例子/来自。中心代码是:

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和iTextSharp可以根据AGPL免费提供,也可以在商业上提供

如果iText for Java或iTextSharp for.Net是您可以接受的库,您可以使用它们从某些PDF导入现有页面,作为模板,其中的部分可以在另一个PDF中显示

看一看的例子/来自。中心代码是:

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和iTextSharp可以根据AGPL免费提供,也可以在商业上提供

这将光栅化裁剪区域,我不想要。感谢罗兰,这正是我想要的。这将光栅化裁剪区域,我不想要。感谢罗兰,这正是我所期待的,免费提供一些AGPL主题,一些LGPL工具,实际上是Java库。我只知道如何使现有页面成为一个不可见的PDF XObject,其中一些由坐标和大小给定的部分可以显示在新的PDF页面上。然而,这意味着整个原始页面都存在于生成的PDF中,即使不可见,也可以通过PDF文件访问。这样的方法对你有用吗?当然,我认为你应该发布你的答案。我的答案可能也会保留所有的内容。由于AGPL可以免费使用一些主题,而LGPL工具实际上是Java库,我只知道如何将现有页面变成一个不可见的PDF XObject,其中一些由坐标和大小给定的部分可以显示在新的PDF页面上。然而,这意味着整个原始页面都存在于生成的PDF中,即使不可见,也可以通过PDF文件访问。这样的方法对你有用吗?当然,我认为你应该发布你的答案。我的答案可能也会保留所有内容。谢谢,这是一个不错的解决方案+感谢您指出这个库。谢谢,这是一个不错的解决方案+1用于指出此库。