2011-03-03 87 views
1

我有一個監聽器接收一個JMS TextMessage,其中有pdf內容。JMS TextMessage itext PDF頭標籤找不到

我做的getBytes( 「Cp037」),因爲它是從大型機

來當我運行行 「PdfReader讀卡器=新PdfReader(拜斯)」;

它找不到PDF標頭簽名。

它應該是一個有效的pdf,因爲另一個應用程序能夠得到pdf。

可能是什麼問題?謝謝

import javax.jms.Message; 
import javax.jms.MessageListener; 
import javax.jms.TextMessage; 

      TextMessage txtMessage = (TextMessage)message; 
       ByteArrayInputStream bais = new ByteArrayInputStream(txtMessage.getText().getBytes("Cp037")); 

       PdfReader reader = new PdfReader(bais); 
+0

@約翰,你可以嘗試'txtMessage.getText()的getBytes(System.getProperty( 「file.encoding的」)。 )'? – Ritesh 2011-03-03 17:43:35

+0

不,它沒有工作。我認爲這是更多的JMS相關也許...我收到一個TextMessage而不是BytesMessage。我確實在第一行看到PDF-1.3,但在此之前我看到了一堆奇怪的字符 – john 2011-03-03 18:31:58

+0

我的TextMessage在ASCII – john 2011-03-03 19:28:54

回答

0

爲什麼它是一個TextMessage而不是BytesMessage?

正如馬克寫道,PDF包含二進制數據。所以它看起來像JMS通信的發送方也必須改變。

2

我有同樣的錯誤,我剛剛從閱讀InputStreams更改我的PdfReader讀取字符串。因此,它完美搭配:

public static void doMerge(List<String> list, OutputStream outputStream) 
     throws DocumentException, IOException { 
    Document document = new Document(); 
    PdfWriter writer = PdfWriter.getInstance(document, outputStream); 
    document.open(); 
    PdfContentByte cb = writer.getDirectContent(); 

    for (String in : list) { 
     PdfReader reader = new PdfReader(in); 
     for (int i = 1; i <= reader.getNumberOfPages(); i++) { 
      document.newPage(); 
      // import the page from source pdf 
      PdfImportedPage page = writer.getImportedPage(reader, i); 
      // add the page to the destination pdf 
      cb.addTemplate(page, 0, 0); 
     } 
    } 

    outputStream.flush(); 
    document.close(); 
    outputStream.close(); 
} 

*原先我把這個代碼 http://www.mindfiresolutions.com/Java-Merging-multiple-PDFs-into-a-single-PDF-using-iText-671.php