带有iText的pdf文档损坏

问题描述 投票:0回答:3

[如果有人可以帮助,我在android和iText上会遇到一些问题。

Android应用编写了多个页面,每个页面包含不同的表。而不是允许表格跨越页面,我为每页添加一个表格并为下一页创建一个新表格。这样,我就可以控制页面总数以及页眉和页脚。

我的问题是Android adobe pdf阅读器可以很好地显示文档,而这正是我想要的。但是,当我在电脑上打开一个窗口以访问平板电脑上创建该文件的/ mnt / sdcard文件夹,并使用电脑上的Adobe Reader(adobe reader X)打开文档时,收到一条消息,提示打开此文档时出错。文件已损坏,无法修复。

这非常令人沮丧,我确定正确的列数已添加到表中。我确实使用了colspan和rowspan。不确定是否与此有关。如果我跳过文档的主要部分,它似乎可以正常工作。

iText和Adobe X是否存在已知问题。

我根本不会最终确定表,只使用document.add(table),但是我确实关闭了该文件。 doc.close()。

我也尝试过复制到我的桌面,但没有区别

感谢您的帮助

Pete


我尝试使用iText PDFReader类重新打开该文档,并收到以下错误。

Rebuild failed: trailer not found.; Original message: PDF startxref not found.

经过调查,似乎输出流可能关闭得太早,尽管我不确定为什么它应该在平板电脑中显示。也许它以某种方式连接了文档。如所示打开流

Document document = new Document(PageSize.A4.rotate());
PdfWriter.getInstance(document, new FileOutputStream(Const.PDF_PATH+FILE));
document.open();
document.addTitle("Pilot Flight Logbook");
document.addSubject("Log of all Flights");
document.addKeywords("Java, PDF, iText");
document.addAuthor("ProPilot");
document.addCreator("ProPilot");

这似乎是正确的轨道。如果是这样,如何停止流自动关闭?

android adobe itext
3个回答
1
投票

将平板电脑上的文档文件大小(对于SO而言太大)与在计算机上查看时的文件大小进行比较。您在网站上共享的文件不是完整的PDF。好像在任意位置将其切成两半。也许您没有完全复制它,或者文件大小有一些限制。

无论如何:我在Notepad ++中打开了PDF并滚动到末尾。每个PDF应以%%EOF结尾。您的对象在流对象内的任意位置结束(流对象通常以关键字endstream结尾)。

一旦找到导致PDF截断为8,465字节的原因,您就已经解决了问题。如果您说PDF在平板电脑上正确显示,则罪魁祸首将不是iText。


0
投票

为了确保对流进行了正确的管理,您可能希望尝试将其转换以尝试使用资源块。当您这样做时,它们将在您到达块的末尾时自动关闭,但在您手动将其关闭之前,它们将保持打开状态。像这样的东西:

try (OutputStream oStream = new FileOutputStream(Const.PDF_PATH+FILE)) {
    Document document = new Document(PageSize.A4.rotate());
    PdfWriter.getInstance(document, oStream);
    document.open();
    document.addTitle("Pilot Flight Logbook");
    document.addSubject("Log of all Flights");
    document.addKeywords("Java, PDF, iText");
    document.addAuthor("ProPilot");
    document.addCreator("ProPilot");
    < DO MORE STUFF>
} // your stream will close here

0
投票

我遇到此错误(iText7,Acrobat 11生成的可填充PDF),解决方案是在Acrobat Pro中打开PDF,通过Optimizer工具运行它,剥离不必要的属性,将文件从PDF v1.7降级到v1 .5,取消压缩。只有这样,iReader修改/标记后,Adobe Reader才能打开PDF。

© www.soinside.com 2019 - 2024. All rights reserved.