使用itext将html生成pdf中文换行问题解决方案2

来源:互联网 发布:java多线程并发视频 编辑:程序博客网 时间:2024/05/29 17:37

前面的文章《使用itext将html生成pdf中文换行问题解决方案》是使用itext2.0.8版本实现,这里使用itext5.4.2实现,这里用到了itext-asian.jar和xmlworker-5.4.2.jar的支持,最新版的实现会比较简单:贴上代码:

 

import com.itextpdf.text.BaseColor;import com.itextpdf.text.Font;import com.itextpdf.text.pdf.BaseFont;import com.itextpdf.tool.xml.XMLWorkerFontProvider;public class AsianFontProvider extends XMLWorkerFontProvider {    public 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("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);        } catch (Exception e) {            e.printStackTrace();        }        Font font = new Font(bf, size, style, color);        font.setColor(color);        return font;    }}
建立这个Font是为了解决中文问题,下面看主类的Java代码:
import java.io.ByteArrayInputStream;import java.io.FileOutputStream;import com.itextpdf.text.Document;import com.itextpdf.text.PageSize;import com.itextpdf.text.pdf.PdfWriter;import com.itextpdf.tool.xml.XMLWorkerHelper;public class HtmlToPDF {    public static void main(String[] args) {        try {            Document document = new Document(PageSize.LETTER);            PdfWriter pdfWriter = PdfWriter.getInstance(document,                                    new FileOutputStream("c://temp//testpdf.pdf"));            document.open();            document.addAuthor("ysjiang");            document.addCreator("ysjiang");            document.addSubject("test");            document.addCreationDate();            document.addTitle("XHTML to PDF");            XMLWorkerHelper worker = XMLWorkerHelper.getInstance();            String str = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"                + "<html xmlns=\"http://www.w3.org/1999/xhtml\">"                + "<head>"                + "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"                + "<title>HTML 2 PDF</title>"                + "<style type=\"text/css\">"                + "<!--"                + "body {"                + "margin: 20px;"                + "}"                + "-->"                + "</style>"                + "</head>"                + "<body>"                + "<div style=\"width:90%; height:160px;\">多情浪漫的人,其实内心的情感是非常脆弱的,感情的末梢,有那么一点儿敏感,还有那么一点儿想入非非。所以和浪漫多情的人在一起,言语一定要斯文,说话不能像火炮,态度一定要温柔、语气也要婉转。遇到对方的一个眼神,也许有些人并没发现什么端倪,但是放在懂得浪漫的人身上,就会体会出万种滋味,百般柔情来。"                + "</div>"                + "<hr/>"                + "<table cellspacing=\"0\" cellpadding=\"0\" style=\"width:100%; border:1px;\">"                + "  <tr>"                + "  <td style=\"width:30%\">table中的中文显示及换行"                + "  </td>"                + "  <td>多情浪漫的人,其实内心的情感是非常脆弱的,感情的末梢,有那么一点儿敏感,还有那么一点儿想入非非。所以和浪漫多情的人在一起,言语一定要斯文,说话不能像火炮,态度一定要温柔、语气也要婉转。遇到对方的一个眼神,也许有些人并没发现什么端倪,但是放在懂得浪漫的人身上,就会体会出万种滋味,百般柔情来。"                + "  </td>"                + "  </tr>"                + "  <tr>"                + "  <td colspan=\"2\">"                + "  <img src=\"0.jpg\" />"                + "  </td>"                + "  </tr>"                + "</table>" + "</body>" + "</html>";                // worker.parseXHtml(pdfWriter, document, new FileInputStream("C:\\tmp\\a.htm"), null, new AsianFontProvider());                worker.parseXHtml(pdfWriter, document, new ByteArrayInputStream(str.getBytes()), null, new AsianFontProvider());                document.close();            } catch (Exception e) {                e.printStackTrace();            }        }}
这里只是举例了字符串的情况,注释的那句话可以自己验证html的方式,很简单的。。。
源码下载链接:http://download.csdn.net/detail/jys1109/5676345



原创粉丝点击