栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

iText将文档与Acrofields合并

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

iText将文档与Acrofields合并

根据您的确切需求,可能会出现不同的情况,但是无论如何:您做错了。您应该使用

PdfCopy
PdfSmartCopy
合并文档。

下面的视频教程介绍了不同的情况。

您可以在iText沙箱中找到大多数示例。

合并不同的表单(具有不同的字段)

如果要合并 不同的
表单而不使其变平,则应

PdfCopy
按照MergeForms示例中的操作使用:

public void createPdf(String filename, PdfReader[] readers) throws IOException, documentException {    document document = new document();    PdfCopy copy = new PdfCopy(document, new FileOutputStream(filename));    copy.setMergeFields();    document.open();    for (PdfReader reader : readers) {        copy.adddocument(reader);    }    document.close();    for (PdfReader reader : readers) {        reader.close();    }}

在这种情况下,

readers
是一个
PdfReader
包含 不同
形式(具有不同字段名称)的实例数组,因此我们使用
PdfCopy
并确保不会忘记使用该
setMergeFields()
方法,否则将不会复制字段。

合并相同的表单(具有相同的字段)

在这种情况下,我们需要重命名字段,因为我们可能希望在不同页面上使用不同的值。在PDF中,一个字段只能有一个值。如果合并相同的表单,则您将在同一字段中具有多个可视化,但是
每个可视化将显示相同的值 (因为实际上,只有一个字段)。

让我们看一下MergeForms2示例:

public void manipulatePdf(String src, String dest) throws IOException, documentException {    document document = new document();    PdfCopy copy = new PdfSmartCopy(document, new FileOutputStream(dest));    copy.setMergeFields();    document.open();    List<PdfReader> readers = new ArrayList<PdfReader>();    for (int i = 0; i < 3; ) {        PdfReader reader = new PdfReader(renameFields(src, ++i));        readers.add(reader);        copy.adddocument(reader);    }    document.close();    for (PdfReader reader : readers) {        reader.close();    }}public byte[] renameFields(String src, int i) throws IOException, documentException {    ByteArrayOutputStream baos = new ByteArrayOutputStream();    PdfReader reader = new PdfReader(src);    PdfStamper stamper = new PdfStamper(reader, baos);    AcroFields form = stamper.getAcroFields();    Set<String> keys = new HashSet<String>(form.getFields().keySet());    for (String key : keys) {        form.renameField(key, String.format("%s_%d", key, i));    }    stamper.close();    reader.close();    return baos.toByteArray();}

如您所见,该

renameFields()
方法在内存中创建一个新文档。该文档将使用与其他文档合并
PdfSmartCopy
。如果您在
PdfCopy
这里使用,您的文档将会be肿(我们很快就会发现)。

合并拼合形式

在FillFlattenMerge1中,我们使用填写表格

PdfStamper
。结果是一个PDF文件,该文件保留在内存中,并使用合并
PdfCopy
。如果您要合并其他表单,虽然此示例很好,但这实际上是有关
如何不进行 合并的示例(如视频教程中所述)。

该FillFlattenMerge2显示了如何合并所填写正确扁平相同的形式:

public void manipulatePdf(String src, String dest) throws documentException, IOException {    document document = new document();    PdfCopy copy = new PdfSmartCopy(document, new FileOutputStream(dest));    document.open();    ByteArrayOutputStream baos;    PdfReader reader;    PdfStamper stamper;    AcroFields fields;    StringTokenizer tokenizer;    BufferedReader br = new BufferedReader(new FileReader(DATA));    String line = br.readLine();    while ((line = br.readLine()) != null) {        // create a PDF in memory        baos = new ByteArrayOutputStream();        reader = new PdfReader(SRC);        stamper = new PdfStamper(reader, baos);        fields = stamper.getAcroFields();        tokenizer = new StringTokenizer(line, ";");        fields.setField("name", tokenizer.nextToken());        fields.setField("abbr", tokenizer.nextToken());        fields.setField("capital", tokenizer.nextToken());        fields.setField("city", tokenizer.nextToken());        fields.setField("population", tokenizer.nextToken());        fields.setField("surface", tokenizer.nextToken());        fields.setField("timezone1", tokenizer.nextToken());        fields.setField("timezone2", tokenizer.nextToken());        fields.setField("dst", tokenizer.nextToken());        stamper.setFormFlattening(true);        stamper.close();        reader.close();        // add the PDF to PdfCopy        reader = new PdfReader(baos.toByteArray());        copy.adddocument(reader);        reader.close();    }    br.close();    document.close();}

这是三种情况。对于任何人来说,您的问题都不清楚,但是您可以决定哪种方案最适合您的需求。我建议您在编码之前花点时间学习。观看视频,尝试示例,如果仍然有疑问,可以提出更聪明的问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485744.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号