欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-04 15:54:30
...
最近各种研究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);