【发布时间】:2015-06-01 12:49:15
【问题描述】:
使用 1.8.9
我想使用裁剪工具将 PDF 页面剪切为多页 PDF。但是当我向我的 PDDocument 添加多个页面时,它根本不会添加它。
代码示例(原PDPage是我函数的参数):
private static void splitPage(int nbOfCrops, PDPage myPage) throws IOException{
PDDocument pdfSplit = new PDDocument();
ArrayList<PDPage> pages = new ArrayList<PDPage>();
float croppingHeight = (myPage.findCropBox().getUpperRightY()/nbOfCrops);
for(int page = 0; page<nbOfCrops; page++){
pages.add(myPage); //Creates multiple copies of myPage
}
int splits = 0;
for(PDPage page: pages){
PDRectangle cropBox = page.findCropBox();
PDRectangle rectangle = new PDRectangle();
rectangle.setUpperRightY((float) (cropBox.getUpperRightY() - (croppingHeight* (splits))));
rectangle.setLowerLeftY((float) (cropBox.getUpperRightY() - (croppingHeight*(splits+ 1))));
rectangle.setUpperRightX(cropBox.getUpperRightX());
rectangle.setLowerLeftX(cropBox.getLowerLeftX());
page.setCropBox(rectangle);
pdfSplit.addPage(page);
splits++;
}
try {
pdfSplit.save("test.pdf");
System.out.println(pdfSplit.getNumberOfPages()); //Always returns 1
pdfSplit.close();
} catch (Exception e) {
e.printStackTrace();
}
}
那么,我应该怎么做/修改才能正确添加每个裁剪页面?
我的文件(如果你想看看我想做什么):
http://www.cinemas-utopia.org/admin/grilles/toulouse/2015-06-02.pdf
【问题讨论】:
-
很难测试,因为你的代码不完整而且你没有告诉版本,但我没有看到你在做一个“新的 PDPage”,你总是添加相同的 PDPage 对象.这是故意的吗?
-
刚刚编辑了一点。如果有 PDPage 对象的 ArrayList,我不需要实例化它们。 (也许我错了)。我复制页面 X 次以每次在不同的位置裁剪它并返回裁剪页面的列表。
-
请尝试创建一个执行“新 PDPage”的软件,最坏的情况是您会浪费 10 分钟。我之所以提到它,是因为在 PDF 本身中,不同的页面是不同的对象。我不知道这是否是您探测的原因,但在最终的 PDF 中,它们必须不同,否则它们将具有相同的裁剪框。
-
@TilmanHausherr 感谢您的回答,我要做大事只是时间问题。