解决部分浏览器不能显示itext生成的PDF文件文本域内容问题

您所在的位置:网站首页 火狐浏览器设置中文显示不出来 解决部分浏览器不能显示itext生成的PDF文件文本域内容问题

解决部分浏览器不能显示itext生成的PDF文件文本域内容问题

2024-07-12 03:01| 来源: 网络整理| 查看: 265

利用Itext可以实现pdf的高效动态生成,但在实践过程中遇到了一个问题:

即itext利用map中的值设置到pdf模板上建立的文本域中时:能成功生成,但是在部分浏览器上(360,QQ,等浏览器)无法正常显示

如图:

1:火狐浏览器显示pdf文本域填充(图片):

2:360浏览器显示pdf文本域填充(图片):

搜寻资料发现:

我们在将map键值添加到pdf模板的文本域中时,在AcroFields设置完后,关闭PdfReader和PdfStamper之前

应加上:

stamper.setFormFlattening(true)

大概意思即:将值填充到文本域后即将文本域转换为一般文字对象,这样就避免了某些浏览器不能显示PDF文本域问题

但是这样设置后生成的Pdf文档中设置的文本域就不再具有编辑框功能(Pdf编辑器依然能够编辑)

部分代码如下:

// 设置中文显示bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

.........

try { PdfReader reader = new PdfReader(path);//读模板文件 PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(tempPath));//复制模板文件 AcroFields s = stamper.getAcroFields();//获取所有域名 for (String key : map.keySet()) { String value = (String) map.get(key); s.setFieldProperty(key,"textfont",bfChinese,null); s.setField(key, value); // 为字段赋值,注意字段名称是区分大小写的 } stamper.setFormFlattening(true); reader.close(); stamper.close();} catch (IOException e) { logger.info(e.getMessage()); e.printStackTrace();} catch (DocumentException e) { logger.info(e.getMessage()); e.printStackTrace();}

 

 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3