栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

ITestStudy学习

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ITestStudy学习

简:

特别牛逼的Java实现PDF工具,学会它,并且进行熟练使用



学习链接:

使用教程:https://www.imangodoc.com/14882.html


依赖
    

        
        
            com.itextpdf
            font-asian
            7.1.16
        


        
        
            com.itextpdf
            itext7-core
            7.1.16
            pom
        

        
        
            com.itextpdf
            itextpdf
            5.5.13.2
        
    


Java 实现:
import com.itextpdf.kernel.colors.ColorConstants;
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.element.Text;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.UnitValue;
import com.itextpdf.layout.property.VerticalAlignment;
import com.itextpdf.text.documentException;

import java.io.IOException;
import java.util.Date;

public class Test {

	public static void main(String[] args) throws IOException, documentException {

		String s = String.valueOf(new Date().getTime());

		String path = "/Users/yuanzhisong/Desktop/app/download_file" + s;

		// TODO:创建字体
		PdfFont baseFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", true);

		Pdfdocument pdfdocument = new Pdfdocument(new PdfWriter(path));
		document document = new document(pdfdocument);


		Text text = new Text("申请书");
		text.setFont(baseFont);
		text.setFontColor(ColorConstants.WHITE);

		// TODO: 标题
//		PdfFont font = PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD);
		Table titleTable = new Table(UnitValue.createPercentArray(1)).useAllAvailableWidth();
		titleTable.setHeight(25);
		titleTable.setBackgroundColor(ColorConstants.BLACK);

		Paragraph paragraph = new Paragraph();
		paragraph.setTextAlignment(TextAlignment.CENTER);
		paragraph.setBold();
		paragraph.setFontSize(12);
		paragraph.setBackgroundColor(ColorConstants.BLACK);

		paragraph.add(text);

		Cell add = new Cell().add(paragraph);

		titleTable.addCell(add);
		document.add(titleTable);


		// TODO: 创建第一个table
		Table table1 = new Table(new float[] {50, 100});
		table1.setBold();
		table1.setWidth(200);
		table1.setHeight(60);

		table1.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("所属").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
		table1.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("上海市开发部").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
		table1.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("氏名").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
		table1.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("袁志松").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));

		table1.setFixedPosition(30, 700, 200);

		document.add(table1);

		// TODO: 创建第二部分,文本加表格
		Table table2 = new Table(new float[] {50, 100});
		table2.setBold();
		table2.setWidth(200);
		table2.setHeight(60);

		table2.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("発行ナンバー").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.RIGHT)).setBorderLeft(null).setBorderBottom(null).setBorderTop(null));
		table2.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("1894").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
		table2.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("関連ナンバー").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.RIGHT)).setBorderLeft(null).setBorderBottom(null).setBorderTop(null));
		table2.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("H-1").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));

		table2.setFixedPosition(330, 710, 200);

		document.add(table2);


		// TODO: 创建第三部分,文本加表格
		Table table3 = new Table(new float[] {50, 100});
		table3.setBold();
		table3.setHeight(60);

		table3.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("NO.").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.RIGHT)).setBorderLeft(null).setBorderBottom(null).setBorderTop(null));
		table3.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
		table3.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("申请日").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.RIGHT)).setBorderLeft(null).setBorderBottom(null).setBorderTop(null));
		table3.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("2021/07/27").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));

		table3.setFixedPosition(330, 635, 200);

		document.add(table3);


		// TODO:创建第四部分,单纯表格(数据遍历出来)
		Table table4 = new Table(new float[] {280, 70, 70});
		table4.setBold();
		table4.setHeight(80);

		table4.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("数据库优化").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
		table4.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("数据").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
		table4.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("数据").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));

		table4.setFixedPosition(330, 540, 200);

		document.add(table4);


		// TODO: 创建第五部分,表格加文本(加印章!!!)
		Table table5 = new Table(new float[] {60, 60, 60, 60, 60, 60, 60});
		table5.setBold();

		// 第一排
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("代表取締役").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("取締役").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("rrr").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("財務経理部").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("人事総務部").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("受付").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("起案者").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));

		// 第二排数据
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章1").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章2").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章3").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章4").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章5").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章6").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章7").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));

		table5.setFixedPosition(110, 430, 420);

		document.add(table5);



		// TODO: 创建第六部分,表格加文本(加乱七八糟的东西)
		Table table6 = new Table(new float[] {60, 360});
		table6.setBold();

		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("捺印 文書名").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据1").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印 種").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据2").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("提出先").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据3").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));

		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("返答日").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据4").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("使用目的").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据5").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("人事総務部").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(50));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据6").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(50));

		table6.setFixedPosition(50, 150, 480);

		document.add(table6);

		document.close();

		System.out.println("成功啦,赶紧查看你的PDF吧");
	}
}

