? ? ? ? 頁(yè)眉和頁(yè)腳通常是顯示文檔的附加信息,常用來插入頁(yè)碼秀姐、時(shí)間慈迈、日期、個(gè)人信息省有、微標(biāo)等痒留。特別是其中插入的頁(yè)碼,通過這種方式能夠快速定位所要查找的頁(yè)面蠢沿。本文將通過使用Java程序來演示如何在PDF文檔中添加頁(yè)眉頁(yè)腳伸头。
? ? ? ? Spire.PDF沒有提供直接添加頁(yè)眉頁(yè)腳到PDF的方法。為了實(shí)現(xiàn)此功能舷蟀,我首先創(chuàng)建了drawHeader和drawFooter方法恤磷。以下代碼適用于大部分Word轉(zhuǎn)換成的PDF文檔,其頁(yè)邊距默認(rèn)值為上/下72磅野宜,左/右90磅扫步。所以若文檔頁(yè)邊距有所差異,可通過調(diào)整下文代碼中“X”“Y”值來獲取最佳效果匈子。
使用工具:Free Spire.PDF for Java(免費(fèi)版)
Jar文件獲取及導(dǎo)入:
方法1:通過官網(wǎng)下載獲取jar包河胎。解壓文件后將lib文件夾下的Spire.Pdf.jar文件導(dǎo)入Java程序。(如下圖)
方法2:通過maven倉(cāng)庫(kù)安裝導(dǎo)入虎敦。具體安裝教程詳見此網(wǎng)頁(yè)游岳。
代碼示例:
import com.spire.pdf.PdfDocument;
import com.spire.pdf.automaticfields.PdfCompositeField;
import com.spire.pdf.automaticfields.PdfPageCountField;
import com.spire.pdf.automaticfields.PdfPageNumberField;
import com.spire.pdf.graphics.*;
import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Rectangle2D;
public class HeaderFooter {
public?static void main(String[] args) {
//創(chuàng)建pdfDocument對(duì)象,并加載PDF文檔
PdfDocument doc = new PdfDocument();
doc.loadFromFile("C:\\Users\\Test1\\Desktop\\sample.pdf");
//添加頁(yè)眉
drawHeader(doc);
//添加頁(yè)腳
drawFooter(doc);
//保存文檔
doc.saveToFile("output/添加頁(yè)眉頁(yè)腳.pdf");
??? }
public?static void drawHeader(PdfDocument doc) {
//獲取頁(yè)面尺寸
Dimension2D pageSize = doc.getPages().get(0).getSize();
//定義兩個(gè)float變量
float x = 90;
float y = 20;
for (int i = 0; i < doc.getPages().getCount(); i++) {
//添加圖片到指定位置
PdfImage headerImage = PdfImage.fromFile("C:\\Users\\Test1\\Desktop\\logo.png");
float width = headerImage.getWidth()/2;
float height =headerImage.getHeight()/2;
doc.getPages().get(i).getCanvas().drawImage(headerImage,x,? y, width, height);
//添加橫線至圖片下
PdfPen pen = new PdfPen(PdfBrushes.getGray(),0.5f);
doc.getPages().get(i).getCanvas().drawLine(pen, x, y + height +1,?pageSize.getWidth() - x, y + height +1);
??????? }
??? }
public? static voiddrawFooter(PdfDocument doc){
//獲取頁(yè)面大小
Dimension2D pageSize = doc.getPages().get(0).getSize();
//定義兩個(gè)float變量
float x = 90;
float y = (float) pageSize.getHeight()- 72;
for (int i = 0; i < doc.getPages().getCount(); i++){
//添加橫線到指定位置
PdfPen pen = new PdfPen(PdfBrushes.getGray(),0.5f);
doc.getPages().get(i).getCanvas().drawLine(pen, x, y,pageSize.getWidth() - x, y);
//添加文本到指定位置
?y = y + 8;
?PdfTrueTypeFont font=new PdfTrueTypeFont(new Font("Arial Unicode MS",Font.PLAIN,8),true);
?PdfStringFormat format =new PdfStringFormat(PdfTextAlignment.Left);
?String footerText ="姓名:Lily\n聯(lián)系電話:0101112222\n網(wǎng)站:www.Lilyhome.com";
?doc.getPages().get(i).getCanvas().drawString(footerText, font,PdfBrushes.getBlack(), x, y, format);
//添加頁(yè)碼
PdfPageNumberField number = new PdfPageNumberField();
PdfPageCountField count =new PdfPageCountField();
PdfCompositeFieldcompositeField =new PdfCompositeField(font, PdfBrushes.getBlack(),"第{0}頁(yè) 共{1}頁(yè)", number, count);compositeField.setStringFormat(new PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Top));
Dimension2D fontSize =font.measureString(compositeField.getText());
compositeField.setBounds(new Rectangle2D.Float((float) (pageSize.getWidth() - x -
fontSize.getWidth()), y, (float)fontSize.getWidth(), (float)fontSize.getHeight()));
compositeField.draw(doc.getPages().get(i).getCanvas());
??????? }
??? }
}
頁(yè)眉頁(yè)腳添加效果:
(本文完)