如何在Java中使用PDFBOX裁剪pdf中的每个页面?

时间:2012-09-12 17:51:20

标签: java pdf pdfbox

我想删除PDF中每个页面的底部,但不要更改页面大小,在PDFBOX的java中这样做的推荐方法是什么?如何从PDF中的每个页面中删除页脚?

是否有可能使用PDRectangle来删除其中的所有文本/图像?

我试过的片段,使用带有setCropBox的矩形似乎丢失了页面大小,也许cropBox不适用于此?

            PDRectangle rectangle = new PDRectangle();
            rectangle.setUpperRightY(mypage.findCropBox().getUpperRightY());
            rectangle.setLowerLeftY(50);
            rectangle.setUpperRightX(mypage.findCropBox().getUpperRightX());
            rectangle.setLowerLeftX(mypage.findCropBox().getLowerLeftX());                  
            mypage.setCropBox(rectangle);
            croppedDoc.addPage(mypage);
            croppedDoc.save(filename);              
            croppedDoc.close();

pdfbox cookbook示例中最近的例子我可以找到如何删除整个页面,但这不是我想要的,我想从页面中删除一些元素: http://pdfbox.apache.org/userguide/cookbook.html

2 个答案:

答案 0 :(得分:3)

我也是新手,但请看一下this page,特别是TrimBox的描述。如果页面上没有TrimBox,则默认为CropBox,这会导致您看到的内容。

一般情况下,不要指望PDFBox文档能够告诉你关于PDF本身的任何内容 - 很好地使用PDFBox我认为你需要去其他地方--AFAIK,主要是针对PDF规范。不过我还没有撇去它!

答案 1 :(得分:2)

如果要在保持矩形区域可见的同时删除页面的一部分,可以使用CropBox。如果您希望页面大小保持不变,则需要MediaBox保持不变。

来自PDF规范:

  

裁剪框 - 矩形(可选;可继承)以默认用户空间单位表示的矩形,用于定义默认的可见区域   用户空间。显示或打印页面时,其内容为   被裁剪(裁剪)到这个矩形,然后强加在输出上   介质以某种实现方式定义(参见第10.10.1节,   “页面边界”)。默认值:MediaBox的值。

     

MediaBox - 矩形(必需;可继承)一个矩形(参见第3.8.4节“矩形”),以默认用户空间单位表示,   定义页面所在物理介质的边界   打算显示或打印(参见第10.10.1节,“页面   边界”)。

已经看到(错误的)应用程序和库强制CropBox和MediaBox相同,请仔细检查这不是您的案例中发生的情况。

另外考虑到PDF中的坐标原点(0,0)是左下角,有些库为你做左上角的翻译,有些则没有,你可能还想仔细检查一下你正在使用的图书馆。