创建横线遇到的问题:

格局太小,之前没有想过PdfCanvas要变成照片形式利用起来,于是创建了多个PdfCanvas,导致无法将多个PdfCanvas变成一个PdfCanvas利用,代码如下:

// TODO: 实现印章
		PdfPage pdfPage = pdfdocument.getPage(1);
		PdfCanvas pdfCanvas1 = new PdfCanvas(pdfPage);

		// 直线问题
		// 第一个
		pdfCanvas1.moveTo(299, 475);
		PdfCanvas line = pdfCanvas1.lineTo(342, 475);
		line.setLineWidth(500f);
		line.setColor(ColorConstants.RED, true);

		pdfCanvas1.fill();

		// 第二个
		PdfCanvas pdfCanvas2 = new PdfCanvas(pdfPage);
		pdfCanvas2.moveTo(297, 462);
		PdfCanvas line2 = pdfCanvas2.lineTo(344, 462);
		line2.setLineWidth(500f);
		line2.setColor(ColorConstants.RED, true);

		pdfCanvas2.fill();

		// 第三个
		PdfCanvas pdfCanvas3 = new PdfCanvas(pdfPage);
		pdfCanvas3.moveTo(301, 450);
		PdfCanvas line3 = pdfCanvas3.lineTo(340, 450);
		line3.setLineWidth(500f);
		line3.setColor(ColorConstants.RED, true);

		pdfCanvas3.fill();

这样就变成了了:多条直线是于多个PdfCanvas组成的,没法将其变成照片,难道三个一起变吗?

不好实现,不过暂时看还是蛮好看的

于是进行代码优化:

// TODO: 实现印章
		PdfPage pdfPage = pdfdocument.getPage(1);
		PdfCanvas pdfCanvas1 = new PdfCanvas(pdfPage);

		// 直线问题
		// 第一个
		pdfCanvas1.moveTo(299, 475);
		pdfCanvas1.lineTo(342, 475).setColor(ColorConstants.RED, true);
		pdfCanvas1.fill();

		// 第二个
		pdfCanvas1.moveTo(297, 462);
		pdfCanvas1.lineTo(344, 462).setColor(ColorConstants.RED, true);
		pdfCanvas1.fill();

		// 第三个
		pdfCanvas1.moveTo(301, 450);
		pdfCanvas1.lineTo(340, 450).setColor(ColorConstants.RED, true);
		pdfCanvas1.fill();

叫自己一声小天才,这也可以


保存代码,明天干
import com.itextpdf.io.font.otf.GlyphLine;
import com.itextpdf.kernel.colors.Color;
import com.itextpdf.kernel.colors.ColorConstants;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.Pdfdocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.annot.PdfCaretAnnotation;
import com.itextpdf.kernel.pdf.annot.PdfCircleAnnotation;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
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.element.Text;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.UnitValue;
import com.itextpdf.layout.property.VerticalAlignment;
import com.itextpdf.text.documentException;

import java.io.IOException;
import java.util.Date;

public class Test {

