Spring JMS TextMessage写入PDF

时间:2011-03-02 22:32:04

标签: spring pdf-generation jms websphere byte

我有一个默认的Spring消息监听器正在运行。

当onMessage命中时,它以TextMessage(NOT BytesMessage)的形式出现

如何将其写入PDF文件?

我认为下面的代码存在一些问题...所以它写入文件,但pdf无法打开...

    if (message instanceof TextMessage) {
        try {
            //System.out.println(((TextMessage) message).getText());

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

            String outStr=bais.toString();

            File newFile=new File("D:\\document.pdf");
            FileOutputStream fos = new FileOutputStream(newFile);
            int data;
            while((data=bais.read())!=-1)
            {
            char ch = (char)data;
            fos.write(ch);
            }
            fos.flush();
            fos.close();

感谢任何建议

1 个答案:

答案 0 :(得分:1)

请考虑使用pdf特定API来创建/更新pdf文件。我强烈推荐iText。 pdf文件不仅仅是一个字节流。涉及很多事情,你必须考虑字体,页面大小,开始X和Y坐标,文本方向,添加新页面,tabulat结构或自由样式和列表继续。

网站上有很多代码示例可以帮助您入门。以下是使用iText API在pdf文件中添加文本的简化代码段:

    try {
    ... 

    BufferedInputStream bis = new  BufferedInputStream(new FileInputStream(pdfFile));

    ...  

    PdfReader reader = new PdfReader(bis);

    /* outs could be any output stream */

    stamper = new PdfStamper(reader,outs);

    ... /* removed the code to get current page */

    PdfContentByte over = stamper.getOverContent(currentPage);
    over.beginText();
    over.setFontAndSize(myFont, myFontSize);
    over.setTextMatrix(xPoint, yPoint);
    over.showText("Add this text");
    over.endText();
    ... /* removed code to adjust x and y coordinate and add page if needed */
} catch (Exception ex) {
    ex.printStackTrace();
} finally {
    try {
        stamper.close();
    } catch (Exception ex) {/* handle exception */}

    try {
        outs.flush();
        outs.close();
    } catch (Exception ignored) {/* handle exception */}

}