1. 程式人生 > >Java中利用IText7生成PDF

Java中利用IText7生成PDF

下面介紹幾種IText7生成PDF的一些頁面元素的方法:

(官網http://developers.itextpdf.com/)

1、新增表格

import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.HorizontalAlignment;
import com.itextpdf.layout.property.UnitValue;
public class Test {
	 public static final String DEST2 = "E:\\project\\test4.pdf";//檔案路徑
	 public static void test(String dest) throws Exception{
   	 PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
	 Document doc = new Document(pdfDoc);//構建文件物件
     PdfFont sysFont = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);//中文字型
   	 Table table = new Table(new float[]{2,4,4}).setWidth(UnitValue.createPercentValue(100));//構建表格以100%的寬度
   	 Cell cell1=new Cell().add(new Paragraph("表格1")).setFont(sysFont);//向表格新增內容
   	 Cell cell2=new Cell().add(new Paragraph("表格2")).setFont(sysFont);
   	 Cell cell3=new Cell().add(new Paragraph("表格3")).setFont(sysFont);
   	 table.addCell(cell1);
   	 table.addCell(cell2);
   	 table.addCell(cell3);  
        doc.add(table.setHorizontalAlignment(HorizontalAlignment.CENTER));//將表格新增入文件並頁面居中
        doc.close();
   }
	public static void main(String[] args) throws Exception {
		test(DEST2);
	}

}

效果如下


其中new float[]{2,4,4}為設定每個表格的大小比例

2設定表格背景顏色以及邊框顏色

PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
	     Document doc = new Document(pdfDoc);
	     PdfFont sysFont = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
    	 Table table = new Table(new float[]{2,4,4}).setWidth(UnitValue.createPercentValue(70));
    	 Cell cell1=new Cell().add(new Paragraph("表格1")).setFont(sysFont).setBackgroundColor(new DeviceRgb(221,234,238));
    	 Cell cell2=new Cell().add(new Paragraph("表格2")).setFont(sysFont).setFontSize(10).setTextAlignment(TextAlignment.CENTER);
    	 Cell cell3=new Cell().add(new Paragraph("表格3")).setFont(sysFont).setBorder(new SolidBorder(new DeviceRgb(221,234,238), 1));
    	 Cell cell4=new Cell().add(new Paragraph("表格4")).setFont(sysFont).setBorder(Border.NO_BORDER);
    	 table.addCell(cell1);
    	 table.addCell(cell2);
    	 table.addCell(cell3);  
    	 table.addCell(cell4);
         doc.add(table);
         doc.close();

效果如下(顏色為rgb顏色)


3向表格裡新增文字和圖片

String Image = "E:\\project\\1.jpg";// 圖片路徑
		Table tab = new Table(new float[] { 6, 3 });
		tab.setWidthPercent(80);
		tab.setHorizontalAlignment(HorizontalAlignment.CENTER);
		Image Img = new Image(ImageDataFactory.create(Image));
		Cell cellimg = new Cell().add(Img.setAutoScale(true))// 向第一個表格中新增圖片
				.setBorder(new SolidBorder(new DeviceRgb(148,0,211), 3));
				//.setBorder(Border.NO_BORDER);
		tab.addCell(cellimg);
		Cell cell = new Cell();
		// 文字樣式
		Text text1 = new Text("人類的海洋").setFont(sysFont)
				.setFontSize((float) 7.41)
				.setFontColor(new DeviceRgb(46, 46, 46)).setBold();// setBold()字型為加粗
		Text text2 = new Text("保護地球是我們共同的責任,讓我們一起努力,讓我們的地球更美好")
				.setFont(sysFont).setFontSize((float) 7.41)
				.setFontColor(new DeviceRgb(46, 46, 46));

		cell.setTextAlignment(TextAlignment.LEFT)
				// 字型居左
				.add(new Paragraph().add(text1).add("\n").add(text2)
						.setFixedLeading(15))// setFixedLeading為設定行間距
				.setBorder(new SolidBorder(new DeviceRgb(139,0,139), 3))//邊界顏色,邊界寬度
				.setBackgroundColor(new DeviceRgb(244, 248, 250));

		tab.addCell(cell);
		doc.add(tab.setHorizontalAlignment(HorizontalAlignment.LEFT));// 將表格新增入文件並頁面居中
		doc.close();

效果如下(顏色為rgb顏色)


4新增空行

Paragraph blankParagraph1 = new Paragraph("");
		for (int i = 0; i < 25; i++) {
			doc.add(blankParagraph1);
		}

5向指定位置新增元素
float leftEdge = 66;
		doc.setLeftMargin(leftEdge);// 左側邊距
		Image titleImg1=null;
		try {
			titleImg1 = new Image(ImageDataFactory.create(Image),leftEdge,20);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		titleImg1.setWidth(262);
		doc.add(titleImg1);
效果如下(將圖片放置在距離頁面左側66px,距離底部20px的位置)