Spring JMS TextMessage записывает в PDF

У меня работает прослушиватель сообщений 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();

спасибо за любые предложения


person john    schedule 02.03.2011    source источник


Ответы (1)


Пожалуйста, рассмотрите возможность использования специального API для PDF для создания/обновления файла 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 */}

}
person Ritesh    schedule 03.03.2011