2013-08-30 8 views
0

제 사용을 위해 비행 접시 라이브러리를 사용하여 PDF 파일을 만들었습니다. 레거시 HTML 이었기 때문에 HTMLCleaner 라이브러리를 사용하여 XHTML을 삭제했습니다.적절한 형식의 PDF 파일을 생성하십시오.

이 후 XML을 문자열로 직렬화 한 다음 flying-soucer의 iText 모듈로 전달하여 렌더링하고 PDF를 만듭니다.

이 PDF는 OutputStream에 넣습니다. 응답이 커밋 된 후 저장하거나 열 것인지 묻는 대화 상자가 나타납니다. 그러나 PDF 파일로 저장되지는 ​​않습니다. Adobe 또는 PDF 리더에서 마우스 오른쪽 버튼을 클릭하여 열어야합니다.

어떻게하면 PDF 판독기에 표시 할 수 있습니까? 그리고 파일을 .pdf 파일로 저장하십시오. 이 문제를 효과적으로 처리하고 사용자에게 친숙한 방법은 무엇입니까? 항상 도움이 될 것입니다 크게 감사드립니다!

import java.io.ByteArrayInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.PrintWriter; 
import java.io.StringBufferInputStream; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.htmlcleaner.CleanerProperties; 
import org.htmlcleaner.DomSerializer; 
import org.htmlcleaner.HtmlCleaner; 
import org.htmlcleaner.PrettyXmlSerializer; 
import org.htmlcleaner.TagNode; 
import org.htmlcleaner.XmlSerializer; 
import org.w3c.dom.Document; 
import org.xhtmlrenderer.pdf.ITextRenderer; 
import org.xhtmlrenderer.resource.XMLResource; 

public class MyPDF extends HttpServlet { 


public MyPDF() { 
    super(); 
} 


public void destroy() { 
    super.destroy(); 
} 


public void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    doPost(request, response); 
} 


public void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    response.setContentType("text/pdf"); 

    String html = request.getParameter("source"); 

    try 
    { 
     HtmlCleaner cleaner = new HtmlCleaner(); 
     CleanerProperties props = cleaner.getProperties(); 

     TagNode node = cleaner.clean(html); 

     //String content = "<" + node.getName() + ">" + cleaner.getInnerHtml(node) + "</" + node.getName() + ">"; 
     //System.out.println("content " +content); 

     OutputStream os = response.getOutputStream(); 
     System.out.println("encoding " +response.getCharacterEncoding()); 

     final XmlSerializer xmlSerializer = new PrettyXmlSerializer(props); 
     final String html1 = xmlSerializer.getAsString(node); 

     ITextRenderer renderer = new ITextRenderer(); 
     renderer.setDocumentFromString(html1); 
     renderer.layout(); 

     renderer.createPDF(os); 
     os.close(); 
    } 
    catch (Exception ex) 
    { 
     ex.printStackTrace(); 
    } 


} 


public void init() throws ServletException { 

} 

} 

답변

1

MIME 형식이 PDF 형식으로 잘못되었습니다. 신청서/pdf 여야합니다.

변경

response.setContentType("text/pdf"); 

response.setContentType("application/pdf"); 

에 PDF의 MIME 유형에 대한 RFC에 대한 http://tools.ietf.org/html/rfc3778를 참조하십시오.

편집 : "Save as .pdf"질문을 간과했습니다. 또한 같은 것을 추가해야합니다 : 기본 파일 이름이 있어야 할 것을 브라우저에게

response.setHeader("content-disposition", "attachment; filename=yourFileName.pdf"); 

.

관련 문제