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: