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

如何在iText生成的PDF的标题中添加图像?

祁奇略
2023-03-14
问题内容

我正在使用iText生成PDF。我创建了一个自定义PdfPageEventHelper,以向每个页面添加页眉(和页脚)。

我的问题是我不知道如何添加图像,以使其显示在“页眉框”中。我只知道如何将图像添加到文档内容本身(如果这样)。

这是一些代码片段…

public static void main(String[] args) {
  Rectangle headerBox = new Rectangle(36, 54, 559, 788);
  /* ... */
  Document document = new Document(PageSize.A4, 36, 36, 154, 54);
  PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILENAME));
  HeaderFooter event = new HeaderFooter();
  writer.setBoxSize("headerBox", headerBox);
  writer.setPageEvent(event);
  document.open();
  addContent();
  document.close();
}

static class HeaderFooter extends PdfPageEventHelper {

  public void onEndPage(PdfWriter writer, Document document) {
    Rectangle rect = writer.getBoxSize("headerBox");
    // add header text
    ColumnText.showTextAligned(writer.getDirectContent(),
      Element.ALIGN_RIGHT, new Phrase("Hello", fontHeader1),
      rect.getLeft(), rect.getTop(), 0);

    // add header image
    try {
      Image img = Image.getInstance("c:/mylogo.PNG");
      img.scaleToFit(100,100);
      document.add(img);
    } catch (Exception x) {
      x.printStackTrace();
    }

  }

}

任何有关将图像添加到标题的适当方式的建议都将受到赞赏!!


问题答案:

您正在犯两个主要错误。

  1. 您正在为每个新页面创建对象的新实例。这将导致PDF膨胀,因为图像字节的添加次数将与页面一样多。请ImageonEndPage()方法之外创建对象,然后重用它。这样,图像字节将仅添加到PDF一次。
  2. 如文档所述,Document传递给onEndPage()方法的参数应被视为只读参数。禁止向其中添加内容。与您使用创建的对象不同new Document(PageSize.A4, 36, 36, 154, 54)。实际上,它是由实例PdfDocument内部创建的类的PdfWriter实例。要添加图片,您需要PdfContentByte从作家处获得,然后使用来添加图片addImage()

阅读文档可以轻松避免此类错误。通过阅读我的《iText in Action》,您可以节省大量时间。



 类似资料:
  • 问题内容: 我需要有关iText的帮助。我需要在其他现有的iText文档或PDF文档中添加现有的pdf封面。有人可以帮助我吗?我已经搜索了一些书籍(iText在使用中),但有些复杂。 问题答案: 假设我们有一个名为pages.pdf的文档,并且我们想添加封面hero.pdf作为本文档的封面。 方法1: 使用 看一下AddCover1示例: 结果是一个文档,在这里您首先有封面,然后是文档的其余部分:

  • 我正在使用iText生成Pdf。但当我试图在pdf中添加图像时, 我mage.get实例(新的URL(timetableResource.getImageUrl()));document.add(学校标志); 但我得到的错误是 HTTP状态500-服务器为URL返回了HTTP响应代码400:http://139.59.72.150:8080/sms/attachments/23/42/school

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

  • 这是我尝试过的代码,但我得到以下异常: iText。内核PDFEException:“无法在已刷新的页面上绘制元素。” 我需要在最后添加页码,因为在生成pdf的内容后,我生成了一个目录并将其移动到文档的开头。因此,我只知道生成所有页面后的页码。

  • 在“在另一个PDF文件的可用空间追加PDF”之前,我问了一个问题,我已经成功地将原生iText和JFreeChart结合在一个页面中制作了一个PDF。 我使用教程“SpringWebMVC与PDF视图示例(使用iText5.x)”将此设置合并到我的SpringMVC应用程序中。 我明白使用Spring的并反过来实现为 并且JFreeChart实例需要将现有PDF文件插入其中,如“使用嵌入式JFre

  • 问题内容: 我正在尝试使用acrofields填充PDF,我能够完美地添加字符串数据,但是在向acrofields添加图像时遇到了问题。这是我添加字符串数据的代码。 问题答案: 实现此目的的“官方”方法是,将Button字段用作图像的占位符,并按照我的书中所述替换按钮的“ icon” : 有关完整的代码示例,请参见ReplaceIcon.java。 免责声明:我是iText的原始开发人员,也是“