2016-03-21 32 views
0

需要獲取PDF中每個頁面的偏移量和字節長度。例如,首頁偏移值將爲0,長度將爲頁面的字節長度。使用偏移量和長度拆分PDF - IBM ONDEMAND(組合PDF)

我有一個要求將PDF索引文件傳遞給IBM Ondemand工具,它是一個PDF存儲庫。我需要合併各個PDF文件計算每個PDF的偏移量和長度,使用這兩個參數創建索引文件並將其傳遞給工具。

該工具將利用索引文件基於作爲屬性(索引文件)傳遞的偏移量和長度來拆分PDF(多個PDF合併爲單個)。

我用itext來使用書籤獲取頁面的開始和結束。需要計算每個頁面的偏移量和字節長度。

建議是否有任何方式獲取索引(頁面的開始)和頁面結尾的字節。

任何幫助,將不勝感激

+0

是我還是這個問題只是無意義?你能改說嗎?似乎你對PDF文件格式有錯誤的假設。 –

回答

0

你不能這樣做的任何方式。請閱讀PDF文件格式規範(此處在其他地方http://www.adobe.com/devnet/pdf/pdf_reference.html)。

PDF文件包含「對象」,並且一個頁面同時具有記錄在流對象中的頁面描述,並且可以(並且大部分將)使用很可能分散在文件周圍的各種其他對象。

您誤解了PDF文件是如何構建的,而且您需要了解在開始嘗試實現這個過程之前遇到的困難,否則您將浪費大量時間。

0

此問題需要在IBM Ondemand論壇上提問。我以爲我可以利用Itext來破解它。正如David所言,我們無法通過使用Itext來處理這些非結構化PDF。下面給出解決問題的代碼片段。

這兩個PDF都是使用純java合併的。合併的文件將有兩個EOF,頭和尾部信息。

當您在Acrobat中打開它時,它將讀取最近的文檔信息並顯示。當我們將長度和索引傳遞給ondemand時,它將分割PDF並按預期顯示。

public static void main(String[] args) throws IOException { 
    String sourceFile1Path = "C:\\sample1.PDF"; 
    String sourceFile2Path = "C:\\sample1.PDF"; 

    String mergedFilePath = "C:\\merged.PDF"; 

    File[] files = new File[2]; 
    files[0] = new File(sourceFile1Path); 
    files[1] = new File(sourceFile2Path); 

    File mergedFile = new File(mergedFilePath); 
    for (File file : files) { 
     FileWriter fstream = null; 
     BufferedWriter out = null; 
     fstream = new FileWriter(mergedFile, true); 
     out = new BufferedWriter(fstream); 

     FileInputStream fis = new FileInputStream(file); 
     BufferedReader in = new BufferedReader(new InputStreamReader(fis)); 

     String aLine; 
     while ((aLine = in.readLine()) != null) { 
      out.write(aLine); 
      out.newLine(); 
     } 
     out.close(); 
     fstream.close(); 
     fis.close(); 
     in.close(); 

     System.out.println("File Length: " + file.getName() + " : " + new File(mergedFilePath).length()); 
    } 
}