	public static void main(String[] args) throws IOException, documentException {

		String s = String.valueOf(new Date().getTime());

		String path = "D:\ITestPDF\" + s + ".PDF";

		// TODO:创建字体
		PdfFont baseFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", true);

		Pdfdocument pdfdocument = new Pdfdocument(new PdfWriter(path));
		document document = new document(pdfdocument);


		Text text = new Text("申请书");
		text.setFont(baseFont);
		text.setFontColor(ColorConstants.WHITE);

		// TODO: 标题
//		PdfFont font = PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD);
		Table titleTable = new Table(UnitValue.createPercentArray(1)).useAllAvailableWidth();
		titleTable.setHeight(25);
		titleTable.setBackgroundColor(ColorConstants.BLACK);

		Paragraph paragraph = new Paragraph();
		paragraph.setTextAlignment(TextAlignment.CENTER);
		paragraph.setBold();
		paragraph.setFontSize(12);
		paragraph.setBackgroundColor(ColorConstants.BLACK);

		paragraph.add(text);

		Cell add = new Cell().add(paragraph);

		titleTable.addCell(add);
		document.add(titleTable);


		// TODO: 创建第一个table
		Table table1 = new Table(new float[] {50, 100});
		table1.setBold();
		table1.setWidth(200);
		table1.setHeight(60);

		table1.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("所属").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
		table1.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("上海市开发部").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
		table1.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("氏名").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
		table1.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("袁志松").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));

		table1.setFixedPosition(30, 700, 200);

		document.add(table1);

		// TODO: 创建第二部分,文本加表格
		Table table2 = new Table(new float[] {50, 100});
		table2.setBold();
		table2.setWidth(200);
		table2.setHeight(60);

		table2.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("発行ナンバー").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.RIGHT)).setBorderLeft(null).setBorderBottom(null).setBorderTop(null));
		table2.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("1894").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
		table2.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("関連ナンバー").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.RIGHT)).setBorderLeft(null).setBorderBottom(null).setBorderTop(null));
		table2.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("H-1").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));

		table2.setFixedPosition(330, 710, 200);

		document.add(table2);


		// TODO: 创建第三部分,文本加表格
		Table table3 = new Table(new float[] {50, 100});
		table3.setBold();
		table3.setHeight(60);

		table3.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("NO.").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.RIGHT)).setBorderLeft(null).setBorderBottom(null).setBorderTop(null));
		table3.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
		table3.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("申请日").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.RIGHT)).setBorderLeft(null).setBorderBottom(null).setBorderTop(null));
		table3.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("2021/07/27").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));

		table3.setFixedPosition(330, 635, 200);

		document.add(table3);


		// TODO:创建第四部分,单纯表格(数据遍历出来)
		Table table4 = new Table(new float[] {280, 70, 70});
		table4.setBold();
		table4.setHeight(80);

		table4.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("数据库优化").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
		table4.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("数据").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
		table4.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("数据").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));

		table4.setFixedPosition(330, 540, 200);

		document.add(table4);


		// TODO: 创建第五部分,表格加文本(加印章!!!)
		Table table5 = new Table(new float[] {60, 60, 60, 60, 60, 60, 60});
		table5.setBold();

		// 第一排
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("代表取締役").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("取締役").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("rrr").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("財務経理部").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("人事総務部").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("受付").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("起案者").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));

		// 第二排数据
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章1").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章2").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章3").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章5").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章6").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
		table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章7").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));

		table5.setFixedPosition(110, 430, 420);

		document.add(table5);



		// TODO: 创建第六部分,表格加文本(加乱七八糟的东西)
		Table table6 = new Table(new float[] {60, 360});
		table6.setBold();

		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("捺印 文書名").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据1").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印 種").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据2").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("提出先").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据3").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));

		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("返答日").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据4").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("使用目的").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据5").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("人事総務部").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(50));
		table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据6").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(50));

		table6.setFixedPosition(50, 150, 480);

		document.add(table6);

		// TODO: 实现印章
		PdfPage pdfPage = pdfdocument.getPage(1);
		PdfCanvas pdfCanvas1 = new PdfCanvas(pdfPage);

		// 直线问题
		// 第一个
		pdfCanvas1.moveTo(299, 475);
		pdfCanvas1.lineTo(342, 475).setColor(ColorConstants.RED, true);
		pdfCanvas1.fill();

		// 第二个
		pdfCanvas1.moveTo(297, 462);
		pdfCanvas1.lineTo(344, 462).setColor(ColorConstants.RED, true);
		pdfCanvas1.fill();

		// 第三个
		pdfCanvas1.moveTo(301, 450);
		pdfCanvas1.lineTo(340, 450).setColor(ColorConstants.RED, true);
		pdfCanvas1.fill();

		// 空心圆
		Rectangle rectangle = new Rectangle(295, 440, 50, 50);
		rectangle.intersectsLine(10, 10, 10, 10);
		PdfCircleAnnotation annotation = new PdfCircleAnnotation(rectangle);
		annotation.setColor(ColorConstants.RED);

		pdfdocument.getPage(1).addAnnotation(annotation);

		// 文本
		Paragraph paragraph1 = new Paragraph(new Text("经理").setFont(baseFont));
		paragraph1.setFixedPosition(1, 308, 472, 200);
		paragraph.setFontSize(10);
		document.add(paragraph1);

		Paragraph paragraph2 = new Paragraph(new Text("21-08-08").setFont(baseFont));
		paragraph2.setFixedPosition(1, 300, 459, 200);
		document.add(paragraph2);
		Paragraph paragraph3 = new Paragraph(new Text("申请").setFont(baseFont));
		paragraph3.setFixedPosition(1, 308, 447, 200);
		document.add(paragraph3);

		// TODO: 第二种操作
		// 画圆:外圆
		pdfCanvas1.circle(260, 465, 26);
		pdfCanvas1.fill();
		// 内圆
		pdfCanvas1.circle(260, 465, 24.7).setColor(ColorConstants.WHITE, true);
		pdfCanvas1.fill();

		// 直线问题
		// 第一个
		pdfCanvas1.moveTo(238, 475);
		pdfCanvas1.lineTo(283, 475).setColor(ColorConstants.RED, true);
		pdfCanvas1.fill();

		// 第二个
		pdfCanvas1.moveTo(236, 462);
		pdfCanvas1.lineTo(285, 462).setColor(ColorConstants.RED, true);
		pdfCanvas1.fill();

		// 第三个
		pdfCanvas1.moveTo(240, 450);
		pdfCanvas1.lineTo(280, 450).setColor(ColorConstants.RED, true);
		pdfCanvas1.fill();

		pdfCanvas1.beginText();
		pdfCanvas1.setFontAndSize(baseFont, 11);
		pdfCanvas1.moveText(246, 475).showText("CEO");
		pdfCanvas1.endText();

		pdfCanvas1.beginText();
		pdfCanvas1.setFontAndSize(baseFont, 11);
		pdfCanvas1.moveText(241, 462).showText("21-08-08");
		pdfCanvas1.endText();

		pdfCanvas1.beginText();
		pdfCanvas1.setFontAndSize(baseFont, 11);
		pdfCanvas1.moveText(248, 452).showText("反驳");
		pdfCanvas1.endText();

		// 文本(方法过时,第二种方法)
