2013-02-04 5 views
0

PDF를 생성 중입니다. 메일을 첨부하고 Java를 사용하여 브라우저에서 다운로드하려고합니다. 브라우저에서 다운로드하면 문제가 없지만 메일에 첨부하면 문제가 발생합니다. 파일이 첨부됩니다. 첨부 파일 이름과 파일 크기는 그대로 유지됩니다. 문제는 메일 첨부 파일에서 PDF를 열 때 아무 것도 표시하지 않는 경우입니다. 내용이없는 정확한 페이지 수. 하드 코딩하여 브라우저에서 다운로드 한 파일을 첨부하면 정상적으로 작동합니다. 그래서 문제는 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를 사용하여 메시지를 보냅니다. 나는 또한 연결의 또 다른 방법을 시도했지만 허사

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); 

에 어떤 도움을 크게 감상 할 수 첨부 파일을

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

을 추가 아래의 방법을 사용하고 있습니다. 미리 감사드립니다.

답변

0

이것이 관련이 있는지는 모르겠지만 실제 문자셋을 pdfBodyPart.addHeader("Content-Type", "application/pdf;charset");으로 설정하지 않았으며 매개 변수로 문자셋을 사용하여 attachmentContent.getBytes()을 호출하지 않았습니다. 어떤 것을 사용하고 싶은지 어떻게 알 수 있습니까?

+0

죄송합니다. 그것을 정정했다. –

+0

아직 인코딩으로 콘텐츠 바이트를 가져 오지 못했습니다. –

+0

미안하지만 못 들었어. 메일 첨부 파일이 UTF-8과 다른 인코딩을 가지고 있다는 뜻입니까? –

0

받은 메시지의 첨부 파일에 대해 어떤 Content-Transfer-Encoding이 사용되고 있습니까? 일반적으로 JavaMail은 적절한 값을 선택하지만 문서에 평범한 텍스트와 바이너리가 혼합되어있는 경우 문서가 보이는 것처럼 JavaMail이 최상의 인코딩을 선택하지 않을 수 있습니다. pdfBodyPart.setHeader ("Content-Transfer-Encoding", "base64");를 추가 할 수 있습니다.

0

나는 그것이 작동하지 않는 이유를 알아 냈습니다. 인코딩 문제이지만 MimeMessageHelper와는 관련이 없습니다. 문제는 OutputStream에 PDF를 생성하고이를 String으로 변환 한 다음 바이트 배열로 변환 한 것입니다. String으로 변환하면 인코딩이 변경되어 문제가 발생합니다. 그래서 그것을 outputStream에서 바이트 배열을 가져 와서 고쳤습니다.

관련 문제