编辑iText PDF Java

时间:2019-04-23 11:29:43

标签: java pdf itext

我一直试图加载位于“ / resources / pdf /”的PDF文件。我想加载pdf,填写表单字段并返回流。到目前为止,此方法一直有效,没有错误或异常。 问题是当生成的PDF打印后,文档的某些部分丢失了。使用this pdf,它仅打印表单字段,而不打印图像或文本。该代码在结合了Primefaces的tomcat7中运行:

public StreamedContent modify() {
String pdfFile = "mypdf.pdf";
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
    InputStream istream = getClass().getResourceAsStream("/pdf/" + pdfFile);
    PdfReader reader = new PdfReader(istream);

    pdfStamper = new PdfStamper(reader, bos );
    pdfForm = pdfStamper.getAcroFields();

    // fillData();

    pdfStamper.close();
    reader.close();
    istream.close();
    ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
    bis.close();
    bos.close();
    return new DefaultStreamedContent( bis, "application/pdf", "report.pdf" ); 

} catch (Exception ex) {
    ex.printStackTrace();
    return null;
}

我确实以这种方式构建项目:mvn clean install tomcat7:redeploy -DskipTests

有什么想法吗?谢谢。

2 个答案:

答案 0 :(得分:0)

更新: 我只是遇到了同样的问题!经过深入研究,我发现maven破坏了我的PDF文件的编码。我应该更仔细地阅读MKL的评论;-)

我将资源插件添加到了我的maven项目中:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <nonFilteredFileExtensions>
        <!-- Please note that images like jpg, jpeg, gif, bmp and png are (already) implicitly excluded -->
            <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
    </configuration>
</plugin>

旧帖子:

您的帖子缺少重要信息:

  1. 您如何打印report.pdf?来自网络浏览器还是Adobe Reader?请发布report.pdf,以便我们进行分析。
  2. 我了解的是,您发布的代码可以正常运行(没有错误,没有异常)。问题仅在打印时出现 吗?

一枪可能出了什么问题

您没有为流设置编码(例如UTF-8):

return new DefaultStreamedContent( bis, "application/pdf", "report.pdf", "YourEncoding");

并且顺便说一下,原始PDF也存在问题(例如,Preflight报告服务器错误)。

答案 1 :(得分:0)

我终于决定以另一种方式来做。

在项目属性文件中,我添加了一个新属性,以及PDF所在的路径,这样我就可以通过新的FileInputStream使用File加载pdfReader对象 最终代码

public StreamedContent modify() {
    File file = getPdfFile(); 
    PdfReader reader = new PdfReader(new FileInputStream(file));
    pdfStamper = new PdfStamper(reader, bos );
    // fillData();
    pdfStamper.close();
    bos.close();
    ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
    return new DefaultStreamedContent( bis, "application/pdf", "report.pdf" );
}

public File getPdfFile() {
    try {
        Properties prop = new Properties();
        prop.load(getClass().getClassLoader()
               .getResourceAsStream("myfile.properties"));
        String pdfPath = prop.getProperty("pdf.path");
        String pdfName = prop.getProperty("pdf.name");
        File file = new File(pdfPath + pdfName);

        return file;
    } catch (Exception ex) {
        LOGGER.error("ERROR: " + ex.getMessage());
        return null;
    }
}

非常感谢! 问候