java: create pdf using itextpdf 2.1.7 or 5.2.1 or 7.2.1 Library
/** * 版权所有 2022 涂聚文有限公司 * 许可信息查看: * 描述: * IDE:IntelliJ IDEA 2021.2.3 * 数据库:MSSQL Server 2019 * OS:windows 10 x64 * 历史版本: JDK 14.02 * 2022-1-12 创建者 geovindu * 2022-1-15 添加 Lambda * 2022-1-15 修改:date * 接口类 mssql-jdbc-9.4.1.jre16.jar. * * 2022-1-15 修改者:Geovin Du * 生成API帮助文档的指令: *javadoc - -encoding Utf-8 -d apidoc iTextHelper.java https://mvnrepository.com/artifact/com.itextpdf https://mvnrepository.com/artifact/com.lowagie/itext/2.1.7 https://mvnrepository.com/artifact/com.lowagie/itext/4.2.1 https://sourceforge.net/projects/itext/ https://github.com/itext java write stringbuilder to file http://guava-libraries.googlecode.com/ https://github.com/google/guava Files.write(stringBuilder, file, Charsets.UTF_8) http://commons.apache.org/io/ You could use the Apache Commons IO library, which gives you FileUtils: FileUtils.writeStringToFile(file, stringBuilder.toString(), Charset.forName("UTF-8")) https://github.com/weiyeh/iText-4.2.0 https://github.com/ymasory/iText-4.2.0 https://mvnrepository.com/artifact/com.itextpdf/html2pdf http://www.java2s.com/Code/Jar/i/Downloaditextpdf541jar.htm http://www.java2s.com/Code/Jar/i/Downloaditextrtf215jar.htm https://mvnrepository.com/artifact/com.lowagie/itext-rtf/2.1.7 http://www.java2s.com/Code/Jar/i/Downloaditextasian217jar.htm https://mvnrepository.com/artifact/com.itextpdf/itext-asian/5.2.0 https://mvnrepository.com/artifact/com.itextpdf https://mvnrepository.com/artifact/com.itextpdf.tool http://www.java2s.com/Code/Jar/i/itext.htm * */ package Geovin.Common; import java.awt.Color; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; /* 5.4.1 import com.itextpdf.io.*; import com.itextpdf.pdfa.*; import com.itextpdf.test.*; import com.itextpdf.commons.*; import com.itextpdf.pdfa.PdfADocument; import com.itextpdf.barcodes.*; import com.itextpdf.svg.*; import com.itextpdf.forms.*; import com.itextpdf.kernel.*; import com.itextpdf.layout.*; import com.itextpdf.layout.font.*; import com.itextpdf.styledxmlparser.*; import com.itextpdf.signatures.*; import com.itextpdf.text.*; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.Image; import com.itextpdf.text.Phrase; import com.itextpdf.text.Header; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.ColumnText; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.text.pdf.TextField; import com.itextpdf.text.*; */ import Geovin.Model.Person; import com.lowagie.text.BadElementException; import com.lowagie.text.Cell; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Element; import com.lowagie.text.Font; import com.lowagie.text.PageSize; import com.lowagie.text.Paragraph; import com.lowagie.text.Phrase; import com.lowagie.text.Table; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.pdf.PdfWriter; import com.lowagie.tools.*; import com.lowagie.text.pdf.fonts.*; /** *itext-rtf 2.1.7 * itextasian 2.1.7 *itextpdf 2.1.7 * @author geovindu * @version 1.0 * */ public class iTextHelper { /** * * * * */ public void Create() throws DocumentException, IOException { // 创建Document对象(页面的大小为A4,左、右、上、下的页边距为10) Document document = new Document(PageSize.A4, 10, 10, 10, 10); // 建立书写器 PdfWriter.getInstance(document, new FileOutputStream("src/geovindu.PDF")); // 设置相关的参数 setParameters(document, "开发者测试", "涂聚文测试", "测试 开发者 调试", "geovindu", "geovindu"); // 打开文档 document.open(); // 使用iTextAsian.jar中的字体 BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); Font font = new Font(baseFont); List<Person> personList = new ArrayList<Person>(); // 循环添加对象 for (int i = 0; i < 5; i++) { Person user = new Person(); user.setLastName("geovindu:"+i); user.setFirstName("开发者测试"+i); user.setSex("测试"+i); personList.add(user); } Table table = setTable(personList); document.add(new Paragraph("用户信息如下:",setFont())); document.add(table); // 关闭文档 document.close(); } /** * * * */ public Table setTable(List<Person> personList) throws BadElementException{ //创建一个有3列的表格 Table table = new Table(3); table.setBorderWidth(1); table.setBorderColor(new Color(0, 0, 255)); table.setPadding(5); table.setSpacing(5); // 创建表头 Cell cell1 = setTableHeader("姓"); Cell cell2 = setTableHeader("名"); Cell cell3 = setTableHeader("性别"); table.addCell(cell1); table.addCell(cell2); table.addCell(cell3); // 添加此代码后每页都会显示表头 table.endHeaders(); for (int i = 0; i < personList.size(); i++) { Cell celli1 = setTableHeader(personList.get(i).getLastName()); Cell celli2 = setTableHeader(personList.get(i).getFirstName()); Cell celli3 = setTableHeader(personList.get(i).getSex()); table.addCell(celli1); table.addCell(celli2); table.addCell(celli3); } return table; } /** * itextasian 2.1.7 * * */ public Font setFont(){ BaseFont baseFont = null; try { baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Font font = new Font(baseFont, 8, Font.NORMAL,Color.BLUE); return font; } /** * 设置cell * @param name * @return * @throws BadElementException */ public Cell setTableHeader(String name) throws BadElementException { Cell cell = new Cell(new Phrase(name, setFont())); //单元格水平对齐方式 cell.setHorizontalAlignment(Element.ALIGN_CENTER); //单元格垂直对齐方式 cell.setVerticalAlignment(Element.ALIGN_CENTER); // cell.setHeader(true); //cell.setBackgroundColor(Color.RED); return cell; } /** * 设置相关参数 * @param document * @return */ public Document setParameters(Document document,String title,String subject,String keywords,String author, String creator){ // 设置标题 document.addTitle(title); // 设置主题 document.addSubject(subject); // 设置作者 document.addKeywords(keywords); // 设置作者 document.addAuthor(author); // 设置创建者 document.addCreator(creator); // 设置生产者 document.addProducer(); // 设置创建日期 document.addCreationDate(); return document; } }
https://api.itextpdf.com/iText5/java/5.5.9/
5.2.0
/** * 版权所有 2022 涂聚文有限公司 * 许可信息查看: * 描述: * IDE:IntelliJ IDEA 2021.2.3 * 数据库:MSSQL Server 2019 * OS:windows 10 x64 * 历史版本: JDK 14.02 * 2022-1-12 创建者 geovindu * 2022-1-15 添加 Lambda * 2022-1-15 修改:date * 接口类 mssql-jdbc-9.4.1.jre16.jar. * * 2022-1-15 修改者:Geovin Du * 生成API帮助文档的指令: *javadoc - -encoding Utf-8 -d apidoc DuiTextPdfHelper.java * * https://mvnrepository.com/artifact/com.itextpdf https://mvnrepository.com/artifact/com.lowagie/itext/2.1.7 https://mvnrepository.com/artifact/com.lowagie/itext/4.2.1 https://sourceforge.net/projects/itext/ https://github.com/itext java write stringbuilder to file http://guava-libraries.googlecode.com/ https://github.com/google/guava Files.write(stringBuilder, file, Charsets.UTF_8) http://commons.apache.org/io/ You could use the Apache Commons IO library, which gives you FileUtils: FileUtils.writeStringToFile(file, stringBuilder.toString(), Charset.forName("UTF-8")) https://github.com/weiyeh/iText-4.2.0 https://github.com/ymasory/iText-4.2.0 https://mvnrepository.com/artifact/com.itextpdf/html2pdf http://www.java2s.com/Code/Jar/i/Downloaditextpdf541jar.htm http://www.java2s.com/Code/Jar/i/Downloaditextrtf215jar.htm https://mvnrepository.com/artifact/com.lowagie/itext-rtf/2.1.7 http://www.java2s.com/Code/Jar/i/Downloaditextasian217jar.htm https://mvnrepository.com/artifact/com.lowagie/itext https://mvnrepository.com/artifact/com.itextpdf/itext-asian/5.2.0 https://mvnrepository.com/artifact/com.itextpdf https://mvnrepository.com/artifact/com.itextpdf.tool http://www.java2s.com/Code/Jar/i/itext.htm https://www.vogella.com/tutorials/JavaPDF/article.html * */ package Geovin.Common; import java.awt.Color; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import com.itextpdf.io.*; import com.itextpdf.pdfa.*; import com.itextpdf.test.*; import com.itextpdf.pdfa.PdfADocument; import com.itextpdf.barcodes.*; import com.itextpdf.svg.*; import com.itextpdf.forms.*; import com.itextpdf.kernel.*; import com.itextpdf.layout.*; import com.itextpdf.layout.font.*; import com.itextpdf.styledxmlparser.*; import com.itextpdf.signatures.*; import com.itextpdf.text.*; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.Image; import com.itextpdf.text.Phrase; import com.itextpdf.text.Header; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.ColumnText; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.text.pdf.TextField; import com.itextpdf.text.Anchor; import com.itextpdf.text.BadElementException; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Chapter; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.List; import com.itextpdf.text.ListItem; import com.itextpdf.text.Paragraph; import com.itextpdf.text.Phrase; import com.itextpdf.text.Section; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; /** * iText 5.2.0 * @author geovindu * @version 1.0 * * * * */ public class DuiTextPdfHelper { private static String FILE = "src/geovinduPdf.pdf"; private static Font catFont = new Font(Font.FontFamily.TIMES_ROMAN, 18, Font.BOLD); private static Font redFont = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.NORMAL, BaseColor.RED); private static Font subFont = new Font(Font.FontFamily.TIMES_ROMAN, 16, Font.BOLD); private static Font smallBold = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD); public static void CreatePdf() { try { Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(FILE)); document.open(); addMetaData(document); addTitlePage(document); addContent(document); document.close(); } catch (Exception e) { e.printStackTrace(); } } // iText allows to add metadata to the PDF which can be viewed in your Adobe // Reader // under File -> Properties private static void addMetaData(Document document) { document.addTitle("My first PDF"); document.addSubject("Using iText"); document.addKeywords("Java, PDF, iText"); document.addAuthor("geovindu"); document.addCreator("geovindu"); } private static void addTitlePage(Document document) throws DocumentException { Paragraph preface = new Paragraph(); // We add one empty line addEmptyLine(preface, 1); // Lets write a big header preface.add(new Paragraph("Title of the document", catFont)); addEmptyLine(preface, 1); // Will create: Report generated by: _name, _date preface.add(new Paragraph( "Report generated by: " + System.getProperty("user.name") + ", " + new Date(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ smallBold)); addEmptyLine(preface, 3); preface.add(new Paragraph( "This document describes something which is very important ", smallBold)); addEmptyLine(preface, 8); preface.add(new Paragraph( "This document is a preliminary version and not subject to your license agreement or any other agreement with vogella.com ;-).", redFont)); document.add(preface); // Start a new page document.newPage(); } private static void addContent(Document document) throws DocumentException { Anchor anchor = new Anchor("First Chapter", catFont); anchor.setName("First Chapter"); // Second parameter is the number of the chapter Chapter catPart = new Chapter(new Paragraph(anchor), 1); Paragraph subPara = new Paragraph("Subcategory 1", subFont); Section subCatPart = catPart.addSection(subPara); subCatPart.add(new Paragraph("Hello")); subPara = new Paragraph("Subcategory 2", subFont); subCatPart = catPart.addSection(subPara); subCatPart.add(new Paragraph("Paragraph 1")); subCatPart.add(new Paragraph("Paragraph 2")); subCatPart.add(new Paragraph("Paragraph 3")); // add a list createList(subCatPart); Paragraph paragraph = new Paragraph(); addEmptyLine(paragraph, 5); subCatPart.add(paragraph); // add a table createTable(subCatPart); // now add all this to the document document.add(catPart); // Next section anchor = new Anchor("Second Chapter", catFont); anchor.setName("Second Chapter"); // Second parameter is the number of the chapter catPart = new Chapter(new Paragraph(anchor), 1); subPara = new Paragraph("Subcategory", subFont); subCatPart = catPart.addSection(subPara); subCatPart.add(new Paragraph("This is a very important message")); // now add all this to the document document.add(catPart); } private static void createTable(Section subCatPart) throws BadElementException { PdfPTable table = new PdfPTable(3); // t.setBorderColor(BaseColor.GRAY); // t.setPadding(4); // t.setSpacing(4); // t.setBorderWidth(1); PdfPCell c1 = new PdfPCell(new Phrase("Table Header 1")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); c1 = new PdfPCell(new Phrase("Table Header 2")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); c1 = new PdfPCell(new Phrase("Table Header 3")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); table.setHeaderRows(1); table.addCell("1.0"); table.addCell("1.1"); table.addCell("1.2"); table.addCell("2.1"); table.addCell("2.2"); table.addCell("2.3"); subCatPart.add(table); } private static void createList(Section subCatPart) { List list = new List(true, false, 10); list.add(new ListItem("First point")); list.add(new ListItem("Second point")); list.add(new ListItem("Third point")); subCatPart.add(list); } private static void addEmptyLine(Paragraph paragraph, int number) { for (int i = 0; i < number; i++) { paragraph.add(new Paragraph(" ")); } } }
https://riptutorial.com/Download/itext.pdf
https://www.netjstech.com/2018/10/creating-pdf-in-java-using-itext.html
https://github.com/itext/i7js-examples/blob/develop/src/main/java/com/itextpdf/samples/sandbox/layout/ParagraphTextWithStyle.java
https://kb.itextsupport.com/home/it7kb/ebooks/itext-7-jump-start-tutorial-for-java/chapter-7-creating-pdf-ua-and-pdf-a-documents
https://www.tutorialspoint.com/itext/itext_adding_table.htm
https://api.itextpdf.com/iText7/java/
7.2.7
/** * 版权所有 2021 涂聚文有限公司 * 许可信息查看: * 描述: * * 数据库:Ms SQL server 2019 * IDE: Eclipse IDE for Enterprise Java and Web Developers - 2021-09 * OS: Windows 10 x64 * IDE: Eclipse IDE for Enterprise Java and Web Developers - 2021-09 * 历史版本: JDK 14.0.2 * 2021-12-12 创建者 geovindu * 2021-12-15 添加 Lambda * 2021-12-15 修改:date * 接口类 mssql-jdbc-9.4.1.jre16.jar. * 数据库:MSSQL Server 2019 * 2021-12-15 修改者:Geovin Du * 生成API帮助文档的指令: *javadoc - -encoding Utf-8 -d apidoc DuiTextPdfHelper.java *https://www.microsoft.com/en-us/software-download/windows10 *https://github.com/PaddlePaddle/PaddleOCR *https://docs.microsoft.com/es-es/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15 *https://github.com/microsoft/mssql-jdbc/blob/main/README.md *oracle.jdbc.driver.OracleDriver * *1、打开idea安装目录的bin目录下的idea.exe.vmoption和idea64.exe.vmoption,在最后加上 -Dfile.encoding=utf-8 2、设置idea file编码。在菜单栏找到”File->settings->搜索File Encodeing,然后在IDE Encoding ,Project Encoding和Default encoding for properties files都设置为utf-8 3、设置idea server编码。在菜单栏找到”run->editconfigration” 找到”server”选项卡 设置 vm option为 -Dfile.encoding=utf-8 4、HELP->Edit Custom VM OPtions中加 -Dfile.encoding=utf-8 重启idea * */ import java.io.FileOutputStream; import java.io.IOException; import java.io.*; import java.util.ArrayList; //import java.util.List; import com.itextpdf.*; import com.itextpdf.io.font.*; import com.itextpdf.pdfa.*; import com.itextpdf.kernel.*; import com.itextpdf.kernel.pdf.*; import com.itextpdf.io.font.constants.StandardFonts; 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.Paragraph; import com.itextpdf.layout.element.Text; import com.itextpdf.kernel.geom.PageSize; import com.itextpdf.layout.element.Cell; import com.itextpdf.layout.element.Table; import com.itextpdf.layout.element.Image; import com.itextpdf.layout.*; import com.itextpdf.layout.element.List; import com.itextpdf.layout.element.ListItem; //import com.itextpdf.layout.property.ListNumberingType; import com.itextpdf.layout.properties.*; /** * itext 7.2.1 * @author geovindu * @version 1.0 * * * */ public class DuiTextPdfHelper { private static String FILE = "src/geovindu.pdf"; //PdfFont catFont =PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD);// new Font(Font.FontFamily.TIMES_ROMAN, 18,Font.BOLD); // PdfFont redFont =PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD);// new Font(Font.FontFamily.TIMES_ROMAN, 12,Font.NORMAL, BaseColor.RED); // PdfFont subFont = PdfFontFactory.createFont(StandardFonts.COURIER);//new Font(Font.FontFamily.TIMES_ROMAN, 16,Font.BOLD); // PdfFont smallBold =PdfFontFactory.createFont(StandardFonts.COURIER);// new Font(Font.FontFamily.TIMES_ROMAN, 12,Font.BOLD); // PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN); public static void CreatePdf() { try { PdfFont catFont =PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD);// new Font(Font.FontFamily.TIMES_ROMAN, 18,Font.BOLD); PdfFont redFont =PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD);// new Font(Font.FontFamily.TIMES_ROMAN, 12,Font.NORMAL, BaseColor.RED); PdfFont subFont = PdfFontFactory.createFont(StandardFonts.COURIER);//new Font(Font.FontFamily.TIMES_ROMAN, 16,Font.BOLD); PdfFont smallBold =PdfFontFactory.createFont(StandardFonts.COURIER);// new Font(Font.FontFamily.TIMES_ROMAN, 12,Font.BOLD); //PdfDocument pdf = new PdfDocument(new PdfWriter(dest),new WriterProperties().addXmpMetadata())); PdfWriter writer = new PdfWriter(FILE); PdfDocument pdf = new PdfDocument(writer); Document document = new Document(pdf); // PdfWriter.getInstance(document, new FileOutputStream(FILE)); // document.open(); PdfFont russian = PdfFontFactory.createFont("src/geovindu/resources/fonts/FreeSans.ttf", "CP1251", pdf); addMetaData(document); addTitlePage(document); addContent(document); document.close(); } catch (Exception e) { e.printStackTrace(); } } // iText allows to add metadata to the PDF which can be viewed in your Adobe // Reader // under File -> Properties private static void addMetaData(Document document) { addCustomMetadadata(document,"Title","My first PDF"); addCustomMetadadata(document,"Subject","My first PDF"); addCustomMetadadata(document,"Keywords","My first PDF"); addCustomMetadadata(document,"Author","geovindu"); addCustomMetadadata(document,"Creator","geovindu"); // document.addTitle("My first PDF"); // document.addSubject("Using iText"); // document.addKeywords("Java, PDF, iText"); // document.addAuthor("geovindu"); // document.addCreator("geovindu"); } private static void addTitlePage(Document document) throws Exception { Paragraph preface = new Paragraph(); PdfFont catFont =PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD); PdfFont redFont =PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD);// new Font(Font.FontFamily.TIMES_ROMAN, 12,Font.NORMAL, BaseColor.RED); PdfFont subFont = PdfFontFactory.createFont(StandardFonts.COURIER);//new Font(Font.FontFamily.TIMES_ROMAN, 16,Font.BOLD); PdfFont smallBold =PdfFontFactory.createFont(StandardFonts.COURIER);// new Font(Font.FontFamily.TIMES_ROMAN, 12,Font.BOLD); // We add one empty line addEmptyLine(preface, 1); // Lets write a big header preface.add(new Paragraph("Title of the document").setFont(catFont)); addEmptyLine(preface, 1); // Will create: Report generated by: _name, _date preface.add(new Paragraph( "Report generated by: " + System.getProperty("user.name") + ", " + new Date() //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ ).setFont(smallBold)); addEmptyLine(preface, 3); preface.add(new Paragraph( "This document describes something which is very important ").setFont(smallBold)); addEmptyLine(preface, 8); preface.add(new Paragraph( "This document is a preliminary version and not subject to your license agreement or any other agreement with vogella.com ;-).").setFont(redFont)); document.add(preface); // Start a new page //document.(); } private static void addContent(Document document) throws Exception { PdfFont subFont = PdfFontFactory.createFont(StandardFonts.COURIER);//new Font(Font.FontFamily.TIMES_ROMAN, 16,Font.BOLD); PdfFont catFont =PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD);// new Font(Font.FontFamily.TIMES_ROMAN, 18,Font.BOLD); Anchor anchor = new Anchor("First Chapter", catFont); anchor.setName("First Chapter"); // Second parameter is the number of the chapter Chapter catPart = new Chapter(new Paragraph(anchor), 1); Paragraph subPara = new Paragraph("Subcategory 1").setFont(subFont); Section subCatPart = catPart.addSection(subPara); subCatPart.add(new Paragraph("Hello")); subPara = new Paragraph("Subcategory 2").setFont(subFont); subCatPart = catPart.addSection(subPara); subCatPart.add(new Paragraph("Paragraph 1")); subCatPart.add(new Paragraph("Paragraph 2")); subCatPart.add(new Paragraph("Paragraph 3")); // add a list createList(subCatPart); Paragraph paragraph = new Paragraph(); addEmptyLine(paragraph, 5); subCatPart.add(paragraph); // add a table createTable(subCatPart); // now add all this to the document document.add(catPart); // Next section anchor = new Anchor("Second Chapter", subFont); anchor.setName("Second Chapter"); // Second parameter is the number of the chapter catPart = new Chapter(new Paragraph(anchor), 1); subPara = new Paragraph("Subcategory").setFont(catFont); subCatPart = catPart.addSection(subPara); subCatPart.add(new Paragraph("This is a very important message")); // now add all this to the document document.add(catPart); } public static void addMetadata(Document document,String title, String subject, String author, String creator) { PdfDocumentInfo documentInfo = document.getPdfDocument().getDocumentInfo(); if (title!="") { documentInfo.setTitle(title); } if (subject!="") { documentInfo.setSubject(subject); } if (author!="") { documentInfo.setAuthor(author); } if (creator!="") { documentInfo.setCreator(creator); } } public static void addCustomMetadadata(Document document, String key, String value) { PdfDocumentInfo documentInfo = document.getPdfDocument().getDocumentInfo(); documentInfo.setMoreInfo(key, value); } private static void createTable(Document subCatPart) throws Exception { PdfFont headerFont = PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD); PdfFont cellFont = PdfFontFactory.createFont(StandardFonts.COURIER); //Table table = new Table(3); // t.setBorderColor(BaseColor.GRAY); // t.setPadding(4); // t.setSpacing(4); // t.setBorderWidth(1); Table table = new Table(new float[]{4, 4, 4}); table.setWidth(UnitValue.createPercentValue(100)); // adding header table.addHeaderCell(new Cell().add(new Paragraph( "First Name").setFont(headerFont))); table.addHeaderCell(new Cell().add(new Paragraph( "Last Name").setFont(headerFont))); table.addHeaderCell(new Cell().add(new Paragraph( "Email").setFont(headerFont))); /* Cell c1 = new Cell(new Phrase("Table Header 1")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); c1 = new Cell(new Phrase("Table Header 2")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); c1 = new Cell(new Phrase("Table Header 3")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); table.setHeaderRows(1); */ table.addCell("1.0 geovindu"); table.addCell("1.1"); table.addCell("1.2"); table.addCell("2.1"); table.addCell("2.2"); table.addCell("2.3"); subCatPart.add(table); } private static void createList(Document subCatPart) { com.itextpdf.layout.element.List list = new com.itextpdf.layout.element.List().setSymbolIndent(14);//(true, false, 10); list.add(new ListItem("First point")); list.add(new ListItem("Second point")); list.add(new ListItem("Third point")); subCatPart.add(list); } private void createTablePDF(String PDFPath){ PdfWriter writer; try { writer = new PdfWriter(new FileOutputStream(PDFPath)); PdfDocument pdf = new PdfDocument(writer); Document document = new Document(pdf, new PageSize(PageSize.A4)); PdfFont headerFont = PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD); PdfFont cellFont = PdfFontFactory.createFont(StandardFonts.COURIER); // Create table with 3 columns of similar length Table table = new Table(new float[]{4, 4, 4}); table.setWidth(UnitValue.createPercentValue(100)); // adding header table.addHeaderCell(new Cell().add(new Paragraph( "First Name").setFont(headerFont))); table.addHeaderCell(new Cell().add(new Paragraph( "Last Name").setFont(headerFont))); table.addHeaderCell(new Cell().add(new Paragraph( "Email").setFont(headerFont))); java.util.List<User> users = getListOfUsers(); // adding rows for(User user : users) { table.addCell(new Cell().add(new Paragraph( user.getFirstName()).setFont(cellFont))); table.addCell(new Cell().add(new Paragraph( user.getLastName()).setFont(cellFont))); table.addCell(new Cell().add(new Paragraph( user.getEmail()).setFont(cellFont))); } document.add(table); document.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // Dummy method for adding List of Users private java.util.List<User> getListOfUsers() { java.util.List<User> users = new ArrayList<User>(); users.add(new User("Jack", "Reacher", "abc@xyz.com")); users.add(new User("Remington", "Steele", "rs@cbd.com")); users.add(new User("Jonathan", "Raven", "jr@sn.com")); return users; } protected void manipulatePdf(String dest) throws Exception { PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest)); Document doc = new Document(pdfDoc); Table table = new Table(3); float tableWidth = doc.getPdfDocument().getDefaultPageSize().getWidth() - (doc.getLeftMargin() + doc.getRightMargin()); table.setWidth(tableWidth); Cell cell1 = new Cell(); Paragraph p = new Paragraph("1"); p.setProperty(Property.SPLIT_CHARACTERS, new DefaultSplitCharacters()); cell1.add(p); table.addCell(cell1); Cell cell2 = new Cell(); Paragraph p2 = new Paragraph("CamLane_Disp_Warn_Rq_Pr2_e0h2tjvjx5d9y5cbvxqsnhwa7"); p2.setProperty(Property.SPLIT_CHARACTERS, new DefaultSplitCharacters()); cell2.add(p2); table.addCell(cell2); Cell cell3 = new Cell(); Paragraph p3 = new Paragraph("CamLane_Disp_Warn_Rq_AR2"); p3.setProperty(Property.SPLIT_CHARACTERS, new DefaultSplitCharacters()); cell3.add(p3); table.addCell(cell3); Cell cell4 = new Cell(); Paragraph p4 = new Paragraph("SQC/CRC"); p4.setProperty(Property.SPLIT_CHARACTERS, new DefaultSplitCharacters()); cell4.add(p4); table.addCell(cell4); Cell cell5 = new Cell(); Paragraph p5 = new Paragraph("SPV_EngRq1_VAN_Pr2_vx0c4n6d46wgrav5gmco6bvc"); p5.setProperty(Property.SPLIT_CHARACTERS, new DefaultSplitCharacters()); cell5.add(p5); table.addCell(cell5); Cell cell6 = new Cell(); Paragraph p6 = new Paragraph("Bckl_Sw_Ft_Stat_Pr2_b14xqvpzjykdbhltdyma53upe"); p6.setProperty(Property.SPLIT_CHARACTERS, new DefaultSplitCharacters()); cell6.add(p6); table.addCell(cell6); doc.add(table); doc.close(); } private static void addEmptyLine(Paragraph paragraph, int number) { for (int i = 0; i < number; i++) { paragraph.add(new Paragraph(" ")); } } private void addImageToPDF(String PDFPath){ PdfWriter writer; try { writer = new PdfWriter(new FileOutputStream(PDFPath)); PdfDocument pdfDoc = new PdfDocument(writer); Document document = new Document(pdfDoc); PageSize pageSize = new PageSize(PageSize.A4).rotate(); PdfCanvas canvas = new PdfCanvas(pdfDoc.addNewPage()); // creating image data instance by passing the path to image ImageData img = ImageDataFactory.create("resources//netjs.png"); canvas.saveState(); // graphic state PdfExtGState state = new PdfExtGState(); state.setFillOpacity(0.2f); canvas.setExtGState(state); canvas.addImage(img, 20, 650, pageSize.getWidth()/2, false); canvas.restoreState(); document.add(new Paragraph("Adding image to PDF Example")); document.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void addImageToPDF(String PDFPath){ PdfWriter writer; try { // creating image data instance by passing the path to image String imFile="resources//netjs.png"; ImageData data = ImageDataFactory.create(imFile); Image image = new image(data); writer = new PdfWriter(new FileOutputStream(PDFPath)); PdfDocument pdfDoc = new PdfDocument(writer); Document document = new Document(pdfDoc); document.add(new Paragraph("Adding image to PDF Example")); document.add(image); document.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void addImageToPDF2(String PDFPath){ PdfWriter writer; try { writer = new PdfWriter(new FileOutputStream(PDFPath)); PdfDocument pdfDoc = new PdfDocument(writer); Document document = new Document(pdfDoc); document.add(new Paragraph("Choices Are (Using English Letters)")); // for offset (space from the left) com.itextpdf.layout.element.List list = new com.itextpdf.layout.element.List().setSymbolIndent(14) .setListSymbol(ListNumberingType.ENGLISH_LOWER); // Add ListItem objects list.add(new ListItem("Aerobic")) .add(new ListItem("Anaerobic")) .add(new ListItem("Flexibility Training")); // Add the list document.add(list); document.add(new Paragraph("Choices Are (Using Roman upper)")); list = new com.itextpdf.layout.element.List() .setSymbolIndent(14) .setListSymbol(ListNumberingType.ROMAN_UPPER); // Add ListItem objects list.add(new ListItem("Aerobic")) .add(new ListItem("Anaerobic")) .add(new ListItem("Flexibility Training")); // Add the list document.add(list); document.add(new Paragraph("Choices Are (Using bullet symbol)")); list = new com.itextpdf.layout.element.List() .setSymbolIndent(14) .setListSymbol("\u2022"); // Passing unicode for bullet // Add ListItem objects list.add(new ListItem("Aerobic")) .add(new ListItem("Anaerobic")) .add(new ListItem("Flexibility Training")); // Add the list document.add(list); document.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
https://github.com/arnosthavelka/itext-poc/blob/develop/src/main/java/com/github/aha/poc/itext/DocumentBuilder.java
https://api.itextpdf.com/iText5/java/
5.2.1
import java.awt.Color; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.io.*; import com.itextpdf.text.Image; import com.itextpdf.text.Phrase; import com.itextpdf.text.Header; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.ColumnText; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.text.pdf.TextField; import com.itextpdf.text.Anchor; import com.itextpdf.text.BadElementException; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Chapter; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.List; import com.itextpdf.text.ListItem; import com.itextpdf.text.Paragraph; import com.itextpdf.text.Section; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.PageSize; import com.itextpdf.text.FontFactory; /** * itextpdf 5.2.1 * itext-asian-5.2.0 * itext-rtf-2.1.7 * @author geovindu * @version 1.0 * * * * */ public class iTextPdfHelper { private static String FILE = "src/geovindu.pdf"; //中文字体 private static String path = "C:/WINDOWS/Fonts/STFANGSO.TTF";//windows里的字体资源路径simhei.ttf private static Font dufont = FontFactory.getFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED,10f, Font.NORMAL, BaseColor.BLACK); private static Font catFont =FontFactory.getFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED,18f, Font.NORMAL, BaseColor.BLACK);// new Font(Font.FontFamily.TIMES_ROMAN, 18,Font.BOLD); private static Font redFont =FontFactory.getFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED,12f, Font.NORMAL, BaseColor.BLACK);// new Font(Font.FontFamily.TIMES_ROMAN, 12,Font.NORMAL, BaseColor.RED); private static Font subFont =FontFactory.getFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED,16f, Font.NORMAL, BaseColor.BLACK);// new Font(Font.FontFamily.TIMES_ROMAN, 16,Font.BOLD); private static Font smallBold =FontFactory.getFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED,12f, Font.NORMAL, BaseColor.BLACK);// new Font(Font.FontFamily.TIMES_ROMAN, 12,Font.BOLD); public static void CreatePdf() { try { Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(FILE)); document.open(); addMetaData(document); addTitlePage(document); addContent(document); document.close(); } catch (Exception e) { e.printStackTrace(); } } // iText allows to add metadata to the PDF which can be viewed in your Adobe // Reader // under File -> Properties private static void addMetaData(Document document) { document.addTitle("My first PDF"); document.addSubject("Using iText"); document.addKeywords("Java, PDF, iText"); document.addAuthor("geovindu"); document.addCreator("geovindu"); } private static void addTitlePage(Document document) throws DocumentException { Paragraph preface = new Paragraph(); // We add one empty line addEmptyLine(preface, 1); // Lets write a big header preface.add(new Paragraph("Title of the document", catFont)); addEmptyLine(preface, 1); // Will create: Report generated by: _name, _date preface.add(new Paragraph( "Report generated by: " + System.getProperty("user.name") + ", " + new Date(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ smallBold)); addEmptyLine(preface, 3); preface.add(new Paragraph("This document describes something which is very important ",smallBold)); addEmptyLine(preface, 8); preface.add(new Paragraph( "This document is a preliminary version and not涂聚文 subject to your license agreement or any other agreement with vogella.com ;-).", redFont)); document.add(preface); // Start a new page document.newPage(); } private static void addContent(Document document) throws DocumentException { Anchor anchor = new Anchor("First Chapter", catFont); anchor.setName("First Chapter"); // Second parameter is the number of the chapter Chapter catPart = new Chapter(new Paragraph(anchor), 1); Paragraph subPara = new Paragraph("Subcategory 1", subFont); Section subCatPart = catPart.addSection(subPara); subCatPart.add(new Paragraph("Hello")); subPara = new Paragraph("Subcategory 2", subFont); subCatPart = catPart.addSection(subPara); subCatPart.add(new Paragraph("Paragraph 1 涂聚文",subFont)); subCatPart.add(new Paragraph("Paragraph 2涂聚文涂聚文",subFont)); subCatPart.add(new Paragraph("Paragraph 3涂聚文",subFont)); // add a list createList(subCatPart); Paragraph paragraph = new Paragraph(); addEmptyLine(paragraph, 5); subCatPart.add(paragraph); // add a table createTable(subCatPart); // now add all this to the document document.add(catPart); // Next section anchor = new Anchor("Second Chapter", catFont); anchor.setName("Second Chapter"); // Second parameter is the number of the chapter catPart = new Chapter(new Paragraph(anchor), 1); subPara = new Paragraph("Subcategory", subFont); subCatPart = catPart.addSection(subPara); subCatPart.add(new Paragraph("This is a very important message",subFont)); // now add all this to the document document.add(catPart); } private static void createTable(Section subCatPart) throws BadElementException { PdfPTable table = new PdfPTable(3); // t.setBorderColor(BaseColor.GRAY); // t.setPadding(4); // t.setSpacing(4); // t.setBorderWidth(1); Phrase pp=new Phrase("Table Header油料作物 1",subFont); PdfPCell c1 = new PdfPCell(pp); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); c1 = new PdfPCell(new Phrase("Table Header涂 2",subFont)); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); c1 = new PdfPCell(new Phrase("Table Header 聚文3",subFont)); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); table.setHeaderRows(1); table.addCell(new Phrase("1.0涂聚文",subFont)); table.addCell(new Phrase("1.1涂聚文",subFont)); table.addCell(new Phrase("1.2涂聚文",subFont)); table.addCell(new Phrase("2.1塗聚文工團",subFont)); table.addCell(new Phrase("2.2涂聚文",subFont)); table.addCell(new Phrase("2.3",subFont)); subCatPart.add(table); } private static void createList(Section subCatPart) { List list = new List(true, false, 10); list.add(new ListItem("First point")); list.add(new ListItem("Second point")); list.add(new ListItem("Third point")); subCatPart.add(list); } private static void addEmptyLine(Paragraph paragraph, int number) { for (int i = 0; i < number; i++) { paragraph.add(new Paragraph(" ")); } } /** * 生成pdf文件 */ public void createPdf(Font font) throws FileNotFoundException, DocumentException { String path = "src/"+System.currentTimeMillis()+".pdf"; File file = new File(path); file.getParentFile().mkdirs(); Document doc = new Document(PageSize.A4); PdfWriter.getInstance(doc, new FileOutputStream(file)); doc.open(); doc.add(new Paragraph("字体测试",font)); doc.close(); } /** * 使用windows系统下的字体,new Font方式 */ public void DusetFont() throws DocumentException, IOException { String path = "C:/WINDOWS/Fonts/simhei.ttf";//windows里的字体资源路径 BaseFont bf = BaseFont.createFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); Font font = new Font(bf, 10f, Font.NORMAL, BaseColor.BLACK); createPdf(font); } /** * 使用windows系统下的字体,FontFactory方式 */ public void DusetFont2() throws DocumentException, IOException { String path = "C:/WINDOWS/Fonts/simhei.ttf";//windows里的字体资源路径 Font font = FontFactory.getFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED,10f, Font.NORMAL, BaseColor.BLACK); createPdf(font); } /** * 使用自己查找的字体,FontFactory方式 */ public void DusetFont3() throws DocumentException, IOException { String path = "src/main/resources/file/pdf/font/SIMYOU.TTF";//自己的字体资源路径 Font font = FontFactory.getFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED,10f, Font.NORMAL, BaseColor.BLACK); createPdf(font); } /** * 使用iTextAsian.jar中的字体,FontFactory方式 */ public void DusetFont4() throws DocumentException, IOException { Font font = FontFactory.getFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED,10f, Font.NORMAL, BaseColor.BLACK); createPdf(font); } }
https://api.itextpdf.com/iText5/csharp/
https://api.itextpdf.com/DITO/java/2.2.5/
https://api.itextpdf.com/iText5/java/5.5.9/
https://api.itextpdf.com/iText7/java/7.2.1/
https://api.itextpdf.com/pdf2Data/java/2.1.2/
https://api.itextpdf.com/pdfCalligraph/java/2.0.5/
https://api.itextpdf.com/pdfHTML/java/4.0.1/
https://api.itextpdf.com/pdfSweep/java/3.0.0/
https://api.itextpdf.com/pdfXFA/java/3.0.0/
https://api.itextpdf.com/pdfRender/java/2.0.1/
https://api.itextpdf.com/pdfOCR/java/2.0.1/
https://api.itextpdf.com/licensekey/java/4.0.1/
https://api.itextpdf.com/pdfOptimizer/java/2.0.1/
https://api.itextpdf.com/iText7/dotnet/7.1.8/
https://api.itextpdf.com/pdfCalligraph/dotnet/2.0.5/
https://api.itextpdf.com/pdfHTML/dotnet/4.0.1/
https://api.itextpdf.com/pdfSweep/dotnet/3.0.0/
https://api.itextpdf.com/pdfXFA/dotnet/3.0.0/
https://api.itextpdf.com/pdfOCR/dotnet/2.0.1/
https://api.itextpdf.com/licensekey/dotnet/4.0.1/
https://api.itextpdf.com/pdfOptimizer/dotnet/2.0.1/
https://api.itextpdf.com/pdfOffice/java/2.0.1/
java sdk 17.0.1