我想分裂生成一个新的pdf,通过连接某些单独的网页,但最后一页必须在某一点(即所有的内容以上的限制,包括和所有下面的内容被排除-我只关心他们的左上角超过一条线)。使用PDFbox可以吗?
发布于 2015-06-04 21:26:21
实现这一任务的一种方法,即在某个点拆分一个页面(即所有要包含的限制以上的内容,以及下面要排除的所有内容)将是在剪辑路径前面加上一个片段路径。
您可以使用此方法:
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。
https://stackoverflow.com/questions/30616220
复制相似问题