//		Rectangle[] columns = {new Rectangle(6, 650, 100, 30),
//				new Rectangle(50, 500, 100, 100),};  //几个Rectangle对应几个位置
//		pdfCanvas1.rectangle(columns[0]);
//		pdfCanvas1.stroke();
//		Canvas canvas = new Canvas(pdfCanvas1, pdfdocument, columns[0]);
//		Paragraph p = new Paragraph("hssssas").setFont(baseFont).setBold().setFontSize(10);   //Bold为设置粗体
//		canvas.add(p);

		document.close();

		System.out.println("成功啦,赶紧查看你的PDF吧");
	}
}s

尾声:

最后前端几行代码实现了,搞不搞这么复杂的PDF,为什么需要后端一点一点画出来,太扎心了

很疑惑,Java实现PDF的意义在哪里,技术难道不应该是谁方便谁做吗,后端做前端实现不了的,前端做后端实现不了的

一个星期的任务就这么……

import com.itextpdf.kernel.colors.ColorConstants;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.Pdfdocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.annot.PdfCircleAnnotation;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;
import com.itextpdf.layout.document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Image;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.element.Text;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.UnitValue;
import com.itextpdf.layout.property.VerticalAlignment;
import com.itextpdf.text.documentException;

import java.io.IOException;
import java.util.Date;

public class Test {

