Java实现HTML转PDF的总结

Java实现HTML转PDF的几种方法—主要解决中文乱码问题

第一:同事在做HTML转PDF中遇到乱码问题

*****************************************************************

她采用的itext方法实现HTML转存为PDF,代码如下:

 1 import java.io.FileInputStream;
 2 import java.io.FileOutputStream;
 3 
 4 import com.itextpdf.text.Document;
 5 import com.itextpdf.text.PageSize;
 6 import com.itextpdf.text.pdf.PdfWriter;
 7 import com.itextpdf.tool.xml.XMLWorkerHelper;
 8 
 9 public class HtmlToPDF {
10     public static final String HTML = "D:/printEnforcement.htm";
11     public static void main(String[] args) {
12         try {
13             
14             Document document = new Document(PageSize.LETTER);
15             PdfWriter pdfWriter = PdfWriter.getInstance(document,
16                     new FileOutputStream("d://testpdf.pdf"));
17             document.open();
18             document.addAuthor("test");
19             document.addCreator("test");
20             document.addSubject("test");
21             document.addCreationDate();
22             document.addTitle("XHTML to PDF");
23 
24             XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
25 
26             worker.parseXHtml(pdfWriter, document, new FileInputStream(HTML),  null, new AsianFontProvider());
27             document.close();
28             System.out.println("Done.");
29         } catch (Exception e) {
30             e.printStackTrace();
31         }
32     }
33 
34 }
 1 import com.itextpdf.text.BaseColor;
 2 import com.itextpdf.text.Font;
 3 import com.itextpdf.text.pdf.BaseFont;
 4 import com.itextpdf.tool.xml.XMLWorkerFontProvider;
 5 
 6 public class AsianFontProvider extends XMLWorkerFontProvider {
 7 
 8     public Font getFont(final String fontname, final String encoding,
 9             final boolean embedded, final float size, final int style,
10             final BaseColor color) {
11         BaseFont bf = null;
12         try {
13             bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
14                     BaseFont.NOT_EMBEDDED);
15         } catch (Exception e) {
16             e.printStackTrace();
17         }
18         Font font = new Font(bf, size, style, color);
19         font.setColor(color);
20         return font;
21     }
22 }

代码的思路很简单的,一个pdfwriter类负责输出pdf参数,一个document作为方法中的参数,一个xmlworkhelper负责将html转化为pdf文档;

在另一个类中XMLWorkerFontProvider目前主要写的是关于字体参数的设置。

两个java文件能够显示正常的PDF文件。

附测试代码Demo:

原文地址:https://www.cnblogs.com/sunrunzhi/p/5070063.html