iText XML Worker修改源码完美支持HTML中文字符转PDF

目录:

  1. 介绍
  2. 中文字符转换
  3. 转换效果

[一]、介绍

XML Worker是辅助iText用于把XML、XHTML转换PDF的一个开源的软件工具库,详细介绍可以参见下面的链接:

[二]、中文字符问题

如果HTML文件中包含中文字符,在转换成PDF是会无法显示,简单看了下它的源码,发现XML Worker无法设置默认字体,只好修改它的部分源码实现中文字符的转换。

附件提供修改后的lib包下载xmlworker-1.2.1-micmiu.jar.zip  (源码:https://github.com/micmiu/micmiu-xmlworker

修改:com.itextpdf.tool.xml.css.apply.ChunkCssApplier.java 中的 public Chunk apply(final Chunk c, final Tag t)  这个方法,增加如下逻辑判断:

在:com.itextpdf.tool.xml.html.HTMLUtils.java 中 增加下面用于中文字符判断的方法:

[三]、转换效果

演示一个简单的HTML文件:demo-cn.html

转PDF的程序:   Demo4HTMLCn.java

HTML页面、修改源码前 、修改源码后的效果对比图如下

从上图可知,修改源码后,基本实现了对HTML的中文字符的支持。

本文介绍到此结束@Michael Sun.

原创文章,转载请注明: 转载自micmiu – 软件开发+生活点滴[ http://www.micmiu.com/ ]

本文链接地址: http://www.micmiu.com/opensource/expdoc/itext-xml-worker-cn/

发表评论?

54 条评论。

  1. 无法支持table显示,itextpdf和itext-asian版本是哪个呢,我这无法显示table?

  2. 现在测试中文是可以了,但是英文的样式都变了,
    What a beautiful world 样式上变成”W hata beautifu lw orld”,难道是是fontsize的原因?
    com.itextpdf
    itextpdf
    5.5.10

    com.itextpdf
    itext-asian
    5.2.0

    com.itextpdf.tool
    xmlworker
    5.5.10

  3. 你好,我把你说的源码git下来以后打包使用,中文还是在pdf上显示不出来呢?help

  4. 感谢博主,我想请问一下,我在调用XMLWorkerHelper.getInstance().parseXHtml(pdfwriter, document, isr);时始终报java.lang.NoClassDefFoundError: com/itextpdf/text/log/LoggerFactory,求博主解答!

    • 我在调用XMLWorkerHelper.getInstance().parseXHtml(pdfwriter, document, isr);时始终报java.lang.NoClassDefFoundError: com/itextpdf/text/log/LoggerFactory,
      我也遇到了相同问题,百度无果,求解答,能不能给我的邮箱发一份解决办法,小菜再此感激不尽

  5. 楼主你好,请问一下、我按照做好的程序,之后,除了数字和英文的变量替换后是不换行的,中文可以、、有没有办法解决,英文和数字不换行的问题

  6. 特殊字符,比如●生成pdf是空白

  7. 你这个功能实在太强大了!!! 😯 😯 😯

  8. 您好,我把你的源码放上后,发现,转化后,中午和数字都没有,只有表格,是不是对html有要求啊?有qq吗,给个,急需要解决下,谢谢,发到邮箱即可。

  9. 但如果,html中有繁体中文就会乱码的。

  10. 为什么我和你一样的操作,代码也一样,jar包用的你修改好的,IText版本也是一样的,为什么中文还是不显示呢?好郁闷呢啊

  11. 你好,请问是否可以将xmlworker-1.2.1-micmiu.jar.zip 的源码也附上呢?我按照你的方法实现了一下,不知是否是版本问题,执行后没有效果。

  12. 您好, 我引入 jar 版本是 : 5.4.2。
    修改后,将html 的转换为 element 加到 pdf 中, 但是中文字符不显示。请帮忙看一下, 谢谢啦

  13. 您好!我用的是xmlworker-5.5.1.jar,按照您的方法改了代码后不成功呢,希望您能帮帮我

  14. 苦扰了好久的问题终于解决了,谢谢大牛~

  15. 为什么我试了一下不好呢

  16. 望解决:

    我三个jar:itext-asian-5.1.1.jar itextpdf-5.1.2.jar xmlworker-1.2.1-micmiu.jar ,和你一样的代码,报 java.io.IOException: The document has no pages.

  17. 望解决:

    我三个jar:itext-asian-5.1.1.jar itextpdf-5.1.2.jar xmlworker-1.2.1-micmiu.jar ,和你一样的代码,报

  18. 请问你当时用的itext版本号是多少? 我下了itext5.3.4和你的 xmlworker-1.2.1-micmiu.jar一起用, 但是中文还是显示不了

  19. 求助博主,我下载xmlworker-5.4.1-sources.jar包,按照您文章所说修改了源码,但是我该如何把这个.java文件编译成,class文件替换到xmlworker-5.4.1.jar包中去,谢谢 😆

  20. 高手,太崇拜你了,真是帮我解决了一个大问题,非常感谢你的分享!

  21. C#怎么改~

  22. 请问,如果涉及到图片的问题怎么解决的?

  23. 我这边,win是 不加你那种方式也行,中文也没问题,但是放到Linux上面就不行了, 然后加上你的方法win上还是可以,Linux还是不行,你那是在什么服务器上的;请指教

  24. i found that some tags can’t be shown. e.g.

  25. i have tried, but all style removed.

  26. 🙂 ,非常感谢,按你的代码,我运行了一遍,可以

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">