【问题标题】:How can I add a background color to my PDF using iText 7?如何使用 iText 7 为我的 PDF 添加背景颜色?
【发布时间】:2019-01-04 10:27:42
【问题描述】:

我只是想为使用此库生成的 PDF 的背景添加颜色。

我希望我的页面有颜色作为背景,甚至是图片。文档让我头晕目眩。没有有用或有意义的描述;它几乎不能称为文档。

为什么这个简单的任务很难用这个库来完成?是不是为了了解如何使用一个库,就必须费尽心思读一整篇book

【问题讨论】:

  • “为什么使用这个库这么难实现?” - 很可能是因为几乎没有人需要这个,一个简单、恒定的颜色作为所有页面的背景;如果他们完全使用背景颜色,他们通常想要更复杂的东西,比如交替页面上的交替颜色、不同的页面边框和页面正文颜色等。所有这些变体都是使用您在答案中显示的模式创建的。因此,不需要一些额外的方法来创建均匀的背景颜色。尽管如此,您的示例可能应该添加到 itext 在线示例中...
  • 毫无疑问,iText 7 是目前用于文档操作的最佳 Java 库。你几乎可以用它做任何事情,它是一个强大的库。但是,使用它是另一回事。使用 itext 非常令人沮丧,我自学了 javascript,所以我可以使用其他一些名为 pdfkit 的库来完成我的任务。如果您不花几个小时阅读他们的在线示例,您将无法使用 itext。 itext 的 javadocs 是“不行的”。
  • 您参考的书是关于 iText 5,而不是 iText 7,并且版本 7 是使用新 API 完全重写的。对于 iText 7,您可以在 iText 网站上找到许多免费电子书。
  • 我知道它是针对 iText 5 的。我想说明一点,“购买”这个词被误用了。我编辑了评论。我喜欢阅读文档,而不是示例。这就是为什么我不觉得这个库对开发者友好
  • 恕我直言,iText 7 及其教程(Jump StartBuilding Blocks)并没有那么糟糕,特别是在这方面它比 iText 5 一开始要好。

标签: java pdf background background-color itext7


【解决方案1】:

在线或他们的“示例”中没有直接的答案,但我设法找到了一个类似的问题,即在 PDF 文件 here 中有各种页面背景颜色。

更新:似乎 iText-7 电子书/资源在过去 3 年中已更新。以下链接是 从 21/07/2021 开始工作。

  • ITEXT-7 构建模块的新电子书 URL HERE
  • 各种代码示例HERE
  • 所有资源索引HERE

在我看来,解决方案过于复杂。这只是背景颜色,这是一项可以大大减少理解时间的任务。使框架尽可能模块化和灵活是可以理解的,但有时人们只想快速完成一些琐碎的任务。

无论如何,对于可能遇到与我相同问题的任何人来说,这里都是解决方案:

//Class that creates the PDF
public class PdfCreator {

//Helper class so we can add colour to our pages when we call it from outer class
private static class PageBackgroundsEvent implements IEventHandler {
    @Override
    public void handleEvent(Event event) {
        PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
        PdfPage page = docEvent.getPage();

        PdfCanvas canvas = new PdfCanvas(page);
        Rectangle rect = page.getPageSize();
        //I used custom rgb for Color
        Color bgColour = new DeviceRgb(255, 204, 204);
        canvas  .saveState()
                .setFillColor(bgColour)
                .rectangle(rect.getLeft(), rect.getBottom(), rect.getWidth(), rect.getHeight())
                .fillStroke()
                .restoreState();
        }
    }
    
    //PATH_OF_FILE is the path that the PDF will be created at.
    String filename = PATH_OF_FILE + "/myFile.pdf";
    OutputStream outputStream = new FileOutputStream(new File(filename));
    PdfWriter writer = new PdfWriter(outputStream);
    PdfDocument pdfDoc = new PdfDocument(writer);
    pdfDoc.addEventHandler(PdfDocumentEvent.START_PAGE, new PageBackgroundsEvent());
    PageSize pageSize = pdfDoc.getDefaultPageSize();
    Document document = new Document(pdfDoc, pageSize);
    document.close();
}

背景图片可以用同样的方式添加!看到这个link

【讨论】:

  • 很高兴这对您有所帮助!
【解决方案2】:

设置背景图片:

pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, event -> {
    new PdfCanvas(((PdfDocumentEvent)event).getPage())
       .addImageAt(ImageFactory.create("filename.png"), 50f, 50f, true);
});

【讨论】:

    猜你喜欢
    • 2012-08-14
    • 1970-01-01
    • 2015-07-13
    • 2021-07-26
    • 2019-02-28
    • 2016-08-29
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多