Spring JMS TextMessage написать в PDF - PullRequest
1 голос
/ 03 марта 2011

У меня работает прослушиватель сообщений Spring по умолчанию.

Когда срабатывает onMessage, он появляется как TextMessage (НЕ 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 Ответ

1 голос
/ 03 марта 2011

Пожалуйста, рассмотрите возможность использования специфичного для PDF API для создания / обновления PDF-файла. Я очень рекомендую iText . PDF-файл - это не просто поток байтов. Многое задействовано, и вы должны учитывать шрифт, размер страницы, начальные координаты X и Y, направление текста, добавление новых страниц, структуру таблиц или свободный стиль и список можно продолжить.

На сайте есть много примеров кода, которые помогут вам начать работу. Вот упрощенный фрагмент добавления текста в PDF-файл с помощью iText API:

    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 */}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...