Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java创建复杂的pdf_Java_Pdf Generation_Itext - Fatal编程技术网

使用java创建复杂的pdf

使用java创建复杂的pdf,java,pdf-generation,itext,Java,Pdf Generation,Itext,我有一个基于Java/JavaEE的应用程序,其中我需要为将提供给用户的各种服务创建PDF证书。我正在寻找一种方法来创建PDF(现在不需要数字证书) 最简单方便的方法是什么?我试过了 XSL到pdf的转换 使用itext将HTML转换为PDF 原始java方式(使用PDFWriter、PdfPCell等) 最好的解决方法是什么,或者还有其他更简单、更方便的方法吗?使用iText pdf库创建pdf,您可以轻松地从该api生成pdf。这里是链接 Text®是一个允许您创建和操作PDF文档的库。它

我有一个基于Java/JavaEE的应用程序,其中我需要为将提供给用户的各种服务创建PDF证书。我正在寻找一种方法来创建PDF(现在不需要数字证书)

最简单方便的方法是什么?我试过了

  • XSL到pdf的转换
  • 使用itext将HTML转换为PDF
  • 原始java方式(使用PDFWriter、PdfPCell等)

  • 最好的解决方法是什么,或者还有其他更简单、更方便的方法吗?

    使用iText pdf库创建pdf,您可以轻松地从该api生成pdf。这里是链接

    Text®是一个允许您创建和操作PDF文档的库。它使开发人员能够通过动态PDF文档生成和/或操作来增强web和其他应用程序

    开发人员可以使用iText来:

    将PDF提供给浏览器

    从XML文件或数据库生成动态文档

    使用PDF的许多交互功能

    添加书签、页码、水印等

    拆分、连接和操作PDF页面

    自动填写PDF表单


    将数字签名添加到PDF文件

    尝试使用Jasper Reports mate。请访问

    我推荐第一种方法:XSL到pdf转换,这是最强大的。我有丰富的经验,能够通过使用优雅地生成大量PDF报告(每一份都有数千页),我认为这已经足够好了,而且相当简单(但需要一些相关知识)。

    当您谈论证书时,我想到的标准表对于每个证书接收者来说都是相同的,除了:

    • 接收者的姓名
    • 接受者遵循的路线
    • 约会
    如果是这样的话,我会使用任何工具来创建一个高级证书(Acrobat、Open Office、Adobe InDesign等),并创建一个包含三个字段的静态表单(有时称为AcroForm):名称、课程、日期

    然后,我将使用iText填充如下字段:

    PdfReader reader = new PdfReader(pathToCertificateTemplate);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(pathToCertificate));
    AcroFields form = stamper.getAcroFields();
    form.setField("name", name);
    form.setField("course", course);
    form.setField("date", date);
    stamper.setFormFlattening(true);
    stamper.close();
    reader.close();
    
    从代码创建这样一个证书是“艰难的道路”;从XML创建这样的证书是“一件痛苦的事”(因为XML不适合定义布局),使用iText的XML Worker可以从(HTML+CSS)创建证书,但所有这些解决方案都有一个缺点,即很难正确定位每个项,确保所有内容都适合同一页面,等等

    使用固定字段维护模板要容易得多。这样,您只需编写一次代码。如果出于某种原因想要将字段移动到另一个位置,只需更改模板,就不必担心在代码、XML、HTML或CSS中出现混乱


    有关更多信息,请参阅(第6.3.5节)。

    您提到的PDF可能很复杂。如果这与可变性或布局有关,则提供基于模板的合理复杂布局和控件的一个选项是。您可以为Docmosis提供doc或odt文件作为模板,这样它们很容易更改,并且可以调用Docmosis-to-mail-merge来创建pdf或其他格式。请不要这样,我在创建Docmosis的公司工作


    希望能有所帮助。

    尽管这是一个老问题,但我认为应该解决

    创建非常复杂的pdf,如证书、报告或付款单等。 您完全可以使用动态报告库。该库依赖于jasper reports(这也是非常流行和古老的库)。动态报告将为您提供使用java代码设计文档的功能,以便您可以轻松地根据需要进行操作或更改

    在他们的网站上有很多例子,很容易从中学习

    以下是它的链接:


    Bruno Lowagie指出了一种生成模板的好方法,该模板对于所有数据基本相同,需要填充。但是,Bruno Lowagie建议使用iText作为库来填充字段。对我来说,就像对Ankit一样,这个许可证是我不得不选择另一个库的一个问题。在下文中,我有一个逐步指南,介绍如何使用Apaches PdfBox创建模板并用数据填充模板

        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.16</version>
        </dependency>
    
    
    org.apache.pdfbox
    pdfbox
    2.0.16
    
  • 使用libreofficewriter创建模板。对于占位符,请使用 文本框(视图>>工具栏>>表单控件)。这将按照Bruno Lowagie的建议创建带有AcroForms的PDF

  • 为每个文本框设置一个名称。将只读设置为true

  • 将文档另存为PDF

  • 使用PdfBox读取PDF模板并设置 文本框

    InputStream is = getClass().getClassLoader().getResourceAsStream("Template.pdf");
    
    try {
        PDDocument pDDocument = PDDocument.load(is);
        PDAcroForm pDAcroForm = pDDocument.getDocumentCatalog().getAcroForm();
    
        PDField fieldName = pDAcroForm.getField("name");
        fieldName.setValue("FirstName Surname"); // <-- Replacement
    
        pDDocument.save(outStream);
        pDDocument.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    
    InputStream is=getClass().getClassLoader().getResourceAsStream(“Template.pdf”);
    试一试{
    PDDocument PDDocument=PDDocument.load(is);
    PDAcroForm PDAcroForm=pDDocument.getDocumentCatalog().getAcroForm();
    pdfieldname=pDAcroForm.getField(“名称”);
    
    fieldName.setValue(“FirstName姓氏”);//对于HTML到PDF,你应该试试飞碟:最简单和方便的方法取决于你想要的灵活性。如果那些“证书”如果允许包含PDF格式的任何内容,您将不得不采用粗糙的Java方式,无论是使用您引用的类名暗示的iText,还是使用另一个像样的PDF库如果是简单的文本,没有什么特别之处,脚本解决方案可能更合适。XSL或JasperReport都有它们的优点。在我看来,HTML->PDF只有在您不得不获取HTMLn格式的证书模板时才是明智的。我还发现XSL到PDF的转换很顺利,但我发现创建XSL很麻烦任务中,是否有更简单的方法来创建xsl,或者只需手动创建?xsl有点麻烦,但一旦完成,您可以反复使用它。此外,您还可以