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);


希望对您有帮助。

参考技术C

spire.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页眉页脚的主要内容,如果未能解决你的问题,请参考以下文章

springboot集成PDF导出

itext生成pdf(附带页眉,页脚,页码)

PDF文件页眉页脚设置介绍

Java 处理PDF文档:页眉页脚水印背景附件

PDF文件怎么添加页眉页脚,有什么简单的方法吗?

PDF文件怎么修改,怎么给PDF文件添加页眉页脚