【问题标题】:iText - adding Image element generates a corrupt PDF fileiText - 添加图像元素会生成损坏的 PDF 文件
【发布时间】:2014-08-07 13:41:47
【问题描述】:

我正在使用 iText® 5.2.1 ©2000-2012 1T3XT BVBA 和 Integration Designer 8.0 创建一个以字节数组导出的 PDF 文件。

我正在创建一个包含大量文本的文档,并希望在开头添加一个徽标。

添加图片的部分代码如下:

BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(Stringovi.SLIKA1);
Image image1 = Image.getInstance(decodedBytes);
image1.setAbsolutePosition(30f, 770f);
image1.scalePercent(60f);
document.add(image1);

由于系统要求,输入图像为字节数组格式。 文档的其余部分由具有各种内容的不同表格组成,并且都是文本。 当我以前面提到的方式添加图像时,程序完成,我得到一个字节输出,我通过 Base64 解码器运行。生成的 PDF 无法打开,显示的错误是:

 "Error [PDF Structure 40]:Invalid reference table (xref)"

我看不出我的错误在哪里,所以如果有人能如此友善并指出我正确的方向,我将非常感激。

【问题讨论】:

  • 请提供损坏的文档以供分析。
  • 请注意,所有 5.2.x 版本已从官方下载存储库中删除:itextpdf.com/changelog/52 我引用:重要提示:我们已从 SourceForge 中删除所有 5.2.x 版本,因为大型 PDF 文件的主要问题。请不要使用 iText 5.2.0 或 5.2.1!
  • 这是损坏的文档file
  • @BrunoLowagie 尝试使用其他版本的 iText 并出现同样的问题。

标签: image pdf-generation bytearray itext


【解决方案1】:

您作为“损坏的 PDF 文件”提交的文档不是完整的 PDF 文件。它不以%%EOF 结尾,它没有交叉引用表,......这是一个不完整的PDF 文档。

这意味着您的代码中没有以下行:

document.close();

如果您确实有此行,则无法到达。例如:抛出异常导致代码跳转到catch 子句,跳过close() 操作。

Invalid reference table (xref) 的错误消息与该诊断一致。这不是由 iText 引起的问题。这是由错误编码引起的问题:未关闭文档和/或未正确处理异常。

【讨论】:

  • 嗯,我确实有这条线,它已经到达。在该行之后,我有一个 System.out 打印文档已关闭。
  • 在这种情况下,您关闭文档后会删除 PDF 的结尾。例如:也许您正在以仅考虑前 X 个字节并丢弃后续字节的方式复制字节。无论如何:您共享的 PDF 不是完整的 PDF:它是半个 PDF。
  • 现在我觉得有点傻。我得到了正确的输出,但是在从 Integration Designer 进行复制/粘贴时,基本副本没有选择整个输出,所以我错过了文件的结尾。谢谢你的帮助,它让我意识到我的错误。
猜你喜欢
  • 2012-01-04
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 2017-12-19
  • 2023-04-08
  • 2012-12-01
相关资源
最近更新 更多