2014-02-23 59 views
0

我有一些問題與Android和iText,如果有人可以幫助請。腐敗pdf文檔與iText

android應用程序寫入多個頁面,每個頁面都包含不同的表格。我不是讓一張表跨越一頁,而是爲每一頁添加一張表,併爲下一頁創建一張新表。這樣我就可以控制頁面總數和頁眉和頁腳。

我遇到的問題是Android adobe pdf閱讀器顯示的文檔很好,正是我在尋找的。但是,當我在我的電腦上打開一個窗口訪問平板電腦上創建文件的/ mnt/sdcard文件夾,並使用我的電腦,Adobe Reader X上的Adobe閱讀器打開文檔時,會出現一條消息,內容爲 打開此文檔時出錯。該文件已損壞,無法修復。

這是非常令人沮喪的,我確定將正確的列數添加到表中。我確實使用了colspan和rowspan。不知道這是否與它有關。如果我跳過文檔的主要部分,它似乎工作正常。

是否有已知的與iText的和Adobe X.

我沒有完成的表在所有問題,只需使用document.add(表),但我不關閉該文檔。 doc.close()。

我也曾嘗試複製到我的桌面,但沒有什麼區別

感謝所有幫助

皮特


我試圖重新打開與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"); 

這似乎是正確的軌道。如果是這樣,我怎樣才能停止自動關閉流?

+0

請提供有問題的pdf和代碼,如果可能,請將其解析爲[sscce](http://www.sscce.org/)。 – mkl

+0

對不起,不可能。源在這裏太大了。是否有某個程序檢查pdf的錯誤,即Adobe爲什麼反對它。\ n文件在這裏http://w2.peterbambrook.co.uk:8080/documents/ProPilot%20Logbook.pdf – PeterB

回答

1

在您的計算機上查看文檔時,將平板電腦上文檔的文件大小(您看到它對於SO來說太大了)與其文件大小進行比較。您在網站上分享的文件不是完整的PDF。它看起來好像在任意的地方被切成兩半。也許你沒有完全複製它,或者對文件大小有一些限制。

無論如何:我在Notepad ++中打開了您的PDF並滾動到最後。每個PDF應以%%EOF結尾。你的結束在流對象中的任意位置(流對象通常以關鍵字endstream結尾)。

一旦你發現是什麼原因導致你的PDF被截斷爲8,465字節,你已經解決了你的問題。如果您說PDF在平板電腦上正確顯示,罪魁禍首將不會是iText。

+0

8,465字節?有趣的大小。 – mkl

+0

更新的位。看來,如果我關閉平板電腦並重新啓動它,然後從PC上打開文檔就可以正常工作。所以不知何故,當我使用doc.close()它實際上並沒有沖洗和最終化文檔。 Android中是否有強制完成文件的方法?我想這就是爲什麼它在表格PDF閱讀器中工作的原因,它以某種方式從內存緩衝區中獲取文檔的其餘部分。任何想法,請幫助。 – PeterB

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