You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenPDF 1.3.29添加PDF页眉不显示问题求助

OpenPDF 添加页眉不显示问题解决

问题描述

使用Maven安装的OpenPDF 1.3.29版本,尝试为PDF文档的每一页添加页眉,但生成的PDF仅显示内容段落,页眉未出现。测试代码如下:

package test;

import java.io.FileOutputStream;

import com.lowagie.text.Document;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.HeaderFooter;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.pdf.PdfWriter;

public class HeaderTest {
  public static void main(String[] args) 
  throws Exception {
    Document doc = null;
    PdfWriter writer = null;
    try {
      doc = new Document(PageSize.LETTER, 50, 50, 50, 50);
      writer = PdfWriter.getInstance(doc, new FileOutputStream("C:\\Tmp\\test.pdf"));
      doc.open();
      
      Font headerFont = FontFactory.getFont(FontFactory.HELVETICA_BOLD,18);
      HeaderFooter header = new HeaderFooter(new Phrase("Test Header",headerFont), false);
      doc.setHeader(header);
      
      doc.add(new Paragraph("Test Content"));

    } finally {
      try { doc.close(); } catch( Exception e ) { }
      try { writer.close(); } catch( Exception e ) { }
    }
  }
}

问题原因及解决方法

  • 核心错误:你在doc.open()之后才设置页眉,而OpenPDF要求页眉、页脚必须在文档打开前完成配置。文档打开后,页面布局上下文已初始化,此时再设置页眉不会生效。
  • 修正方案:将页眉设置代码移至doc.open()之前执行。

修正后的代码如下:

package test;

import java.io.FileOutputStream;

import com.lowagie.text.Document;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.HeaderFooter;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.pdf.PdfWriter;

public class HeaderTest {
  public static void main(String[] args) 
  throws Exception {
    Document doc = null;
    PdfWriter writer = null;
    try {
      doc = new Document(PageSize.LETTER, 50, 50, 50, 50);
      writer = PdfWriter.getInstance(doc, new FileOutputStream("C:\\Tmp\\test.pdf"));
      
      // 提前设置页眉,放在doc.open()之前
      Font headerFont = FontFactory.getFont(FontFactory.HELVETICA_BOLD,18);
      HeaderFooter header = new HeaderFooter(new Phrase("Test Header",headerFont), false);
      doc.setHeader(header);
      
      doc.open();
      doc.add(new Paragraph("Test Content"));

    } finally {
      try { doc.close(); } catch( Exception e ) { }
      try { writer.close(); } catch( Exception e ) { }
    }
  }
}

如果需要更灵活的页眉页脚控制(比如不同页面显示不同内容),可以通过继承PdfPageEventHelper重写相关方法实现,但当前场景下调整设置顺序即可解决问题。

内容的提问来源于stack exchange,提问作者Neil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:18:36