当前位置: 首页 > 面试题库 >

或者在Java中使用iText pdf更改pdf页面的颜色

闻人思聪
2023-03-14
问题内容

我正在根据客户活动创建报告。我正在iText
PDF库的帮助下创建此报告。我想用蓝色背景色(用于产品名称和免责声明)创建前两个页面,并用白色(不使用背景色)创建其余页面。我使用以下代码在报告的开头用蓝色涂了两页。

Rectangle pageSize = new Rectangle(PageSize.A4);
pageSize.setBackgroundColor(new BaseColor(84, 141, 212));
Document document = new Document( pageSize );

但是当我使用移至第三页时document.newpage(),该页面仍为蓝色。我无法更改第三页的颜色。我想将第三页的颜色更改为白色。如何使用iText做到这一点?


问题答案:

这是我如何在Java中使用iText如何添加pdf的页面背景色的后续问题

虽然该问题的答案中给出的建议有效,但这并不是您可以获得的最佳建议。如果我早些时候看过您的原始问题,我将以不同的方式回答。我会建议您使用页面事件,如PageBackgrounds示例中那样。

在此示例中,我为页面1和2创建蓝色背景,为所有后续偶数页面创建灰色背景。参见page_backgrounds.pdf

如何实现的?好吧,使用与我对这个相关问题的回答相同的技术:如何使用iText库5.5.2为整个pdf页面绘制边框

我创建这样的页面事件:

public class Background extends PdfPageEventHelper {
    @Override
    public void onEndPage(PdfWriter writer, Document document) {
        int pagenumber = writer.getPageNumber();
        if (pagenumber % 2 == 1 && pagenumber != 1)
            return;
        PdfContentByte canvas = writer.getDirectContentUnder();
        Rectangle rect = document.getPageSize();
        canvas.setColorFill(pagenumber < 3 ? BaseColor.BLUE : BaseColor.LIGHT_GRAY);
        canvas.rectangle(rect.getLeft(), rect.getBottom(), rect.getWidth(), rect.getHeight());
        canvas.fill();
    }
}

如您所见,我首先检查页码。如果它是一个奇数并且不等于1,我什么也不会做。

但是,如果我在第1页或第2页上,或者页码是偶数,则从中获取内容writer,而从中获取页面尺寸document。然后,将填充颜色设置为蓝色或浅灰色(取决于页码),然后为覆盖整个页面的矩形构造路径。最后,我用填充颜色填充该矩形。

现在我们有了自定义Background事件,我们可以像这样使用它:

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
Background event = new Background();
writer.setPageEvent(event);

Background如果您需要其他行为,请随时适应课程。



 类似资料:
  • 我在这里搜索了很多关于这方面的文章。我找到了一些,但没有一个能满足我的需要。那么,让我们开始吧。我正在ITextPDF中创建一个文件,之后需要打印。文件的内容是动态的。因此,PDF有时会将内容拆分为多个页面,当我打印时,页面之间的间隙会显示在纸上,并留有很大的空间(我需要在一个页面中使用热敏打印机打印)。所以,我花了几天时间试图找到任何解决方案,但还是找不到。对于打印,我使用PDFBox,它工作得

  • 问题内容: 我是库的新手。谁能指导我如何使用Java中的将背景色添加到整个页面(而不是块或段落)pdf。 问题答案: 此代码将完成此工作:

  • 问题内容: 一种样式链接到当前页面与其他页面有何不同?我想交换文字和背景的颜色。 HTML: CSS: 问题答案: :当您单击并按住链接时( 活动! )。 :当链接已被访问时。 如果您要突出显示与当前页面相对应的链接,则可以为该链接定义一些特定的样式- 将此新类仅添加到服务器端或客户端(使用JavaScript)上的相应链接(链接)。

  • 如果我试图做标题,我不会到达有页计数器。 如果我按照上面的代码做,我不会影响样式。

  • 我有一个从LibreOffice Writer导出的PDF文件。这里有一个例子。一些页面具有纵向,其他页面具有横向。我正在使用Linux,当我在evice或Foxit Reader中查看文件时,它会正确显示,即所有文本行都是水平的。它也可以在我的打印机上用A4纸正确打印:横向页面逆时针旋转90度,使文本行垂直。 问题是:文档将在另一台设备(出版商中)上打印,我被告知所有页面都必须具有纵向方向。我不

  • 问题内容: 我有一个PDFReader,其中包含横向模式的某些页面和纵向模式的其他页面。 我需要区分它们以进行一些处理…但是,如果我调用getOrientation或getPageSize,则该值始终是相同的(pagesize为595,方向为0)。 为什么横向页面的值没有不同? 我试图找到其他方法来检索页面宽度/方向,但没有任何效果。 这是我的代码: 谢谢 ! 问题答案: 解决: 用 代替