特别牛逼的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吧");
}
}



