我無法打開以電子郵件附件形式發送的PDF。 PDF是使用iText和Flying Saucer創建的,並使用Java中的MimeMessage發送。我非常肯定,在嘗試下載附件時存在編碼問題,因爲當創建PDF時,它看起來很好。只是在作爲附件發送時,存在打開它的問題。例如,在Chrome中,它發送「無法加載PDF文檔」錯誤。它在其他瀏覽器和Adobe Reader中發送類似的錯誤。謝謝。電子郵件中的Itext PDF附件
//creates the pdf
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
byte[] bytes = buf.toString().getBytes("iso-8859-1");
ByteArrayInputStream baos = new ByteArrayInputStream(bytes);
Document doc = builder.parse(baos);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(doc, null);
renderer.layout();
OutputStream os = new ByteArrayOutputStream();
os = response.getOutputStream();
renderer.createPDF(os);
os.close();
//email
MimeMessage msg = new MimeMessage(session);
Multipart multipart = new MimeMultipart();
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("This is a test");
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
//construct the pdf body part
DataSource dataSource = new ByteArrayDataSource(bytes, "application/pdf");
messageBodyPart.setHeader("Content-Transfer-Encoding", "base64");
messageBodyPart.setDataHandler(new DataHandler(dataSource));
messageBodyPart.setFileName("test.pdf");
multipart.addBodyPart(messageBodyPart);
//construct message
msg.setHeader("Content-Type", "multipart/mixed");
msg.setFrom(new InternetAddress(user));
msg.setReplyTo(InternetAddress.parse(replyEmail,false));
msg.setSubject("Test");
msg.setRecipients(Message.RecipientType.TO, to);
msg.setSentDate(new java.util.Date());
msg.setContent(multipart);
//send email
Transport.send(msg);
我知道我需要在附件中使用os,我只是無法弄清楚。我試圖只使用messageBodyPart.setContent(os,「application/pdf」);而不是使用DataSource;但它會發送一個IOexception,指出「無對象DCH用於MIME類型應用程序/ pdf」 – mjenkins2010 2013-03-25 15:17:54
而不是「字節」,請嘗試在ByteArrayDataSource中使用「os.toByteArray()」。請注意,如果PDF文檔非常大,這將很昂貴。 – 2013-03-25 21:28:09
試過了。它說找不到符號方法toByteArray() – mjenkins2010 2013-03-26 12:33:41