0

我正在生成 PDF 并尝试将其附加到邮件以及使用 java 从浏览器下载它。从浏览器下载工作正常,但附加到邮件是我面临的问题。该文件已附上。文件的附件名称和大小保持不变。问题是当我从邮件附件打开 PDF 时,它什么也没显示。没有内容的正确页数。当我通过硬编码附加从浏览器下载的文件时,它工作正常。所以我想问题不在于PDF生成。我尝试使用无法比较的比较工具打开两个文件(一个从浏览器下载,另一个从邮件下载)。从邮件中下载的显示转换错误。当我用记事本++打开时,两者都显示不同的编码。我对这些编码的东西不是很熟悉。我想这与编码有关。

我还观察到邮件下载中的内容与 PDF 生成中的内容相同。但是浏览器下载的那个是不同的。

我在浏览器下载中得到的摘录如下(内容太大,无法粘贴)

%PDF-1.4
%âãÏÓ
4 0 obj <</Type/XObject/ColorSpace/DeviceRGB/Subtype/Image/BitsPerComponent 8/Width 193/Length 11222/Height 58/Filter/DCTDecode>>stream
ÿØÿà  

我在邮件下载中得到的摘录如下

%PDF-1.4
%????
4 0 obj <</Type/XObject/ColorSpace/DeviceRGB/Subtype/Image/BitsPerComponent 8/Width 193/Length 11222/Height 58/Filter/DCTDecode>>stream
????

我正在使用 Spring MimeMessageHelper 发送消息。我正在使用以下方法添加附件

MimeMessageHelper.addAttachment(fileName, new ByteArrayResource(attachmentContent.getBytes()), "application/pdf");

我也尝试过另一种连接方式,但徒劳无功

DataSource dataSource = new ByteArrayDataSource(bytes, "application/pdf");
MimeBodyPart pdfBodyPart = new MimeBodyPart();
pdfBodyPart.addHeader("Content-Type", "application/pdf;charset=UTF-8");
pdfBodyPart.addHeader("Content-disposition", "attachment; filename="+fileName);
pdfBodyPart.setDataHandler(new DataHandler(dataSource));
pdfBodyPart.setFileName(fileName);
mimeMessageHelper.getMimeMultipart().addBodyPart(pdfBodyPart);

任何帮助将不胜感激。提前致谢

4

3 回答 3

0

我发现了为什么它不起作用。这是一个编码问题,但与 MimeMessageHelper 无关。问题是我将 PDF 生成为 OutputStream 并将其转换为字符串,然后将其转换为字节数组。当我将其转换为 String 时,编码发生了变化,从而导致了问题。所以我通过从 outputStream 获取字节数组来修复它:)

于 2013-02-07T06:00:51.147 回答
0

您收到的消息中的附件使用什么 Content-Transfer-Encoding?通常 JavaMail 会选择一个合适的值,但如果文档包含纯文本和二进制的不寻常混合,就像您的文档看起来那样,JavaMail 可能不会选择最佳编码。您可以尝试添加 pdfBodyPart.setHeader("Content-Transfer-Encoding", "base64");

于 2013-02-04T17:22:57.530 回答
0

我不确定这是否与它有关,但我注意到您没有在 中设置实际的字符集pdfBodyPart.addHeader("Content-Type", "application/pdf;charset");,也没有attachmentContent.getBytes()使用字符集作为参数进行调用。它应该如何知道您要使用哪一个?

于 2013-02-04T08:11:54.443 回答