我有一个基于Spring MVC的java web应用程序。任务是生成一个pdf文件。众所周知,spring引擎有自己的内置iText库,所以生成pdf文件非常简单。首先我们需要做的是重载AbstractView并创建一些PdfView。第二件事是在控制器中使用该视图。但在我的应用程序中,我还必须能够将生成的pdf文件存储在本地驱动器上,或者给我的用户一些链接来下载该文件。因此,这种情况下的视图不适合我。
我想创建一些通用的pdf生成器来创建pdf文件并返回字节数组。因此,我可以将该数组用于文件存储(在硬盘上)或直接在浏览器中打印它。问题是--有没有办法在PdfVIew解决方案中使用这样的引擎(只返回字节数组)?我之所以这样问,是因为重载的buildPdfDocument方法(在PdfView中)已经有了PdfWriter和Document参数。谢谢
发布于 2011-11-13 14:18:11
您应该能够使用视图并将其保存到文件中。
在重载AbstractPdfView时尝试使用Flying Saucer及其iTextRenderer。
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;
}
}}
您可能需要对这里显示的示例实现进行调整,但这应该提供了一个基本要点。
https://stackoverflow.com/questions/8109986
复制相似问题