解决部分浏览器不能显示itext生成的PDF文件文本域内容问题
利用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();
}
解决部分浏览器不能显示itext生成的PDF文件文本域内容问题的更多相关文章
- php+tcpdf如何把生成的pdf文件保存在服务端
tcpdf组件目前应用得非常广泛,但是对于如何把生成的pdf文件自动保存在服务端却很少有人提及.让我们先来看看标准输出代码: //服务器存档模式 $pdf->Output('output.p ...
- 使用iText库创建PDF文件
前言 译文连接:http://howtodoinjava.com/apache-commons/create-pdf-files-in-java-itext-tutorial/ 对于excel文件的读 ...
- 利用 Pandoc 将 Markdown 生成 Word/PDF 文件
Pandoc 是一个格式转化工具,可以用于各(luan)种(qi)各(ba)样(zao)的文件转换, 反正我是认不全官网上的那个图(傲娇脸), 之前一直使用它将 Markdown 文件转换成 Html ...
- iText C# 合并PDF文件流,以及A5变A4时内容默认放在最底下的问题的解决方法;ASP.NET 实现Base64文件流下载PDF
/// <summary> 合併PDF檔(集合) </summary> /// <param name="files">欲合併PDF檔之集合(一 ...
- winform 替换word文档中的字段(包含图片添加),生成导出PDF文件(也可是word文件)
1.先打开你需要替换的word文档,在想要后续更换字段值的地方添加“书签”. 2.将模板文档存放在 程序的Debug文件下. 3.生成文件的按钮点击事件 代码: string templatePath ...
- 解决IE浏览器“无法显示此网页”的问题
诊断后提示:远程计算机或设备不接受连接 其他浏览器可以正常使用,QQ什么的也都正常,只有IE不能上网诊断提示:远程计算机或设备将不接受连接 ,网上找了好多方法都行不通.最后发现了这种方法,问题简单解决 ...
- iText实现导出pdf文件java代码实现例子
///////////////////////////////////主类////////////////////////////////////////// package com.iText; i ...
- 修改VS2010生成的dll文件中的内容
我的电脑是64为的操作系统,所以先找到下面的路径 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 找到这个文件:ildasm.exe,如 ...
- 文本域内容在div中带换行显示
function ReplaceSeperator(mobiles) { var i; var result = ""; var c; for (i = 0; i < mob ...
随机推荐
- java-swingButton
package com.http; import java.awt.*; import java.awt.event.*; import javax.swing.*; import com.http. ...
- AQS共享锁应用之Semaphore原理
我们调用Semaphore方法时,其实是在间接调用其内部类或AQS方法执行的.Semaphore类结构与ReetrantLock类相似,内部类Sync继承自AQS,然后其子类FairSync和NoFa ...
- AngularJS系统学习之$watch(监控)
在scope的内置的所有函数中,用的最多的可能就是$watch函数了, 当你的数据模型中某一部分发生变化时,$watch函数可以向你发出通知. 你可以监控单个对象的属性,亦可以监控需要经过计算的结果( ...
- codevs-2235
2235 机票打折 题目描述 Description .输入机票原价(3到4位的正整数,单位:元),再输入机票打折率(小数点后最多一位数字).编程计算打折后机票的实际价格(单位:元.计算结果要将个位数 ...
- 2.6 hive分区表
一.背景 ######### 分区表实际上就是对应一个HDFS文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件. Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成更小的数据集. ...
- Python 之IO模型
阻塞IO模型:以前写的套接字通信都是阻塞型的.通过并发提高效率 非阻塞IO模型: from socket import * # 并不推荐使用,一是消耗cpu资源,二是会响应延迟 server = so ...
- c/c++面试19-22----inline的那些事儿
19 为什么引入内联函数 a:宏定义为什么效率高 通常替代c语言中表达式形式的宏定义来解决程序函数调用问题,使用的是预处理器实现,没有参数压栈等到做. 缺点: (1) 仅仅进行简单的替换,不能进行参数 ...
- Flutter实战视频-移动电商-37.路由_Fluro引入和商品详细页建立
37.路由_Fluro引入和商品详细页建立 https://github.com/theyakka/fluro pages/details_page.dart新建页面 使用路由 先添加路由插件的引用 ...
- DOM学习笔记(一)DOM树
DOM 定义了访问和操作 HTML 文档的标准方法. HTML 文档中的所有内容都是节点,将 HTML 文档表达为树结构,称为节点树 HTML DOM 树 HTML DOM 是关于如何获取.修改.添加 ...
- 201621123016 《Java程序设计》第5周学习总结
1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 关键字:接口,多态,Comparable,Comparator 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一般不 ...