PDDocument 无法使用 addPage() 添加 PDPage 列表
PDDocument can't add list of PDPage with addPage()
使用 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();
}
}
那么,我应该如何do/modify正确添加每个裁剪页面?
我的文档(如果你想看我想做什么):
http://www.cinemas-utopia.org/admin/grilles/toulouse/2015-06-02.pdf
我这样做了,对 PDF 进行了一些改进(特定情况)。
private static void cutAPDPage(int nbOfCrops, PDPage myPage, int resize) throws IOException{
PDDocument pdfSplit = new PDDocument();
ArrayList<PDPage> pages = new ArrayList<PDPage>();
PDRectangle cropBox = myPage.findCropBox();
PDRectangle newCropBox = new PDRectangle();
newCropBox.setLowerLeftX(cropBox.getLowerLeftX());
newCropBox.setLowerLeftY(cropBox.getLowerLeftY() - resize);
newCropBox.setUpperRightX(cropBox.getUpperRightX());
newCropBox.setUpperRightY(cropBox.getUpperRightY() + resize);
myPage.setCropBox(newCropBox);
PDRectangle mediaBox = myPage.findMediaBox();
PDRectangle newMediaBox = new PDRectangle();
newMediaBox.setLowerLeftX(mediaBox.getLowerLeftX());
newMediaBox.setLowerLeftY(mediaBox.getLowerLeftY() - resize);
newMediaBox.setUpperRightX(mediaBox.getUpperRightX());
newMediaBox.setUpperRightY(mediaBox.getUpperRightY() + resize);
myPage.setMediaBox(newMediaBox);
float croppingHeight = (myPage.findCropBox().getUpperRightY()/nbOfCrops);
for(int page = 0; page<nbOfCrops; page++){
pages.add(new PDPage());
}
int splits = 0;
for(PDPage page: pages){
page = (PDPage) pdf.importPage(myPage);
PDRectangle cropBox1 = page.findCropBox();
PDRectangle rectangle = new PDRectangle();
rectangle.setUpperRightY((float) (cropBox1.getUpperRightY() - (croppingHeight * (splits))));
rectangle.setLowerLeftY((float) (cropBox1.getUpperRightY() - (croppingHeight*(splits + 1))));
rectangle.setUpperRightX(cropBox1.getUpperRightX());
rectangle.setLowerLeftX(cropBox1.getLowerLeftX());
page.setCropBox(rectangle);
pdfSplit.addPage(page);
splits++;
}
try {
pdfSplit.save("split.pdf");
pdfSplit.close();
} catch (Exception e) {
e.printStackTrace();
}
}
很有魅力!
使用 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();
}
}
那么,我应该如何do/modify正确添加每个裁剪页面?
我的文档(如果你想看我想做什么):
http://www.cinemas-utopia.org/admin/grilles/toulouse/2015-06-02.pdf
我这样做了,对 PDF 进行了一些改进(特定情况)。
private static void cutAPDPage(int nbOfCrops, PDPage myPage, int resize) throws IOException{
PDDocument pdfSplit = new PDDocument();
ArrayList<PDPage> pages = new ArrayList<PDPage>();
PDRectangle cropBox = myPage.findCropBox();
PDRectangle newCropBox = new PDRectangle();
newCropBox.setLowerLeftX(cropBox.getLowerLeftX());
newCropBox.setLowerLeftY(cropBox.getLowerLeftY() - resize);
newCropBox.setUpperRightX(cropBox.getUpperRightX());
newCropBox.setUpperRightY(cropBox.getUpperRightY() + resize);
myPage.setCropBox(newCropBox);
PDRectangle mediaBox = myPage.findMediaBox();
PDRectangle newMediaBox = new PDRectangle();
newMediaBox.setLowerLeftX(mediaBox.getLowerLeftX());
newMediaBox.setLowerLeftY(mediaBox.getLowerLeftY() - resize);
newMediaBox.setUpperRightX(mediaBox.getUpperRightX());
newMediaBox.setUpperRightY(mediaBox.getUpperRightY() + resize);
myPage.setMediaBox(newMediaBox);
float croppingHeight = (myPage.findCropBox().getUpperRightY()/nbOfCrops);
for(int page = 0; page<nbOfCrops; page++){
pages.add(new PDPage());
}
int splits = 0;
for(PDPage page: pages){
page = (PDPage) pdf.importPage(myPage);
PDRectangle cropBox1 = page.findCropBox();
PDRectangle rectangle = new PDRectangle();
rectangle.setUpperRightY((float) (cropBox1.getUpperRightY() - (croppingHeight * (splits))));
rectangle.setLowerLeftY((float) (cropBox1.getUpperRightY() - (croppingHeight*(splits + 1))));
rectangle.setUpperRightX(cropBox1.getUpperRightX());
rectangle.setLowerLeftX(cropBox1.getLowerLeftX());
page.setCropBox(rectangle);
pdfSplit.addPage(page);
splits++;
}
try {
pdfSplit.save("split.pdf");
pdfSplit.close();
} catch (Exception e) {
e.printStackTrace();
}
}
很有魅力!