在 PDFBox 中的特定点拆分
Splitting at a specific point in PDFBox
我想通过连接某些单独的页面来拆分以生成一个新的 pdf,但最后一页必须在某个点拆分(即,所有超过限制的内容都被包括在内,低于所有内容被排除在外 -我只关心那些左上角在一条线上的)。可以使用 PDFbox 吗?
完成任务的一种方法,即在特定点 拆分 页面 (即包含所有超出限制的内容,低于限制的所有内容被排除在外) 将在前面加上剪辑路径。
你可以使用这个方法:
void clipPage(PDDocument document, PDPage page, BoundingBox clipBox) throws IOException
{
PDPageContentStream pageContentStream = new PDPageContentStream(document, page, true, false);
pageContentStream.addRect(clipBox.getLowerLeftX(), clipBox.getLowerLeftY(), clipBox.getWidth(), clipBox.getHeight());
pageContentStream.clipPath(PathIterator.WIND_NON_ZERO);
pageContentStream.close();
COSArray newContents = new COSArray();
COSStreamArray contents = (COSStreamArray) page.getContents().getStream();
newContents.add(contents.get(contents.getStreamCount()-1));
for (int i = 0; i < contents.getStreamCount()-1; i++)
{
newContents.add(contents.get(i));
}
page.setContents(new PDStream(new COSStreamArray(newContents)));
}
沿给定的 clipBox 剪辑给定的页面。 (它首先创建一个定义剪辑路径的新内容流,然后将此流安排为页面的第一个。)
例如要沿底部上方 650 个单位的水平线裁剪页面内容,请执行以下操作:
PDPage page = ...
PDRectangle cropBox = page.findCropBox();
clipPage(document, page, new BoundingBox(
cropBox.getLowerLeftX(),
cropBox.getLowerLeftY() + 650,
cropBox.getUpperRightX(),
cropBox.getUpperRightY()));
有关 运行 的示例,请看这里:ClipPage.java。
我想通过连接某些单独的页面来拆分以生成一个新的 pdf,但最后一页必须在某个点拆分(即,所有超过限制的内容都被包括在内,低于所有内容被排除在外 -我只关心那些左上角在一条线上的)。可以使用 PDFbox 吗?
完成任务的一种方法,即在特定点 拆分 页面 (即包含所有超出限制的内容,低于限制的所有内容被排除在外) 将在前面加上剪辑路径。
你可以使用这个方法:
void clipPage(PDDocument document, PDPage page, BoundingBox clipBox) throws IOException
{
PDPageContentStream pageContentStream = new PDPageContentStream(document, page, true, false);
pageContentStream.addRect(clipBox.getLowerLeftX(), clipBox.getLowerLeftY(), clipBox.getWidth(), clipBox.getHeight());
pageContentStream.clipPath(PathIterator.WIND_NON_ZERO);
pageContentStream.close();
COSArray newContents = new COSArray();
COSStreamArray contents = (COSStreamArray) page.getContents().getStream();
newContents.add(contents.get(contents.getStreamCount()-1));
for (int i = 0; i < contents.getStreamCount()-1; i++)
{
newContents.add(contents.get(i));
}
page.setContents(new PDStream(new COSStreamArray(newContents)));
}
沿给定的 clipBox 剪辑给定的页面。 (它首先创建一个定义剪辑路径的新内容流,然后将此流安排为页面的第一个。)
例如要沿底部上方 650 个单位的水平线裁剪页面内容,请执行以下操作:
PDPage page = ...
PDRectangle cropBox = page.findCropBox();
clipPage(document, page, new BoundingBox(
cropBox.getLowerLeftX(),
cropBox.getLowerLeftY() + 650,
cropBox.getUpperRightX(),
cropBox.getUpperRightY()));
有关 运行 的示例,请看这里:ClipPage.java。