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
相关产品推荐
相关产品推荐

