【问题标题】:Itextpdf stop transform pdf correctlyItextpdf 停止正确转换 pdf
【发布时间】:2015-03-06 12:17:48
【问题描述】:

我有一个关于 itextpdf 的下一个问题。

private void generatePdf() throws Exception {
    FileOutputStream fos = null;
    try {
        PdfReader reader = new PdfReader("template.pdf");
        fos = new FileOutputStream("test.pdf");
        PdfStamper stamper = new PdfStamper(reader, fos);

        stamper.close();
    } catch (Exception e) {
        throw e;
    } finally {
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e) {
                throw new Exception(e);
            }
        }
    }
}

此方法必须读取模板并将其保存为新的 pdf。但是,如果我查看结果 pdf,我只会看到空白页(4 - 与模板的数量相同)。 有趣的是,在 jboss 服务器上的 Web 应用程序上下文中调用此方法。但是,当我在简单的 java 应用程序(带有 main() 方法的类)中像 main 方法一样调用此方法时,它可以正常工作。 另外,我可以添加什么模板具有将来必须填写但现在没有任何编辑的可编辑字段。 任何人都可以假设这里有什么问题吗?

最好的问候, 谢尔盖

【问题讨论】:

  • 可以分享一下template.pdf和输出的test.pdf吗?
  • 好的,首先我使用当前的 iText 版本(您的 5.0.6 很古老,我使用当前的 5.5.6 开发快照)运行您的程序,输出看起来像一个会期望。你应该考虑更新。我会看看你的输出,看看里面有什么问题。
  • 我已将 lib 版本更新为 5.5.5,但结果相同。链接到结果文件 - drive.google.com/file/d/0B3-DPMN-iMOmdlZhMWpJejNwM3c/…
  • 在这两种情况下,代码超过 128 的字符都会被破坏。看起来该文件在某处被视为文本,像 Latin1 编码一样加载,并使用 UTF-8 存储,这是大小爆炸的一个原因。不过,交叉引用条目似乎是正确的。这使我假设模板已经以缺陷方式提供给代码。您是如何将模板 PDF 提供给服务器的?您能检查该模板是否还没有损坏吗?你是否在那里使用相同的代码,尤其是你是否也在那里使用new PdfReader("template.pdf") 阅读模板?

标签: java pdf jboss itext itextpdf


【解决方案1】:

原因

在 cmets 中,事实证明 OP 在 maven 中创建了他的 Web 应用程序,template.pdf 文件作为 maven 资源提供,并且激活了资源的过滤(即文本变量替换)。

不幸的是,过滤资源意味着资源文件被视为最终使用 UTF-8 字符编码存储的文本文件。

这实质上破坏了所有压缩流内容(尤其是页面内容和字体程序)和一些元信息字符串,并且还导致交叉引用不正确(写入为 UTF-8 引入了偏移偏移的额外字节)。

在为损坏的文件创建交叉引用表后,iText 仍然可以读取 PDF,因为在这些流和字符串之外,结构仍然正确。因此,写入读取损坏的 PDF 的结果包含正确的页数和一些表单域,但页面内容丢失了。

治疗

解决方案是不过滤 PDF 资源。这可以例如按照 Apache Maven 网站上here 的说明完成:

默认情况下,带有扩展名(jpg、jpeg、gif、bmp 和 png)的文件将不再被过滤。

用户可以通过以下配置添加一些额外的文件扩展名以不应用过滤:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.7</version>
        <configuration>
          ...
          <nonFilteredFileExtensions>
            <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
            <nonFilteredFileExtension>swf</nonFilteredFileExtension>
          </nonFilteredFileExtensions>
          ...
        </configuration>
      </plugin>
    </plugins>
    ...
  </build>
  ...
</project>

【讨论】:

    猜你喜欢
    • 2017-05-10
    • 2023-02-07
    • 2018-04-07
    • 1970-01-01
    • 2021-01-15
    • 2018-01-14
    • 2014-01-11
    • 2012-10-01
    相关资源
    最近更新 更多