我想通过连接某些单独的页面来分割生成新的pdf,但最后一页必须在某一点被拆分(即所有超出限制的内容都要包括在内,以及下面的所有内容都要排除 - 我只是关心那些左上角在线之上的人。这可能使用PDFbox吗?
答案 0 :(得分:0)
实现任务的一种方法,即在某一点拆分一个页面(即所有超出限制的内容以及下面的所有内容都被排除在外)将是一个前置剪辑路径。
您可以使用此方法:
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剪辑给定页面。 (它首先创建一个定义剪辑路径的新内容流,然后将此流安排为页面的第一个。)
E.g。要沿着水平线在底部上方650个单位剪辑页面内容,请执行以下操作:
PDPage page = ...
PDRectangle cropBox = page.findCropBox();
clipPage(document, page, new BoundingBox(
cropBox.getLowerLeftX(),
cropBox.getLowerLeftY() + 650,
cropBox.getUpperRightX(),
cropBox.getUpperRightY()));
有关正在运行的示例,请查看此处:ClipPage.java。