<!-- pdf 相关jar包 -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.13</version>
</dependency>
public class PdfUtil2 {
//根据html文件生成pdf
public static void parseHtml2PdfByFilePath(String pdfFilePath,String htmlFilePath,String fontPath) {
Document document = new Document();
PdfWriter writer = null;
FileOutputStream fileOutputStream = null;
FileInputStream fileInputStream = null;
try {
fileOutputStream = new FileOutputStream(pdfFilePath);
writer = PdfWriter.getInstance(document,fileOutputStream);
// 设置底部距离60,解决重叠问题
document.setPageSize(PageSize.A4);
document.setMargins(50,45,50,60);
document.setMarginMirroring(false);
document.open();
StringBuffer sb = new StringBuffer();
fileInputStream = new FileInputStream(htmlFilePath);
BufferedReader br = new BufferedReader(new InputStreamReader(fileInputStream,"UTF-8"));
String readStr = "";
while ((readStr = br.readLine()) != null) {
sb.append(readStr);
}
XMLWorkerHelper.getInstance().parseXHtml(writer,document,new ByteArrayInputStream(sb.toString().getBytes("Utf-8")),null,Charset.forName("UTF-8"),new MyFontProvider(fontPath));
} catch (Exception e) {
e.printstacktrace();
} finally {
if (null != document) {
document.close();
}
if (null != writer) {
writer.close();
}
if (null != fileInputStream) {
try {
fileInputStream.close();
} catch (IOException e) {
e.printstacktrace();
}
}
if (null != fileOutputStream) {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printstacktrace();
}
}
}
}
/** * 根据html内容生成pdf * * @param pdfFilePath pdf文件存储位置 * @param htmlcontent html内容 * @param fontPath 字体路径 * @throws DocumentException * @throws IOException */ public static void parseHtml2PdfByString(String pdfFilePath,String htmlcontent,String fontPath) { Document document = new Document(); PdfWriter writer = null; try { writer = PdfWriter.getInstance(document,new FileOutputStream(pdfFilePath)); // 设置底部距离60,解决重叠问题 document.setPageSize(PageSize.A4); document.setMargins(50,60); document.setMarginMirroring(false); document.open(); XMLWorkerHelper.getInstance().parseXHtml(writer,new ByteArrayInputStream(htmlcontent.getBytes("Utf-8")),new MyFontProvider(fontPath)); } catch (Exception e) { e.printstacktrace(); } finally { if (null != document) { document.close(); } if (null != writer) { writer.close(); } } } public static void main(String[] args) { try { // 本地 String htmlFile = "D:\\1.html"; String pdfFile = "D:\\test2.pdf"; String fontPath = "D:\\simsun.ttf"; String htmlContent = "<html><body style=\"font-size:12.0pt; font-family:宋体\">" + "<h1>Test</h1><p>测试中文Hello World</p></body></html>"; //parseHtml2PdfByString(pdfFile,htmlContent,fontPath); parseHtml2PdfByFilePath(pdfFile,htmlFile,fontPath); } catch (Exception e) { e.printstacktrace(); } }
}
/**
- html中文字体设置类
- @ClassName MyFontProvider
-
@Description
*/
public class MyFontProvider extends XMLWorkerFontProvider {private String fontPath;
public MyFontProvider(String filePath) {
this.fontPath = filePath;
}@Overridepublic Font getFont(final String fontname,final String encoding,final boolean embedded,final float size,final int style,final BaseColor color) {BaseFont bf = null;try {bf = BaseFont.createFont(fontPath,BaseFont.IDENTITY_H,BaseFont.NOT_EMbedDED);} catch (DocumentException | IOException e) {e.printstacktrace();}Font font = new Font(bf,size,style,color);font.setColor(color);return font;}}