java itextpdf怎么设置pdf页眉页脚
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java itextpdf怎么设置pdf页眉页脚相关的知识,希望对你有一定的参考价值。
以WPS 2019版本为例:
关于怎么设置pdf页眉页脚,我们推荐您可考虑使用WPS2019来完成,操作步骤如下:
1、打开「PDF文档」;
2、点击「插入-页码」/「插入-页眉页脚」(提示该功能需开通WPS会员使用);
3、可根据需求设置页面或页眉页脚的参数来进行插入。
参考技术A /*** ITextTest
* iText生成PDF加入列表,注释等内容,同时设置页眉和页脚及页码等。
*/
package com.labci.itext.test;
import <a href="http://lib.csdn.net/base/17" class='replace_word' title="Java EE知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Java</a>.awt.Color;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import com.lowagie.text.Annotation;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.HeaderFooter;
import com.lowagie.text.List;
import com.lowagie.text.ListItem;
import com.lowagie.text.Phrase;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;
/**
* @author Bill Tu(tujiyue/iwtxokhtd)
* Jun 6, 2011[4:10:35 PM]
*
*/
public class ITextList
private final static String RESULT_FILE="itext_list.pdf";
public static void main(String []args)
Document doc=new Document();
try
PdfWriter.getInstance(doc, new FileOutputStream(RESULT_FILE));
BaseFont fontChinese=null;
try
fontChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);//设置中文字体
catch (IOException e)
e.printStackTrace();
Font chinese = new Font(fontChinese, 10, Font.NORMAL);
/**
* HeaderFooter的第2个参数为非false时代表打印页码
* 页眉页脚中也可以加入图片,并非只能是文字
*/
HeaderFooter header=new HeaderFooter(new Phrase("这仅仅是个页眉,页码在页脚处",chinese),false);
//设置是否有边框等
// header.setBorder(Rectangle.NO_BORDER);
header.setBorder(Rectangle.BOTTOM);
header.setAlignment(1);
header.setBorderColor(Color.red);
doc.setHeader(header);
HeaderFooter footer=new HeaderFooter(new Phrase("-",chinese),new Phrase("-",chinese));
/**
* 0是靠左
* 1是居中
* 2是居右
*/
footer.setAlignment(1);
footer.setBorderColor(Color.red);
footer.setBorder(Rectangle.BOX);
doc.setFooter(footer);
/**
* 页眉页脚的设置一定要在open前设置好
*/
doc.open();
/**
* true:代表要排序,10代表序号与文字之间的间距
* false:代表不排序,则文字前的符号为"-"
*/
List itextList=new List(true,10);
/**
* 也可以改变列表的符号[可选]
* $$$$$$$$$$$
* 要改变列表符号时,上面的List构造方法第一参数值必须为false
* $$$$$$$$$$$
* 可以使用字符串,Chunk,Image等作列表符号,如下
*/
//itextList.setListSymbol("*");
ListItem firstItem=new ListItem("first paragraph");
ListItem secondItem=new ListItem("second paragraph");
ListItem thirdItem=new ListItem("third paragraph");
itextList.add(firstItem);
itextList.add(secondItem);
itextList.add(thirdItem);
doc.add(itextList);
//添加注释,注释有标题和内容,注释可以是文本,内部链接,外部链接,图片等
Annotation annotation=new Annotation("what's this?","it's a tree and it is not a big");
doc.add(annotation);
doc.close();
catch (FileNotFoundException e)
e.printStackTrace();
catch (DocumentException e)
e.printStackTrace();
本回答被提问者采纳 参考技术B
可以使用Spire.PDF for Java在Java中利用代码进行转换。需要在 Java 程序中添加Spire.PDF.jar文件作为依赖项。可以从这个链接下载 JAR 文件;如果使用 Maven,则可以通过在 pom.xml 文件中添加以下代码导入 JAR 文件。
repositories>
<repository>
<id>com.e-iceblue</id>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository></repositories><dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>5.3.1</version>
</dependency></dependencies>
Java代码如下:
import java.awt.*;
import java.awt.geom.Dimension2D;
mport com.spire.pdf.*;
import com.spire.pdf.automaticfields.PdfAutomaticField;
import com.spire.pdf.automaticfields.PdfCompositeField;
import com.spire.pdf.automaticfields.PdfPageCountField;import com.spire.pdf.automaticfields.PdfPageNumberField;
import com.spire.pdf.graphics.*;
public class HeaderFooter
public static void main(String[] args) throws Exception
//创建 PdfDocument 对象
PdfDocument doc = new PdfDocument();
//创建PdfMargins对象, 并设置的页边距
PdfMargins margin = new PdfMargins(60,60,40,40);
//调用 addHeaderAndFooter()方法添加页眉页脚
addHeaderAndFooter(doc, PdfPageSize.A4, margin);
//在文档中添加两页并写入文字
PdfPageBase page1 = doc.getPages().add();
PdfPageBase page2 = doc.getPages().add();
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体",Font.PLAIN,14),true);
String text1 = "Spire.PDF 示例";
String text2 = "添加PDF页眉页脚";
page1.getCanvas().drawString(text1, font, PdfBrushes.getBlack(),0,0);
page2.getCanvas().drawString(text2, font, PdfBrushes.getBlack(),0,0);
//保存文档
doc.saveToFile("output/headerFooter.pdf");
doc.close();
static void addHeaderAndFooter(PdfDocument doc, Dimension2D pageSize, PdfMargins margin)
PdfPageTemplateElement header = new PdfPageTemplateElement(margin.getLeft(), pageSize.getHeight());
doc.getTemplate().setLeft(header);
PdfPageTemplateElement topSpace = new PdfPageTemplateElement(pageSize.getWidth(), margin.getTop());
topSpace.setForeground(true);
doc.getTemplate().setTop(topSpace);
//添加页眉
PdfTrueTypeFont font= new PdfTrueTypeFont(new Font("宋体",Font.PLAIN,10),true);
PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Left);
String label = "成都冰蓝科技有限公司";
Dimension2D dimension2D = new Dimension();
dimension2D.setSize(font.measureString(label, format));
float y = topSpace.getHeight() - font.getHeight() - 1;
PdfPen pen = new PdfPen(new PdfRGBColor(Color.black), 0.75f);
topSpace.getGraphics().setTransparency(0.5f);
topSpace.getGraphics().drawLine(pen, margin.getLeft(), y, pageSize.getWidth() - margin.getRight(), y);
y = y - 1 - (float) dimension2D.getHeight();
topSpace.getGraphics().drawString(label, font, PdfBrushes.getBlack(), margin.getLeft(), y, format);
PdfPageTemplateElement rightSpace = new PdfPageTemplateElement(margin.getRight(), pageSize.getHeight());
doc.getTemplate().setRight(rightSpace);
//添加显示当前页及总页数的域作为页脚
PdfPageTemplateElement footer = new PdfPageTemplateElement(pageSize.getWidth(), margin.getBottom());
footer.setForeground(true);
doc.getTemplate().setBottom(footer);
y = font.getHeight() + 1;
footer.getGraphics().setTransparency(0.5f);
footer.getGraphics().drawLine(pen, margin.getLeft(), y, pageSize.getWidth() - margin.getRight(), y);
y = y + 1;
PdfPageNumberField pageNumber = new PdfPageNumberField();
PdfPageCountField pageCount = new PdfPageCountField();
PdfCompositeField pageNumberLabel = new PdfCompositeField();
pageNumberLabel.setAutomaticFields(new PdfAutomaticField[]pageNumber, pageCount);
pageNumberLabel.setBrush(PdfBrushes.getBlack());
pageNumberLabel.setFont(font);
format = new PdfStringFormat(PdfTextAlignment.Right);
pageNumberLabel.setStringFormat(format);
pageNumberLabel.setText("第0页共1页");
pageNumberLabel.setBounds(footer.getBounds());
pageNumberLabel.draw(footer.getGraphics(), - margin.getLeft(), y);
希望对您有帮助。
参考技术Cspire.doc for java 的页眉页脚添加方法可以参考一下:Java 添加PDF页眉、页脚
参考技术D打开工具,然后点击打开更多文件,然后随便打开PDF文件中的一篇。
然后在文档下面添加页眉页脚,按照图片的操作就可以添加页眉页脚。
文本可以在左边,中间,右边添加,这里可以有些要求提示,下面是效果预览图。
自己根据自己需要去弄,设置下字体,弄好之后点击下面的确定。
itext生成pdf(附带页眉,页脚,页码)
package cn.picclife.mwx.salesupport.marketactivity.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.ExceptionConverter; import com.itextpdf.text.Font; import com.itextpdf.text.Image; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfPageEventHelper; import com.itextpdf.text.pdf.PdfTemplate; import com.itextpdf.text.pdf.PdfWriter; public class PDFUtil { //页码事件 private static class PageXofYTest extends PdfPageEventHelper{ public PdfTemplate total; public BaseFont bfChinese; /** * 重写PdfPageEventHelper中的onOpenDocument方法 */ @Override public void onOpenDocument(PdfWriter writer, Document document) { // 得到文档的内容并为该内容新建一个模板 total = writer.getDirectContent().createTemplate(500, 500); try { String prefixFont = ""; String os = System.getProperties().getProperty("os.name"); if(os.startsWith("win") || os.startsWith("Win")){ prefixFont = "C:\Windows\Fonts" + File.separator; }else { prefixFont = "/usr/share/fonts/chinese" + File.separator; } // 设置字体对象为Windows系统默认的字体 bfChinese = BaseFont.createFont(prefixFont + "simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); } catch (Exception e) { throw new ExceptionConverter(e); } } /** * 重写PdfPageEventHelper中的onEndPage方法 */ @Override public void onEndPage(PdfWriter writer, Document document) { // 新建获得用户页面文本和图片内容位置的对象 PdfContentByte pdfContentByte = writer.getDirectContent(); // 保存图形状态 pdfContentByte.saveState(); String text = writer.getPageNumber() + "/"; // 获取点字符串的宽度 float textSize = bfChinese.getWidthPoint(text, 9); pdfContentByte.beginText(); // 设置随后的文本内容写作的字体和字号 pdfContentByte.setFontAndSize(bfChinese, 9); // 定位‘X/‘ float x = (document.right() + document.left()) / 2; float y = 56f; pdfContentByte.setTextMatrix(x, y); pdfContentByte.showText(text); pdfContentByte.endText(); // 将模板加入到内容(content)中- // 定位‘Y‘ pdfContentByte.addTemplate(total, x + textSize, y); pdfContentByte.restoreState(); } /** * 重写PdfPageEventHelper中的onCloseDocument方法 */ @Override public void onCloseDocument(PdfWriter writer, Document document) { total.beginText(); try { String prefixFont = ""; String os = System.getProperties().getProperty("os.name"); if(os.startsWith("win") || os.startsWith("Win")){ prefixFont = "C:\Windows\Fonts" + File.separator; }else { prefixFont = "/usr/share/fonts/chinese" + File.separator; } bfChinese = BaseFont.createFont(prefixFont + "simsun.ttc,0",BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); total.setFontAndSize(bfChinese, 9); } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } total.setTextMatrix(0, 0); // 设置总页数的值到模板上,并应用到每个界面 total.showText(String.valueOf(writer.getPageNumber() - 1)); total.endText(); } } //页眉事件 private static class Header extends PdfPageEventHelper { public static PdfPTable header; public Header(PdfPTable header) { Header.header = header; } @Override public void onEndPage(PdfWriter writer, Document document) { //把页眉表格定位 header.writeSelectedRows(0, -1, 36, 806, writer.getDirectContent()); } /** * 设置页眉 * @param writer * @param req * @throws MalformedURLException * @throws IOException * @throws DocumentException */ public void setTableHeader(PdfWriter writer) throws MalformedURLException, IOException, DocumentException { String imageAddress = "E://TESTPDF/"; PdfPTable table = new PdfPTable(1); table.setTotalWidth(555); PdfPCell cell = new PdfPCell(); cell.setBorder(0); Image image01; image01 = Image.getInstance(imageAddress + "testhead.png"); //图片自己传 //image01.scaleAbsolute(355f, 10f); image01.setWidthPercentage(80); cell.setPaddingLeft(30f); cell.setPaddingTop(-20f); cell.addElement(image01); table.addCell(cell); Header event = new Header(table); writer.setPageEvent(event); } } //页脚事件 private static class Footer extends PdfPageEventHelper { public static PdfPTable footer; @SuppressWarnings("static-access") public Footer(PdfPTable footer) { this.footer = footer; } @Override public void onEndPage(PdfWriter writer, Document document) { //把页脚表格定位 footer.writeSelectedRows(0, -1, 38, 50, writer.getDirectContent()); } /** * 页脚是图片 * @param writer * @throws MalformedURLException * @throws IOException * @throws DocumentException */ public void setTableFooter(PdfWriter writer) throws MalformedURLException, IOException, DocumentException { String imageAddress = "E://TESTPDF/"; PdfPTable table = new PdfPTable(1); table.setTotalWidth(523); PdfPCell cell = new PdfPCell(); cell.setBorder(1); Image image01; image01 = Image.getInstance(imageAddress + "testfooter.png"); //图片自己传 image01.scaleAbsoluteWidth(523); image01.scaleAbsoluteHeight(30f); image01.setWidthPercentage(100); cell.addElement(image01); table.addCell(cell); Footer event = new Footer(table); writer.setPageEvent(event); } /** * 页脚是文字 * @param writer * @param songti09 */ public void setTableFooter(PdfWriter writer, Font songti09) { PdfPTable table = new PdfPTable(1); table.setTotalWidth(520f); PdfPCell cell = new PdfPCell(); cell.setBorder(1); String string = "地址: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 网址: www.xxxxxxx.com 咨询热线: 400x-xxx-xxx"; Paragraph p = new Paragraph(string, songti09); cell.setPaddingLeft(10f); cell.setPaddingTop(-2f); cell.addElement(p); table.addCell(cell); Footer event = new Footer(table); writer.setPageEvent(event); } } public static void main(String[] args) throws Exception { Document document = new Document(PageSize.A4, 48, 48, 60, 65); // add index page. String path = "test.pdf"; String dir = "E://TEST"; File file = new File(dir); if (!file.exists()) { file.mkdir(); } path = dir + File.separator + path; FileOutputStream os = new FileOutputStream(path); PdfWriter writer = PdfWriter.getInstance(document, os); // 设置页面布局 writer.setViewerPreferences(PdfWriter.PageLayoutOneColumn); // 为这篇文档设置页面事件(X/Y) writer.setPageEvent(new PageXofYTest()); String prefixFont = ""; String oss = System.getProperties().getProperty("os.name"); if(oss.startsWith("win") || oss.startsWith("Win")){ prefixFont = "C:\Windows\Fonts" + File.separator; }else { prefixFont = "/usr/share/fonts/chinese" + File.separator; } BaseFont baseFont1 = BaseFont.createFont(prefixFont + "simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); Font songti09 = new Font(baseFont1, 9f); //宋体 小五 document.open(); //document.newPage(); PdfPTable pdfPTable = new PdfPTable(1); // 为报告添加页眉,事件的发生是在生成报告之后,写入到硬盘之前 //Header headerTable = new Header(pdfPTable); //headerTable.setTableHeader(writer); //Footer footerTable = new Footer(pdfPTable); //footerTable.setTableFooter(writer, songti09); document.add(pdfPTable); for (int i = 0; i < 80; i++) { document.add(new Paragraph("the first page")); } //document.newPage(); document.add(new Paragraph("the second page")); document.close(); os.close(); } }
以上是关于java itextpdf怎么设置pdf页眉页脚的主要内容,如果未能解决你的问题,请参考以下文章