iText操作PDF,中文支持的问题

阅读更多
最近各种研究PDF的编辑,之前看例子有使用PDFBox的,但是后来经过深入了解,发现各种不靠谱,稍微有些编辑有问题的地方,都会不识别和找不到相应的位置
于是换成了iText

总体来说还是很方便很不错的一个工具,网上有很多相关的例子,这里就不再多贴了,大家可以搜索关键词”fromPDFTempletToPdfWithValue“,网上有很多

重点记录一下遇到的问题

问题:
中文显示的问题,通常iText可以通过另外一个包来做亚洲语言,比如中文、韩文、日文的显示,要么没有字体支持的话,中文就怎么也显示不出来
解决:
用Maven的话,可以到http://mvnrepository.com/去搜itext-asian,就会找到相应的Jar包
但是,在代码里面怎么也不管用
那么这里面需要注意一点
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
BaseFont.NOT_EMBEDDED);
这是引用了相应的字体和编码,用最新的5.2.0的语言支持,不需要像很多网上写的改什么jar包里面的包结构,已经是最新的了,但是,我们需要去引用他。
或者是自己画的内容,或者是加载PDF文件进行再次编辑的内容

如果是使用AcroFields来做的话,代码如下
String fileName = templateUri;// "/Volumes/Data/DWorks/test.pdf";
PdfReader reader = new PdfReader(fileName);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PdfStamper ps = new PdfStamper(reader, bos);
AcroFields s = ps.getAcroFields();
s.setFieldProperty("字段名", "textfont", bf, null);

这里边一定要注意关于AcroFields的用法,要去查官方API,这样写完就可以针对于单独的Field来设置字体了,还有相应的其他属性,比如说字体大小之类的,在API中都有描述,来修改
试了试字号修改,参数值直接用数值不行,需要new Float(16)才行

当然也可以自己使用本地字体
BaseFont bf =
BaseFont.createFont("/Microsoft Yahei.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

你可能感兴趣的:(中文,iText,PDF,字体)