   public static void main(String[] args) throws IOException, documentException {

      String s = String.valueOf(new Date().getTime());

      String path = "/Users/yuanzhisong/Desktop/app/download_file" + s + ".pdf";

      // TODO:创建字体
      PdfFont baseFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", true);

      Pdfdocument pdfdocument = new Pdfdocument(new PdfWriter(path));
      document document = new document(pdfdocument);


      Text text = new Text("申请书");
      text.setFont(baseFont);
      text.setFontColor(ColorConstants.WHITE);

      // TODO: 标题
//    PdfFont font = PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD);
      Table titleTable = new Table(UnitValue.createPercentArray(1)).useAllAvailableWidth();
      titleTable.setHeight(25);
      titleTable.setBackgroundColor(ColorConstants.BLACK);

      Paragraph paragraph = new Paragraph();
      paragraph.setTextAlignment(TextAlignment.CENTER);
      paragraph.setBold();
      paragraph.setFontSize(12);
      paragraph.setBackgroundColor(ColorConstants.BLACK);

      paragraph.add(text);

      Cell add = new Cell().add(paragraph);

      titleTable.addCell(add);
      document.add(titleTable);


      // TODO: 创建第一个table
      Table table1 = new Table(new float[] {50, 100});
      table1.setBold();
      table1.setWidth(200);
      table1.setHeight(60);

      table1.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("所属").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
      table1.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("上海市开发部").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
      table1.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("氏名").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
      table1.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("袁志松").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));

      table1.setFixedPosition(30, 700, 200);

      document.add(table1);

      // TODO: 创建第二部分,文本加表格
      Table table2 = new Table(new float[] {50, 100});
      table2.setBold();
      table2.setWidth(200);
      table2.setHeight(60);

      table2.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("発行ナンバー").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.RIGHT)).setBorderLeft(null).setBorderBottom(null).setBorderTop(null));
      table2.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("1894").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
      table2.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("関連ナンバー").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.RIGHT)).setBorderLeft(null).setBorderBottom(null).setBorderTop(null));
      table2.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("H-1").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));

      table2.setFixedPosition(330, 710, 200);

      document.add(table2);


      // TODO: 创建第三部分,文本加表格
      Table table3 = new Table(new float[] {50, 100});
      table3.setBold();
      table3.setHeight(60);

      table3.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("NO.").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.RIGHT)).setBorderLeft(null).setBorderBottom(null).setBorderTop(null));
      table3.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
      table3.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("申请日").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.RIGHT)).setBorderLeft(null).setBorderBottom(null).setBorderTop(null));
      table3.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("2021/07/27").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));

      table3.setFixedPosition(330, 635, 200);

      document.add(table3);


      // TODO:创建第四部分,单纯表格(数据遍历出来)
      Table table4 = new Table(new float[] {280, 70, 70});
      table4.setBold();
      table4.setHeight(80);

      table4.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("数据库优化").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
      table4.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("数据").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));
      table4.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("数据").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)));

      table4.setFixedPosition(330, 540, 200);

      document.add(table4);


      // TODO: 创建第五部分,表格加文本(加印章!!!)
      Table table5 = new Table(new float[] {60, 60, 60, 60, 60, 60, 60});
      table5.setBold();

      // 第一排
      table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("代表取締役").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
      table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("取締役").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
      table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("rrr").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
      table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("財務経理部").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
      table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("人事総務部").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
      table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("受付").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));
      table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("起案者").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(20));

      // 第二排数据
      table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章1").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
      table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章2").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
      table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章3").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
      table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章4").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
      table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章5").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
      table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章6").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
      table5.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印章7").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));

      table5.setFixedPosition(110, 430, 420);

      document.add(table5);



      // TODO: 创建第六部分,表格加文本(加乱七八糟的东西)
      Table table6 = new Table(new float[] {60, 360});
      table6.setBold();

      table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("捺印 文書名").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
      table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据1").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
      table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("印 種").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
      table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据2").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
      table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("提出先").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
      table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据3").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));

      table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("返答日").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
      table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据4").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(30));
      table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("使用目的").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
      table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据5").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(70));
      table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("人事総務部").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(50));
      table6.addCell(new Cell(1,1).setVerticalAlignment(VerticalAlignment.MIDDLE).add(new Paragraph("大量数据6").setFont(baseFont).setFontSize(9).setTextAlignment(TextAlignment.CENTER)).setHeight(50));

      table6.setFixedPosition(50, 150, 480);

      document.add(table6);


      // TODO: 实现印章
      PdfPage pdfPage = pdfdocument.getPage(1);
      PdfCanvas pdfCanvas1 = new PdfCanvas(pdfPage);

      // 直线问题
      // 第一个
      pdfCanvas1.moveTo(299, 475);
      pdfCanvas1.lineTo(342, 475).setColor(ColorConstants.RED, true);
      pdfCanvas1.fill();

      // 第二个
      pdfCanvas1.moveTo(297, 462);
      pdfCanvas1.lineTo(344, 462).setColor(ColorConstants.RED, true);
      pdfCanvas1.fill();

      // 第三个
      pdfCanvas1.moveTo(301, 450);
      pdfCanvas1.lineTo(340, 450).setColor(ColorConstants.RED, true);
      pdfCanvas1.fill();

      // 空心圆
      Rectangle rectangle = new Rectangle(295, 440, 50, 50);
      rectangle.intersectsLine(10, 10, 10, 10);
      PdfCircleAnnotation annotation = new PdfCircleAnnotation(rectangle);
      annotation.setColor(ColorConstants.RED);

      pdfdocument.getPage(1).addAnnotation(annotation);

      // 文本
      Paragraph paragraph1 = new Paragraph(new Text("经理").setFont(baseFont));
      paragraph1.setFixedPosition(1, 308, 472, 200);
      paragraph.setFontSize(10);
      document.add(paragraph1);

      Paragraph paragraph2 = new Paragraph(new Text("21-08-08").setFont(baseFont));
      paragraph2.setFixedPosition(1, 300, 459, 200);
      document.add(paragraph2);
      Paragraph paragraph3 = new Paragraph(new Text("申请").setFont(baseFont));
      paragraph3.setFixedPosition(1, 308, 447, 200);
      document.add(paragraph3);

      // TODO: 第二种操作
      // 画圆:外圆
      pdfCanvas1.circle(260, 465, 26);
      pdfCanvas1.fill();
      // 内圆
      pdfCanvas1.circle(260, 465, 24.7).setColor(ColorConstants.WHITE, true);
      pdfCanvas1.fill();

      // 直线问题
      // 第一个
      pdfCanvas1.moveTo(238, 475);
      pdfCanvas1.lineTo(283, 475).setColor(ColorConstants.RED, true);
      pdfCanvas1.fill();

      // 第二个
      pdfCanvas1.moveTo(236, 462);
      pdfCanvas1.lineTo(285, 462).setColor(ColorConstants.RED, true);
      pdfCanvas1.fill();

      // 第三个
      pdfCanvas1.moveTo(240, 450);
      pdfCanvas1.lineTo(280, 450).setColor(ColorConstants.RED, true);
      pdfCanvas1.fill();

      pdfCanvas1.beginText();
      pdfCanvas1.setFontAndSize(baseFont, 11);
      pdfCanvas1.moveText(246, 475).showText("CEO");
      pdfCanvas1.endText();

      pdfCanvas1.beginText();
      pdfCanvas1.setFontAndSize(baseFont, 11);
      pdfCanvas1.moveText(241, 462).showText("21-08-08");
      pdfCanvas1.endText();

      pdfCanvas1.beginText();
      pdfCanvas1.setFontAndSize(baseFont, 11);
      pdfCanvas1.moveText(248, 452).showText("反驳");
      pdfCanvas1.endText();



      // TODO:转为照片
