在PDFBox中的特定点拆分

时间:2015-06-03 09:35:18

标签: pdf split pdfbox

我想通过连接某些单独的页面来分割生成新的pdf,但最后一页必须在某一点被拆分(即所有超出限制的内容都要包括在内,以及下面的所有内容都要排除 - 我只是关心那些左上角在线之上的人。这可能使用PDFbox吗?

1 个答案:

答案 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