如何使用Xfa向pdf文档添加中文内容?

zxshhuman 2009-11-05 03:20:17
这是一个关于xfa的问题。着急用,看看那位了解这方面知识的大侠能够帮助解答一下。

文件“zhangxu_org2.pdf”是用adobe designer生成的pdf文件。文件“zhangxu_org2.xml”是符合xfa规范要求的纯文本文件,全部内容如下
<xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">
<xfa:data>
<form1>
<OrgPage>
<SubPage2>
<textfild1>zhangxu</textfild1>
<textfild1>Tom</textfild1>
<textfild1>Marry</textfild1>
<textfild1>Mala</textfild1>
</SubPage2>
<pageAllRows>
<oneRow>
<textfild1>Company 1</textfild1>
<textfild1>Company 2</textfild1>
<textfild1>company 3</textfild1>
</oneRow>
<oneRow>
<textfild1>Company 4</textfild1>
<textfild1>Company 5</textfild1>
<textfild1>company 6</textfild1>
</oneRow>
<oneRow>
<textfild1>Company 7</textfild1>
<textfild1>Company 8</textfild1>
<textfild1>company 9</textfild1>
</oneRow>
</pageAllRows>
</OrgPage>
</form1>
</xfa:data>
</xfa:datasets>

在使用下面的代码操作后,能够把数据正确导入pdf文件里,生成的"filled_xfa_zhangxu_org2.pdf"并能正常打开。但是当我把“zhangxu”从英文修改为中文“张某”后。使用下面的代码操作后,生成的"filled_xfa_zhangxu_org2.pdf"就不能打开了。报“xml解析错误:格式错误(无效的标记)(错误代码4),文件的第182行的第24列”错误。
请问,下面代码如何修改可以防止这个错误的发生。




import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.PRStream;
import com.lowagie.text.pdf.PdfArray;
import com.lowagie.text.pdf.PdfDictionary;
import com.lowagie.text.pdf.PdfName;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;

public class FillDynamicXfa {
public static final String RESOURCE_PDF = "zhangxu_org2.pdf";
public static final String RESOURCE_DATA = "zhangxu_org2.xml";
public static final String RESULT = "filled_xfa_zhangxu_org2.pdf";

public static void main(String[] args) {
try {
PdfReader reader = new PdfReader(RESOURCE_PDF);
File file = new File(RESOURCE_DATA);
byte[] data = new byte[(int)file.length()];
FileInputStream is = new FileInputStream(file);
int offset = 0;
int numRead = 0;
int datalength = data.length;
while (offset < datalength
&& (numRead=is.read(data, offset, datalength - offset)) >= 0) {
offset += numRead;
}
PdfDictionary root = reader.getCatalog();
PdfDictionary acroform = root.getAsDict(PdfName.ACROFORM);
PdfArray xfa = acroform.getAsArray(PdfName.XFA);
for (int i = 0; i < xfa.size(); i += 2) {
if ("datasets".equals(xfa.getAsString(i).toString())) {
PRStream s = (PRStream)xfa.getAsStream(i + 1);
s.setData(data);
}
}
PdfStamper stamper = new PdfStamper(reader,
new FileOutputStream(RESULT));
stamper.close();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
System.out.println("Done");
}
}

下面是上面例子的另外一个一模一样的版本,如果哪位大侠需要运行可以从这个链接下载所需的pdf文件,和xml文件和源代码。
http://www.1t3xt.info/examples/browse/?page=example&id=433
需要的jar包是iText-2.1.7.jar
http://www.lowagie.com/iText/download.html
...全文
245 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxshhuman 2009-11-07
  • 打赏
  • 举报
回复
问题我已经搞定,因为itext使用的是UTF-8编码。所以只要把data 编码转化为UTF-8即可。
全面的功能XFA表单填写 ——XFA (XML表单架构)表单允许您充分利用其表单特性进行表单填写、数据导入/导出等操作。 高性能 ——以超过其它PDF工具3倍的速度把200多种常用办公文件类型转换为PDF文件,并且还能一次选择多个文件进行PDF文件转换。 一键转换 ——一键点击,即刻把Microsoft(微软)办公软件中的Word,PowerPoint?和Excel?文件转换为PDF格式。 直接编辑 ——直接修改现有PDF文档,例如删除/添加页面、 拆分/合并组建新的PDF文档等。 安全性能高 ——通过密码保护、证书加密,以及数字签名工具保护文件的安全性。 表单设计 ——易于使用的电子表单设计工具让您的办公表单工作更加有效;您可以创建或转换静态PDF文件为具有专业外观的表单;表单数据导入工具允许数据自动导入至表单,降低手动输入的可能失误。 表单功能创建 ——您可以自定义JavaScript功能以获得更多的定制选项,您可以连接数据库以插入新的数据、更新信息及删除数据库条目。 OCR文本识别 ——支持OCR功能,使得扫描或基于图像的PDF文件具有可选择性和可搜索性。 导出PDF为DOC、文本格式和图像格式 ——与其它程序轻松共享PDF文档内容,例如办公软件Microsoft? Word?。 PDF/A验证 ——验证PDF文档是否符合PDF/A-1a或PDF/A-1b标准,以满足长期存档的需求。 PDF优化 ——优化PDF文档,缩小文件大小。 批量创建PDF文件 ——您可以从多文件创建PDF文件,也可以从扫描仪中直接创建PDF文件。 PDF审阅 ——在现有PDF文件中插入注释、高亮、图章等。 设置文档属性信息 ——便于归档及搜索PDF文件。: 邮件及电话支持 ——方便您随时联系我们,为您服务

51,407

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