tldr;你应该能够使用一个视图并将其保存到一个文件中。
尝试使用Flying Saucer及其iTextRenderer当重载AbstractPdfView。
import org.xhtmlrenderer.pdf.ITextRenderer;
public class MyAbstractView extends AbstractView {
OutputStream os;
public void buildPdfDocument(Map<String,Object> model, com.lowagie.text.Document document, com.lowagie.text.pdf.PdfWriter writer, HttpServletRequest request, HttpServletResponse response){
//process model params
os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
String url = "http://www.mysite.com"; //set your sample url namespace here
renderer.setDocument(document, url); //use the passed in document
renderer.layout();
renderer.createPDF(os);
os.close();
}
}
protected final void renderMergedOutputModel(Map<String,Object> model,
HttpServletRequest request,
HttpServletResponse response)
throws Exception{
if(os != null){
response.outputStream = os;
}
public byte[] getPDFAsBytes(){
if(os != null){
byte[] stuff;
os.write(stuff);
return stuff;
}
}
}
你可能不得不调整此处显示的示例实现,但应该提供基本依据。
感谢您的回复。不幸的是,我不使用Grails。有人知道如何在“纯粹的”java + spring上实现它吗? – nKognito
Grails只是Spring MVC和Groovy中的其他内容,与Java非常相似。这个答案意味着你可以通过检查图书馆的来源构建类似的功能,这可以在http://svn.codehaus.org/grails-plugins/grails-rendering/trunk/上找到。下载0.3版本并专门查看PdfRenderingService及其父类,并且您会发现它基本类似于纯Java。 –
渲染只是使用飞碟下面,它有一个很好的教程,你将如何专门用它来创建一个输出流。检查链接。 –