带有iText和Spring MVC的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>

我想在Spring MVC中从模板(使用如图所示的PDF表单)创建一个PDF,并使用
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;
    }