java: itext8.05 create pdf
只能调用windows 已安装的字体,这样可以在系统中先预装字体,5.0 可以调用自配文件夹的字体文件。CSharp donetItext8.0 可以调用。
/**
* encoding: utf-8
* 版权所有 2024 ©涂聚文有限公司 言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 许可信息查看: https://github.com/itext/itext-publications-examples-java/blob/develop/src/main/java/com/itextpdf/samples/sandbox/fonts/FreeSansBold.java
* 描述:https://mvnrepository.com/artifact/com.itextpdf/kernel
* # Author : geovindu,Geovin Du 涂聚文.
* # IDE : IntelliJ IDEA 2023.1 Java 17
* # Datetime : 2024 - 2024/11/20 - 20:13
* # User : geovindu
* # Product : IntelliJ IDEA
* # Project : EssentialAlgorithms itext8.05
* # File : SimpleItext.java
* # explain : 学习 类
**/
package BLL;
//import java.awt.*;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import com.itextpdf.io.font.PdfEncodings;
import com.itextpdf.io.font.TrueTypeFont;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.colors.Color;
import com.itextpdf.kernel.colors.*;
import com.itextpdf.kernel.colors.gradients.*;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.font.*;
import com.itextpdf.kernel.pdf.*;
import com.itextpdf.kernel.pdf.canvas.draw.*;
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.io.font.FontProgramFactory;
import com.itextpdf.layout.element.*;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.borders.Border;
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.properties.TextAlignment;
import com.itextpdf.layout.properties.UnitValue;
import com.itextpdf.layout.properties.VerticalAlignment;
import com.itextpdf.layout.properties.HorizontalAlignment;
import com.itextpdf.layout.element.Text;
import com.itextpdf.layout.borders.*;
import com.itextpdf.layout.borders.SolidBorder;
import com.itextpdf.io.util.StreamUtil;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
import java.io.File;
import java.util.HashSet;
import java.util.Set;
import java.io.FileInputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import Model.Orders;
public class SimpleItext {
private static String USER_PASSWORD = "geovindu";
private static String OWNER_PASSWORD = "geovindu";
public static final String FONTDIR = "font/";
public void test()
{
try {
String fontFile2 = "font/MHeiHK-Light.TTF";
String path = "C:/WINDOWS/Fonts/simhei.ttf";//windows里的字体资源路径
String getfont="";
// Creating a PdfWriter object
String dest = "coloredBorders.pdf";
//PdfFont pfont=null;
PdfWriter writer = new PdfWriter(dest);
// Creating a PdfDocument object
PdfDocument pdfDoc = new PdfDocument(writer);
// Creating a Document object
Document doc = new Document(pdfDoc);
PdfFontFactory.registerDirectory(FONTDIR);
byte[] bytes;
FileInputStream myflie = new FileInputStream(fontFile2);
//var is = getClass().getResourceAsStream(fontFile2);
bytes = StreamUtil.inputStreamToArray(myflie);
//byte[] tem = new byte[myflie.available()];//创建一个长度为myflie长的竹筒
//myflie.read(tem);
//var pfont = FontProgramFactory.createFont(bytes);
//PdfFont pfont = PdfFontFactory.createFont(bytes, PdfEncodings.UTF8);
/*
Set<String> fonts = new HashSet<String>(FontProgramFactory.getRegisteredFonts());
for (String fontname : fonts) {
System.out.print(fontname);
getfont=fontname;
pfont = PdfFontFactory.createRegisteredFont(getfont, PdfEncodings.IDENTITY_H);
doc.add(new Paragraph(String.format("Postscript name for %s: %s", getfont,
pfont.getFontProgram().getFontNames().getFontName())));
}
*/
//PdfFont f2 = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H");
PdfFont pfont = PdfFontFactory.createFont(path, PdfEncodings.IDENTITY_H);//PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED
// Creating a table
float[] pointColumnWidths = {200F, 200F};
Table table = new Table(pointColumnWidths);
// Adding row 1 to the table
Cell c1 = new Cell();
// Adding the contents of the cell
c1.add(new Paragraph("Name").setFont(pfont));
// Setting the back ground color of the cell
c1.setBackgroundColor(ColorConstants.DARK_GRAY);
// Instantiating the Border class
Border b1 = new DashedBorder(ColorConstants.RED, 3);
// Setting the border of the cell
c1.setBorder(b1);
// Setting the text alignment
c1.setTextAlignment(TextAlignment.CENTER);
// Adding the cell to the table
table.addCell(c1);
Cell c2 = new Cell();
c2.add(new Paragraph("涂聚文").setFont(pfont));
c1.setBorder(new SolidBorder(ColorConstants.RED, 3));
c2.setTextAlignment(TextAlignment.CENTER);
table.addCell(c2);
// Adding row 2 to the table
Cell c3 = new Cell();
c3.add(new Paragraph("Id").setFont(pfont));
c3.setBorder(new DottedBorder(ColorConstants.DARK_GRAY, 3));
c3.setTextAlignment(TextAlignment.CENTER);
table.addCell(c3);
Cell c4 = new Cell();
c4.add(new Paragraph("001").setFont(pfont));
c4.setBorder(new DoubleBorder(ColorConstants.DARK_GRAY, 3));
c4.setTextAlignment(TextAlignment.CENTER);
table.addCell(c4);
// Adding row 3 to the table
Cell c5 = new Cell();
c5.add(new Paragraph("Designation").setFont(pfont));
c5.setBorder(new RoundDotsBorder(ColorConstants.RED, 3));
c5.setTextAlignment(TextAlignment.CENTER);
table.addCell(c5);
Cell c6 = new Cell();
c6.add(new Paragraph("Programmer").setFont(pfont));
c6.setBorder(new RoundDotsBorder(ColorConstants.RED, 3));
c6.setTextAlignment(TextAlignment.CENTER);
table.addCell(c6);
// Adding Table to document
doc.add(table);
// Closing the document
doc.close();
System.out.println("Borders added successfully..");
}
catch(IOException oex)
{
oex.printStackTrace();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
public void Createpdf()
{
try
{
String dem="itextExample.pdf";
PdfWriter writer =new PdfWriter(dem);
//设置打开文档必码
// writer.setEncryption(USER_PASSWORD.getBytes(),
//OWNER_PASSWORD.getBytes(), PdfWriter.ALLOW_PRINTING,
//PdfWriter.ENCRYPTION_AES_128);
String fontFile2 = "font\\MHeiHK-Light.TTF"; // 这个报错: Type of font is not recognized
String path = "C:/WINDOWS/Fonts/simhei.ttf";//windows里的字体资源路径
//PdfFont f2 = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H");
PdfFont pfont = PdfFontFactory.createFont(path, PdfEncodings.IDENTITY_H);//PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED
//PdfFont pfont = PdfFontFactory.createRegisteredFont(path, PdfEncodings.IDENTITY_H);
PdfDocument pdfDoc = new PdfDocument(writer);
Document document = new Document(pdfDoc);
//document.setFont(pfont);
//document.open();
document.add(new Paragraph("Some content here").setFont(pfont).setFontColor(ColorConstants.RED));
//Set attributes here
//document.("Geovin Du 涂聚文");
// document.addCreationDate();
//document.addCreator("dusystem.com");
//document.addTitle("Set Attribute Example");
//document.addSubject("An example to show how attributes can be added to pdf files.");
Table table = new Table(3,true); // 3 columns.
//table.setHeight(100); //Width 100%
//table.setHeight(10f); //Space before table
//table.setSpacingAfter(10f); //Space after table
//Set Column widths
//float[] columnWidths = {1f, 1f, 1f};
//table.setHeight(columnWidths);
Cell cell1 = new Cell().add(new Paragraph("深圳市").setFont(pfont));
cell1.setBorder(new SolidBorder(ColorConstants.BLACK, 1));
cell1.setPaddingLeft(10);
cell1.setHorizontalAlignment(HorizontalAlignment.CENTER);
cell1.setVerticalAlignment(VerticalAlignment.MIDDLE);
Cell cell2 = new Cell().add(new Paragraph("南山區").setFont(pfont).setFontColor(ColorConstants.GREEN));
cell2.setBorder(new SolidBorder(ColorConstants.BLACK, 1));
cell2.setPaddingLeft(10);
cell2.setHorizontalAlignment(HorizontalAlignment.LEFT);
cell2.setVerticalAlignment(VerticalAlignment.MIDDLE);
//.setVerticalAlignment(VerticalAlignment.MIDDLE)
Cell cell3 = new Cell().add(new Paragraph("科技園").setFont(pfont));
cell3.setBackgroundColor(ColorConstants.RED);
cell3.setPaddingLeft(10);
cell3.setHorizontalAlignment(HorizontalAlignment.CENTER);
cell3.setVerticalAlignment(VerticalAlignment.MIDDLE);
table.addCell(cell1);
table.addCell(cell2);
table.addCell(cell3);
// table.complete();
document.add(table);
List<Orders> orders = new ArrayList<>();
Orders order = new Orders();
order.setProductId(1); ;
order.setProduct("中國電器");
order.setQty(50);
order.setPrice(52.0);
orders.add(order);
order = new Orders();
order.setProductId(2);
order.setProduct ("日本電器");
order.setQty(150);
order.setPrice(252.0);
orders.add(order);
//2
Table tableData = new Table(5, true);
tableData.setBorder(new SolidBorder(ColorConstants.BLACK, 1));
tableData.setFont(pfont);
Cell headerProductId = new Cell(1, 1).setTextAlignment(TextAlignment.LEFT).add(new Paragraph("ID"));
Cell headerProduct = new Cell(1, 1).setTextAlignment(TextAlignment.LEFT).add(new Paragraph("產品名稱"));
Cell headerProductPrice = new Cell(1, 1).setTextAlignment(TextAlignment.LEFT).add(new Paragraph("價格"));
Cell headerProductQty = new Cell(1, 1).setTextAlignment(TextAlignment.LEFT).add(new Paragraph("數量"));
Cell headerTotal = new Cell(1, 1).setTextAlignment(TextAlignment.LEFT).add(new Paragraph("合計"));
tableData.addCell(headerProductId);
tableData.addCell(headerProduct);
tableData.addCell(headerProductPrice);
tableData.addCell(headerProductQty);
tableData.addCell(headerTotal);
double grandTotalVal = 0;
for(Orders c:orders)
{
Cell productid = new Cell(1, 1).setTextAlignment(TextAlignment.LEFT).add(new Paragraph(String.valueOf(c.getProductId())));
Cell product = new Cell(1, 1).setTextAlignment(TextAlignment.LEFT).add(new Paragraph(c.getProduct()));
Cell price = new Cell(1, 1).setTextAlignment(TextAlignment.LEFT).add(new Paragraph(String.valueOf(c.getPrice())));
Cell qty = new Cell(1, 1).setTextAlignment(TextAlignment.LEFT).add(new Paragraph(String.valueOf(c.getQty())));
var value = c.getPrice() * c.getQty();
Cell total = new Cell(1, 1).setTextAlignment(TextAlignment.LEFT).add(new Paragraph(String.valueOf(value)));
grandTotalVal += value;
tableData.addCell(productid);
tableData.addCell(product);
tableData.addCell(price);
tableData.addCell(qty);
tableData.addCell(total);
}
Cell grandTotalHeader = new Cell(1, 4).setTextAlignment(TextAlignment.RIGHT).add(new Paragraph("合計: ")).setBorderBottom(new SolidBorder(ColorConstants.BLACK, 1));
Cell grandTotal = new Cell(1, 1).setTextAlignment(TextAlignment.LEFT).add(new Paragraph(" " + String.valueOf(grandTotalVal))).setBorderBottom(new SolidBorder(ColorConstants.BLACK, 1));
grandTotal.setBorderBottom(new SolidBorder(ColorConstants.BLACK, 1));
tableData.addCell(grandTotalHeader);
tableData.addCell(grandTotal);
//tableData.complete();
document.add(tableData);
Table tablebottom = new Table(4,true);
//tablebottom.setBorder(new SolidBorder(ColorConstants.BLACK, 3));
tablebottom.setHorizontalAlignment(HorizontalAlignment.CENTER);
tablebottom.addCell(new Cell().add(new Paragraph("產品ID").setFont(pfont)).setBorderTop(new SolidBorder(ColorConstants.BLACK, 3)));
tablebottom.addCell(new Cell().add(new Paragraph("名稱").setFont(pfont)).setBorderTop(new SolidBorder(ColorConstants.BLACK, 3)));
tablebottom.addCell(new Cell().add(new Paragraph("書量").setFont(pfont)).setBorderTop(new SolidBorder(ColorConstants.BLACK, 3)));
tablebottom.addCell(new Cell().add(new Paragraph("價格").setFont(pfont)).setBorderTop(new SolidBorder(ColorConstants.BLACK, 3)));
//table.setHeaderRows(1);
//Cell[] cells = table.getCell(2,3);
//for (int j=0;j<cells.length;j++){
//cells[j].setBackgroundColor(ColorConstants.BLACK);
//}
for (Orders s:orders){
Cell cel1= new Cell().add(new Paragraph(String.valueOf(s.getProductId()))).setBorder(new SolidBorder(ColorConstants.BLACK, 3));
cel1.setTextAlignment(TextAlignment.CENTER);
tablebottom.addCell(cel1);
Cell cel2=new Cell().add(new Paragraph(s.getProduct()).setFont(pfont)).setBorder(new SolidBorder(ColorConstants.BLACK, 3));
cel2.setTextAlignment(TextAlignment.CENTER);
tablebottom.addCell(cel2);
Cell cel3=new Cell().add(new Paragraph(String.valueOf(s.getQty()))).setBorder(new SolidBorder(ColorConstants.BLACK, 3));
cel3.setTextAlignment(TextAlignment.CENTER);
tablebottom.addCell(cel3);
Cell cel4=new Cell().add(new Paragraph(String.valueOf(s.getPrice()))).setBorder(new SolidBorder(ColorConstants.BLACK, 3));
cel4.setTextAlignment(TextAlignment.CENTER);
tablebottom.addCell(cel4);
}
Cell cel1= new Cell().add(new Paragraph("3").setBorderBottom(new SolidBorder(ColorConstants.BLACK, 3)));
cel1.setTextAlignment(TextAlignment.CENTER);
tablebottom.addCell(cel1);
Cell cel2=new Cell().add(new Paragraph("涂聚文").setFont(pfont).setBorderBottom(new SolidBorder(ColorConstants.BLACK, 3)).setBorderLeft(new SolidBorder(ColorConstants.BLACK, 3)));
cel2.setTextAlignment(TextAlignment.CENTER);
tablebottom.addCell(cel2);
Cell cel3=new Cell().add(new Paragraph("333").setBorderBottom(new SolidBorder(ColorConstants.BLACK, 3)).setBorderLeft(new SolidBorder(ColorConstants.BLACK, 3)));
cel3.setTextAlignment(TextAlignment.CENTER);
tablebottom.addCell(cel3);
Cell cel4=new Cell().add(new Paragraph("3333").setBorderBottom(new SolidBorder(ColorConstants.BLACK, 3)).setBorderLeft(new SolidBorder(ColorConstants.BLACK, 3)));
cel4.setTextAlignment(TextAlignment.CENTER);
tablebottom.addCell(cel4);
document.add(tablebottom);
ImageData imageData = ImageDataFactory.create("geovindu.jpg");
Image image1 = new Image(imageData);
//Fixed Positioning
//image1.setAbsolutePosition(205f, 150f);
//Scale to new height and new width of image
image1.scaleAbsolute(100, 100);
//Add to document
document.add(image1);
document.close();
writer.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
调用:
//
SimpleItext itextpdf=new SimpleItext();
//itextpdf.test();
itextpdf.Createpdf();