使用驼峰存档电子邮件(Talend)

时间:2016-07-13 11:15:14

标签: java apache-camel pdfbox talend

我的要求是,在阅读完电子邮件后,我需要将其存档为PDF(目前,让我们考虑纯文本并从图像中排除嵌入的文本)。

以下是我从Talend-ESB生成的代码路由(我认为这是解释的关键)

当我执行此操作时,我明白了 java.lang.IllegalStateException: Cannot read while there is an open stream writer

        from(
            "imaps://imap.gmail.com:993" + "?username=" + context.username
                    + "&password=" + decryptedPassword_cMail_1
                    + "&contentType=text/plain" + "&" + "peek" + "=true"
                    + "&" + "handleFailedMessage" + "=true" + "&"
                    + "skipFailedMessage" + "=true" + "&"
                    + "mapMailMessage" + "=true")

    .routeId("WriteAsPDF_cMail_1")
            .process(new org.apache.camel.Processor() {
                public void process(org.apache.camel.Exchange exchange)
                        throws Exception {
                    Map<String, Object> map = new java.util.HashMap<String, Object>();

                    map = exchange.getIn().getHeaders();
                    for (String name : map.keySet()) {
                        String key = name.toString();
                        String value = map.get(name).toString();
                        System.out.println(key + " " + value);

                    }
                    String M_Body = exchange.getIn().getBody().toString();
                    org.apache.pdfbox.pdmodel.PDDocument document = new org.apache.pdfbox.pdmodel.PDDocument();

                    org.apache.pdfbox.pdmodel.PDPage page = new org.apache.pdfbox.pdmodel.PDPage();

                    document.addPage(page);
                    org.apache.pdfbox.pdmodel.font.PDFont pdfFont = org.apache.pdfbox.pdmodel.font.PDType1Font.HELVETICA_BOLD;
                    org.apache.pdfbox.pdmodel.PDPageContentStream contentStream = new org.apache.pdfbox.pdmodel.PDPageContentStream(
                            document, page);
                    contentStream.beginText();
                    contentStream.setFont(pdfFont, 12);
                    contentStream.moveTextPositionByAmount(100, 700);
                    contentStream.drawString(M_Body);
                    document.save("C:/Hari/poller/zipper/BlankPage.pdf");
                    contentStream.close();
                    document.close();
                }

            }).id("WriteAsPDF_cProcessor_1");
}

============================================

异常详情:

  

[警告]:org.apache.camel.component.mail.MailConsumer - Exchange失败,因此回滚邮件状态:Exchange [MailMessage @ 0xcdf6432]      java.lang.IllegalStateException:有一个打开的流编写器时无法读取         在org.apache.pdfbox.cos.COSStream.createRawInputStream(COSStream.java:129)         在org.apache.pdfbox.pdfwriter.COSWriter.visitFromStream(COSWriter.java:1177)         在org.apache.pdfbox.cos.COSStream.accept(COSStream.java:372)         at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObject(COSWriter.java:561)         at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObjects(COSWriter.java:490)      ...      .....      ..      ..      [错误]:org.apache.camel.processor.DefaultErrorHandler - 交付失败(ExchangeId上的消息ID:ID-EINLW2ABC-60843-1468402879061-0-1:ID-EINLW2ABC-60843-1468402879061-0-2)。交付尝试后用尽:1捕获:java.lang.IllegalStateException:有开放流编写器时无法读取

我确实检查了类似的其他问题,但我找不到能帮我解决的问题。

0 个答案:

没有答案