2011-03-03 51 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

相关问题