当前位置: 首页 > 知识库问答 >
问题:

PDDocument无法使用addPage()添加PDPage列表

汪兴旺
2023-03-14

使用1.8.9

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

共有1个答案

南门展
2023-03-14

我这样做了,有一些改进,以提高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();
    }
}

就像一个魅力!

 类似资料:
  • 根据下面的内容,我不确定如何排除这个非常简单的使用场景。 我有一个脚本(大约一个月运行一次),它在功能上做相同的事情,一个月前就开始工作了。 我将感谢任何关于开始研究为什么这不起作用的地方的建议。

  • 我希望获得PDF中每个页面的准确大小,作为我将创建的PDF单元测试的一部分。当我处理每个文档中具有许多不同页面大小的PDF时,代码返回一个ArrayList维度。 AFAIK每个页面也可以有自己的DPI设置。 我在谷歌上搜索了很多次,但我只找到了这个答案,这只给了我部分答案,因为我仍然需要计算出每页的DPI。 PDFBox-查找页面维度

  • 问题内容: 为什么下面 不行?只是为了学习而玩弄泛型,我希望我能够在其中插入任何扩展Collection的内容,但会出现此错误: 问题答案: 您已声明是的扩展名。但是根据Java编译器,它可以是 任何 扩展的元素,即。因此,出于这个原因,它必须禁止采用通用类型参数的操作。它不能让你的加入到这可能是。 尝试删除通配符: 这应该工作,因为你可以肯定是一个添加到的。

  • 问题内容: 对于下面的内容,我不确定如何解决这种非常简单的使用情况。 我有脚本功能上做了相同的事情,这(我跑大约每月一次) 用 工作作为一个月前。 我会很高兴有任何地方的指针开始研究为什么它不起作用。 问题答案: 您应该先打开url并加载cookie,然后再打开包含cookie的下一个URL。如果要打开相同的url,也可以像这样打开: 希望这可以帮助

  • 我有下一个代码: 它可以编译,但在运行时我有不支持的操作异常。为什么会发生这种情况?

  • 我正在使用laravel将列位置添加到用户表中。我创建了一个名为2017\u 05\u 18\u 025207\u添加\u用户名\u字段\u到\u用户\u表的新迁移。。并对其进行了修改,以描述模式以及所有的up()和down()。但是,当我尝试使用PHP artisan migrate进行迁移时。它没有反映在数据库中。 这段代码是我在新迁移中写的。