当前位置: 首页 > 知识库问答 >
问题:

iText:PDF生成。一个模板。更多的投入。一个输出

长孙绍辉
2023-03-14

我尝试用iText生成一个pdf。首先,我读入一个现有的模板,并在方法stampformular(Formular Formular,PdfStamper stamper)中标记公式。邮票法有效。但是我有一个问题,在输出文件中添加更多的公式。

我想为每个公式加盖PDF模板“黄色”。所以我尝试了document.add(),但这不起作用。所以我试着用pdf Writer来做这件事。但这对。任何想法我可以用一个公式数据戳pdf模板,制作一个新的页面,并用下一个公式数据戳相同的pdf模板。

public static File createForm(List<Fomular> formulars) {
        Document document = new Document();
        File pdf = null;

        document.open();

        try {
            PdfReader pdfTemplate = new PdfReader('YELLOW');
            PdfStamper stamper = new PdfStamper(pdfTemplate,
                    new FileOutputStream("output.pdf"));
            PdfWriter writer;
            for (Formular f : formulars) {
                stamper = stampFormular(f, stamper);
                writer = stamper.getWriter();
                writer.newPage();
            }

            stamper.close();
            pdfTemplate.close();
            pdf = new File("output.pdf");
            Desktop.getDesktop().open(pdf);
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
        }
        return pdf;
    }

共有1个答案

卢聪
2023-03-14

以下几点观察:

您不能从pdfstamper中获取pdfwriter对象,使用newpage()并期望它工作。这相当于打开你的汽车引擎盖,开始重新布线管,而不知道任何关于汽车维修的艺术。当要向stamper添加新页时,应该使用insertpage()方法,如文档中所述。

第二个观察:你没有告诉我们你是否在扁平化表单的内容。如果您这样做了,那么它很简单,只需使用文档中提到的示例,您就完全设置好了。换句话说:将pdfstamperpdfsmartcopy结合起来。特别是如果您反复使用相同的模板,pdfsmartcopy会给出比pdfcopy好得多的结果,原因在第6章中解释。

假设您的模板需要保持交互式,那么您可能会遇到一个问题,原因在本章也有解释:具有特定名称的字段的不同可视化必须始终具有相同的值。例如:如果模板有一个名为name的字段,那么该字段在文档中的每一次出现都必须具有相同的值。如果不希望这样,则需要将name重命名为name1name2等。

需要保持交互式的模板的连接以前是通过pdfcopyfields完成的(请参见文档)。在这里,文档有些过时。在iText的最新版本中,我们现在在pdfcopypdfsmartcopy中有一个方法addDocument()。此方法允许您一次添加完整的文档,同时保留交互性。

 类似资料:
  • 问题内容: 我有一个非常基本的模板(basic_template.html),并希望使用使用另一部分模板格式化的数据来填写。basic_template.html可能包含使用部分模板格式化的几件事。 我应该如何在views.py中构建代码? 我这样做的原因是稍后将使用Ajax填充。我这样做对吗? 问题答案: 你可以做: 另一个Django模板在哪里。在这里,你可以放入将用Ajax获得的HTML。

  • 我有一个模板类,其中每个模板参数代表内部计算可以处理的一种类型的值。需要模板(而不是函数重载),因为值被作为::any传递,并且它们的类型在运行时之前不清楚。 为了正确地转换为正确的类型,我希望每个变量参数类型都有一个成员列表,类似于这样: 或者,我想将模板参数类型存储在一个列表中,以便对其进行RTTI处理(?)。但如何将它们保存在std::initializer\u列表成员中,我也不清楚。 谢谢

  • 完成了教程-历史 的学习之后, 我们来到 my-hello [仓库]里面,就是我们在 教程-克隆中 [克隆] 得到的。 在 Mercurial 开发实践中一个好的做法是把每个变更隔离在各自的仓库里。这样可以避免把不相关的代码混杂起来, 并且便于一个接一个的测试每一部分工作。我们现在就开始采用这一模式。 我们的目标很简单,让“hello, world”程序打印另外一行输出。 首先, 我们给这个小项目

  • 本文向大家介绍python实现一行输入多个值和一行输出多个值的例子,包括了python实现一行输入多个值和一行输出多个值的例子的使用技巧和注意事项,需要的朋友参考一下 注:以下内容在python3中操作 一. 一行输入多个值 具体操作如下: 具体操作如下: 补充split( ): 二. 一行输出多个值 注:python中print()会自动换行,具体如下: 具体操作如下: 以上这篇python实现

  • 问题内容: 我正在建立一个包括条目之间关系的通讯簿。我为个人,公司,场地和角色有单独的模型。在我的索引页面上,我想列出每个模型的所有实例,然后对其进行过滤。这样一个人可以轻松地搜索和查找条目。我已经能够使用通用视图列出单个模型,并使用get_extra_context显示另一个模型: 我还可以使用自定义视图列出单个模型: 这是这两个测试的urls.py: 所以我的问题是“如何修改此参数以将更多模型

  • 我想有一个可变的类模板来生成每种类型的一个方法,例如像下面这样的类模板: 将使方法