用pdfbox裁剪页面并用白色填充矩形的外部

jhkqcmku  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(727)

我正在开发一个自定义工具,并用这个代码剪切页面。

PDPage page = document.getPage(i-1);
PDRectangle cropBox = new PDRectangle();
cropBox.setLowerLeftX(llx);
cropBox.setLowerLeftY(lly);
cropBox.setUpperRightX(urx);
cropBox.setUpperRightY(ury);
page.setCropBox(cropBox);

PDPageContentStream contentStream = new PDPageContentStream(document,page, true, false, false);
contentStream.close();

在工具中,当我修剪它看起来像这样。

但当我打开pdf它看起来不同,我希望它看起来居中,与第一个图像的边缘

1u4esq0p

1u4esq0p1#

第二个图像是正确的。裁剪框定义了页面画布上的框,查看器将显示该框。如果要保留可见的页面尺寸,请保持裁剪框的原样,并用白色填充除内部矩形外的所有裁剪框。
e、 g.像这样:

PDDocument document = ... the document to manipulate ...;
PDRectangle box = ... the rectangle to remain visible ...;

for (PDPage page : document.getPages()) {
    PDRectangle cropBox = page.getCropBox();
    try (PDPageContentStream canvas = new PDPageContentStream(document, page, AppendMode.APPEND, false, true)) {
        canvas.setNonStrokingColor(1);
        canvas.addRect(cropBox.getLowerLeftX(), cropBox.getLowerLeftY(), cropBox.getWidth(), cropBox.getHeight());
        canvas.addRect(box.getLowerLeftX(), box.getLowerLeftY(), box.getWidth(), box.getHeight());
        canvas.fillEvenOdd();
    }
}

(3)含量试验 testTrimCengage1 )
在你的评论中
你能把修剪过的那块放在书页中间吗?
是的,通过相应地调整裁剪框:

for (PDPage page : document.getPages()) {
    PDRectangle cropBox = page.getCropBox();
    cropBox = centerBoxAroundBox(box, cropBox.getWidth(), cropBox.getHeight());
    try (PDPageContentStream canvas = new PDPageContentStream(document, page, AppendMode.APPEND, false, true)) {
        canvas.setNonStrokingColor(1);
        canvas.addRect(cropBox.getLowerLeftX(), cropBox.getLowerLeftY(), cropBox.getWidth(), cropBox.getHeight());
        canvas.addRect(box.getLowerLeftX(), box.getLowerLeftY(), box.getWidth(), box.getHeight());
        canvas.fillEvenOdd();
    }
    page.setMediaBox(cropBox);
    page.setCropBox(cropBox);
}

(3)含量试验 testTrimAndCenterCengage1 )
使用此助手方法:

PDRectangle centerBoxAroundBox(PDRectangle box, float width, float height) {
    float horitontalMargins = (width - box.getWidth()) / 2;
    float verticalMargins = (height - box.getHeight()) / 2;
    return new PDRectangle(box.getLowerLeftX() - horitontalMargins, box.getLowerLeftY() - verticalMargins, width, height);
}

(三)内容辅助方法 centerBoxAroundBox )

相关问题