제 사용을 위해 비행 접시 라이브러리를 사용하여 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 {
}
}