在 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