//    Rectangle boundingBox = new Rectangle(100,200,200,200);
//    PdfFormXObject xObject = new PdfFormXObject(boundingBox);
//    // Make sure the XObject gets added to the document
//    xObject.makeIndirect(pdfdocument);
//    //Create a canvas from the XObject
//    PdfCanvas canvas = new PdfCanvas(xObject, pdfdocument);
//    canvas.setStrokeColor(ColorConstants.BLUE).setLineWidth(3f).rectangle(35, 480, 30, 30).stroke();
//    canvas.beginText();
//    canvas.setFontAndSize(baseFont, 11);
//    canvas.showText("900000");
//    canvas.endText();
//    Image rect = new Image(xObject);

      Rectangle boundingBox = new Rectangle(20,470,50,50);
      PdfFormXObject xObject = new PdfFormXObject(boundingBox);
      xObject.makeIndirect(pdfdocument);//Make sure the XObject gets added to the document
      PdfCanvas canvas = new PdfCanvas(xObject, pdfdocument);//Create a canvas from the XObject
      canvas.beginText();
      canvas.setFontAndSize(baseFont, 11);
      canvas.showText("900000");
      canvas.endText();
//    canvas.setStrokeColor(ColorConstants.BLUE).setLineWidth(3f).rectangle(35, 480, 30, 30).stroke();
      // 画圆:外圆
      canvas.circle(100, 200, 26).setColor(ColorConstants.RED, true);
      canvas.fill();
      // 内圆
      canvas.setColor(ColorConstants.BLUE, true).circle(100, 180, 24.7);
      canvas.fill();

      pdfCanvas1.moveTo(100, 475);
      pdfCanvas1.lineTo(500, 475).setColor(ColorConstants.GREEN, true);
      pdfCanvas1.fill();

      Image rect = new Image(xObject);
//    table.addCell(rect);

      Table table7 = new Table(new float[] {20});
      table7.setBold();
      table7.setHeight(160);
      table7.setFixedPosition(50, 50, 70);
      table7.addCell(new Cell().add(rect));
      document.add(table7);



      document.close();

      System.out.println("成功啦,赶紧查看你的PDF吧");
   }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/358192.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号