带有iText和Spring MVC的Pdf模板
我想在Spring MVC中从模板(使用如图所示的PDF表单)创建一个PDF,并使用带有iText和Spring MVC的Pdf模板,spring,pdf,spring-mvc,pdf-generation,itext,Spring,Pdf,Spring Mvc,Pdf Generation,Itext,我想在Spring MVC中从模板(使用如图所示的PDF表单)创建一个PDF,并使用AbstractPdfView将其输出到浏览器,但我不知道如何从PdfStamper获取文档,或者我是否应该使用PdfWriter。。有什么想法吗?下面是我到目前为止的代码,谢谢 public class RecipePdf extends AbstractPdfView { @Override protected void buildPdfDocument(Map<String, Object>
AbstractPdfView
将其输出到浏览器,但我不知道如何从PdfStamper
获取文档,或者我是否应该使用PdfWriter
。。有什么想法吗?下面是我到目前为止的代码,谢谢
public class RecipePdf extends AbstractPdfView {
@Override
protected void buildPdfDocument(Map<String, Object> model, Document document,
PdfWriter pdfWriter, HttpServletRequest request, HttpServletResponse response)
throws Exception {
PdfReader pdfTemplate = new PdfReader ("/WEB-INF/template/recipe.pdf");
FileOutputStream fileOutputStream = new FileOutputStream("test.pdf");
PdfStamper stamper = new PdfStamper(pdfTemplate, fileOutputStream);
stamper.setFormFlattening(true);
stamper.getAcroFields().setField("number", "12345");
stamper.close();
pdfTemplate.close();
公共类RecipePdf扩展了AbstractPdfView{
@凌驾
受保护的void buildPDF文档(地图模型、文档、,
PdfWriter PdfWriter、HttpServletRequest请求、HttpServletResponse响应)
抛出异常{
PdfReader pdfTemplate=新的PdfReader(“/WEB-INF/template/recipe.pdf”);
FileOutputStream FileOutputStream=新的FileOutputStream(“test.pdf”);
PdfStamper stamper=新的PdfStamper(pdfTemplate、fileOutputStream);
母版。SetFormFlatting(真);
stamper.getAcroFields().setField(“数字”、“12345”);
压模关闭();
pdfTemplate.close();
1)我在本地开发文档生成器,并使用jUnit进行测试
2) 如果您只需要PDF,那么它应该在输出目录中…但是。。。
3) 但是…如果您需要将该文档合并到一个更大的文档中,请使用以下内容阅读该文档:
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
document.open();
PdfContentByte cb = writer.getDirectContent();
for (String pdfFileName : pdfFileNamesList) {
InputStream in = new FileInputStream(pdfFileName);
PdfReader reader = new PdfReader(in);
int numberOfPages = reader.getNumberOfPages();
for (int i = 1; i <= numberOfPages; i++) {
document.newPage();
//import the page from source pdf
PdfImportedPage page = writer.getImportedPage(reader, i);
//add the page to the destination pdf
cb.addTemplate(page, 0, 0);
}
}
Document Document=新文档();
PdfWriter writer=PdfWriter.getInstance(文档,outputStream);
document.open();
PdfContentByte cb=writer.getDirectContent();
for(字符串pdfFileName:pdfFileNamesList){
InputStream in=新文件InputStream(pdfFileName);
PdfReader读取器=新PdfReader(in);
int numberOfPages=reader.getNumberOfPages();
对于(inti=1;i1),我在本地开发文档生成器,并使用jUnit测试它们
2) 如果您只需要PDF,那么它应该在输出目录中…但是。。。
3) 但是…如果您需要将该文档合并到一个更大的文档中,请使用以下内容阅读该文档:
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
document.open();
PdfContentByte cb = writer.getDirectContent();
for (String pdfFileName : pdfFileNamesList) {
InputStream in = new FileInputStream(pdfFileName);
PdfReader reader = new PdfReader(in);
int numberOfPages = reader.getNumberOfPages();
for (int i = 1; i <= numberOfPages; i++) {
document.newPage();
//import the page from source pdf
PdfImportedPage page = writer.getImportedPage(reader, i);
//add the page to the destination pdf
cb.addTemplate(page, 0, 0);
}
}
Document Document=新文档();
PdfWriter writer=PdfWriter.getInstance(文档,outputStream);
document.open();
PdfContentByte cb=writer.getDirectContent();
for(字符串pdfFileName:pdfFileNamesList){
InputStream in=新文件InputStream(pdfFileName);
PdfReader读取器=新PdfReader(in);
int numberOfPages=reader.getNumberOfPages();
for(inti=1;iSpring的AbstractPdfStamperView和iText可用于使用预定义模板生成PDF
package com.pdf.view;
import java.util.Locale;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceAware;
import org.springframework.web.servlet.view.document.AbstractPdfStamperView;
import com.lowagie.text.pdf.PdfStamper;
public class PDFView extends AbstractPdfStamperView implements
MessageSourceAware {
private MessageSource messageSource;
@Override
public void setMessageSource(MessageSource messageSource) {
this.messageSource = messageSource;
}
@Override
protected void mergePdfDocument(Map<String, Object> model,
PdfStamper stamper, HttpServletRequest request,
HttpServletResponse response) throws Exception {
stamper.setFormFlattening(true);
String customerName = (String) model.get("customerName");
Locale locale = request.getLocale();
stamper.getAcroFields().setField("customerNameLabel",
messageSource.getMessage("label.customername", null, locale));
stamper.getAcroFields().setField("customerNameValue", customerName);
stamper.close();
}
}
Spring的AbstractPdfStamperView和iText可用于使用预定义模板生成PDF
package com.pdf.view;
import java.util.Locale;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceAware;
import org.springframework.web.servlet.view.document.AbstractPdfStamperView;
import com.lowagie.text.pdf.PdfStamper;
public class PDFView extends AbstractPdfStamperView implements
MessageSourceAware {
private MessageSource messageSource;
@Override
public void setMessageSource(MessageSource messageSource) {
this.messageSource = messageSource;
}
@Override
protected void mergePdfDocument(Map<String, Object> model,
PdfStamper stamper, HttpServletRequest request,
HttpServletResponse response) throws Exception {
stamper.setFormFlattening(true);
String customerName = (String) model.get("customerName");
Locale locale = request.getLocale();
stamper.getAcroFields().setField("customerNameLabel",
messageSource.getMessage("label.customername", null, locale));
stamper.getAcroFields().setField("customerNameValue", customerName);
stamper.close();
}
}
你觉得我的答案有用吗?谢谢你觉得我的答案有用吗?谢谢
@RequestMapping(value = "/pdf",method = RequestMethod.POST)
public ModelAndView renderPDF(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView("invoicePDF");
mav.addObject("customerName", "XYZ");
return mav;
}