一、依赖
<!-- html转PDF -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>html2pdf</artifactId>
<version>2.0.1</version>
</dependency>
<!-- iText maven仓库 -->
<repositories>
<repository>
<id>itext</id>
<name>iText Repository - releases</name>
<url>https://repo.itextsupport.com/releases</url>
</repository>
</repositories>
二、Java类(PDF生成工具类)
import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.io.font.PdfEncodings;
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.*;
import com.itextpdf.layout.font.FontProvider;
import com.itextpdf.layout.property.HorizontalAlignment;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.UnitValue;
import com.liuniukeji.common.utils.DateUtils;
import org.apache.commons.io.IOUtils;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
/**
* @author Jerry
* @Title: PDFUtil
* @Description: PDF工具类
* @date 2019/9/28 8:32
*/
public class PDFUtil {
public void createPdf() throws IOException {
// 定义pdf文档的名称和存储位置
String pdfFileName = "test.pdf";
String pdfFilePath = "D://";
String fontPath = "static/statics/font/msyh.ttf";
// PdfWriter是一个可以写PDF文件的对象
PdfWriter pdfWriter = new PdfWriter(pdfFilePath + pdfFileName);
PdfDocument pdfDoc = new PdfDocument(pdfWriter);
// 文档根节点,document,指定PageSize 为 A4
Document document = new Document(pdfDoc, new PageSize(PageSize.A4));
// 设置文档边距 上右下左
document.setMargins(24, 20, 0, 20);
// 读取字体文件,设置字体(一定要,否则中文显示乱码)
Resource fontResource = new ClassPathResource(fontPath);
InputStream inputStream = fontResource.getInputStream();
PdfFont font = PdfFontFactory.createFont(IOUtils.toByteArray(inputStream), PdfEncodings.IDENTITY_H, false);
Cell cell;
Image image;
Paragraph p;
// 标题
p = new Paragraph("合同正文标题");
// 位置居中
p.setTextAlignment(TextAlignment.CENTER);
// 字体类型
p.setFont(font);
// 字体大小
p.setFontSize(16f);
document.add(p);
// 正文使用表格方式
Table table = new Table(1);
table.setWidth(new UnitValue(UnitValue.PERCENT, 100f));
cell = new Cell();
p = new Paragraph("2.麦兜:啊,阿MAY呀,你看,偶默写拿了个A啊~~\r\n" +
" 阿MAY:A你个头啊,你看看,是H啊,A和H差一点点的!!\r\n" +
" 麦兜:啊,原来我差一点点就拿A!!\n" +
" test english success");
p.setTextAlignment(TextAlignment.CENTER);
p.setFont(font);
p.setFontSize(10f);
cell.setBorder(null);
cell.add(p);
table.addCell(cell);
document.add(table);
String htmlStr = "<p class=\"MsoNormal\" align=\"center\" style=\"text-align:center;\">\n" +
"\t<strong>算法程序集成说明</strong>\n" +
"</p>\n" +
"<p class=\"MsoNormal\" style=\"text-align:center;margin-left:0cm;\">\n" +
"\t<strong>初装</strong><strong>CentOS\n" +
"6.8</strong><strong>下安装</strong><strong>Python\n" +
"3.6.6</strong>\n" +
"</p>\n" +
"<p class=\"MsoNormal\" style=\"text-align:center;\">\n" +
"\t<strong>安装</strong><strong>GCC</strong><strong>开发工具:</strong>\n" +
"</p>\n" +
"<p class=\"MsoNormal\" style=\"text-align:center;\">\n" +
"\t<strong>注:</strong><strong>如果安装系统时已经勾选了开发工具,那么这一步可以省略;</strong>\n" +
"</p>\n" +
"<p class=\"MsoNormal\" style=\"text-align:center;\">\n" +
"\t<strong>$ sudo yum install -y gcc*</strong>\n" +
"</p>\n" +
"<p class=\"MsoNormal\" style=\"text-align:center;\">\n" +
"\t<strong>=> 直接安装所有的gcc相关的工具;</strong>\n" +
"</p>\n" +
"<p class=\"MsoNormal\">\n" +
"\t<br />\n" +
"</p>\n" +
"<p class=\"MsoNormal\" style=\"text-align:center;\">\n" +
"\t<strong>安装</strong><strong>zlib-devel</strong><strong>开发库:</strong>\n" +
"</p>\n" +
"<p class=\"MsoNormal\" style=\"text-align:center;\">\n" +
"\t<strong>$ sudo yum install -y\n" +
"zlib-devel</strong>\n" +
"</p>\n";
//导入字体
FontProvider fontProvider = new FontProvider();
fontProvider.addFont(fontPath);
ConverterProperties c = new ConverterProperties();
c.setFontProvider(fontProvider);
c.setCharset("utf-8");
List<IElement> list = HtmlConverter.convertToElements(htmlStr, c);
for (IElement ie : list) {
document.add((IBlockElement) ie);
}
Table table2 = new Table(2);
table2.setWidth(new UnitValue(UnitValue.PERCENT, 100f));
cell = new Cell();
p = new Paragraph("甲方:\r\n" +
" 装搭搭\r\n" +
" 日期:" + DateUtils.getDateStrC(new Date()) + "\n");
p.setTextAlignment(TextAlignment.LEFT);
p.setFont(font);
p.setFontSize(10f);
cell.setBorder(null);
cell.add(p);
cell.setPaddingLeft(50f);
table2.addCell(cell);
// 加图片
Resource imageResource = new ClassPathResource("static/statics/h-ui/images/default.jpeg");
InputStream imageInputStream = imageResource.getInputStream();
ImageData imageData = ImageDataFactory.create(IOUtils.toByteArray(imageInputStream));
image = new Image(imageData);
image.setHorizontalAlignment(HorizontalAlignment.RIGHT);
image.setMaxWidth(80f);
image.setMaxHeight(80f);
cell = new Cell();
cell.setBorder(null);
cell.add(image);
cell.setPaddingRight(50f);
table2.addCell(cell);
document.add(table2);
document.close();
}
}
三、字体文件
msyh.ttf下载地址:msyh.ttf
个人笔记:http://note.youdao.com/noteshare?id=3ccedc101c69436c536d98b979fb801b