我需要从现有的(X)HTML文档自动生成PDF文件.输入文件(报告)使用相当简单的基于表格的布局,因此可能不需要支持真正花哨的JavaScript/CSS内容.
由于我习惯于使用Java,因此最好能够在java项目中轻松使用.但它只需要在Windows系统上工作.
一种方法是可行的,但不能产生高质量的输出(至少开箱即用)是使用CSS2XSLFO和Apache FOP来创建PDF文件.我遇到的问题是,虽然很好地转换了CSS属性,但表格布局非常混乱,文本流出表格单元格.
我还快速浏览了Jrex,这是一个使用Gecko渲染引擎的Java-API.
有没有办法从Internet Explorer渲染引擎中获取渲染页面并自动将其发送到PDF-Printer工具?我没有windows中的OLE编程经验,所以我不知道什么是可能的,什么不是.
你有好主意吗?
编辑:FlyingSaucer/iText看起来很有前途.我会尽力去做.
感谢所有的答案
我想制作一个包含横向页面的PDF.虽然可以使用以下方法将页面大小设置为横向:
document.setPageSize(PageSize.LETTER.rotate());
Run Code Online (Sandbox Code Playgroud)
这没有实现我想要的,因为我添加的任何内容仍然是左 - >右,而我希望它是底部 - >顶部.
IE这是我得到的:

当我想要的是:

我已经能够通过在创建PDF并使用iText 旋转后打开PDF来实现所需的输出,但我想要一个解决方案,让我在添加内容后立即使用iText旋转它.
我有iText的问题.
我已经关注此链接:如何将html页面导出为pdf格式?
我的片段:
String str = "<html><head><body><div style=\"width:100%;height:100%;\"><h3 style=\"margin-left:5px;margin-top:40px\">First</h3><div style=\"margin-left:15px;margin-top:15px\"><title></title><p>sdasdasd shshshshdffgdfgd</p></div><h3 style=\"margin-left:5px;margin-top:40px\">The dream</h3><div style=\"margin-left:15px;margin-top:15px\"></div></div></body></head></html>";
String fileNameWithPath = "/Users/cecco/Desktop/pdf2.pdf";
com.itextpdf.text.Document document =
new com.itextpdf.text.Document(com.itextpdf.text.PageSize.A4);
FileOutputStream fos = new FileOutputStream(fileNameWithPath);
com.itextpdf.text.pdf.PdfWriter pdfWriter =
com.itextpdf.text.pdf.PdfWriter.getInstance(document, fos);
document.open();
document.addAuthor("Myself");
document.addSubject("My Subject");
document.addCreationDate();
document.addTitle("My Title");
com.itextpdf.text.html.simpleparser.HTMLWorker htmlWorker =
new com.itextpdf.text.html.simpleparser.HTMLWorker(document);
htmlWorker.parse(new StringReader(str.toString()));
document.close();
fos.close();
Run Code Online (Sandbox Code Playgroud)
工作正常.
但是不考虑将标签样式转换为h3和div.
但是,如果我将我的html复制到http://htmledit.squarefree.com/,一切都是正确的.
我怎么解决这个问题?