1

Spring MVCでテンプレートからPDFを作成し(ここに示すようにpdfフォームを使用)、を使用してブラウザーに出力したいのですが、からAbstractPdfView取得する方法がわかりません。 ?以下は私がこれまでに持っているコードです、ありがとうDocumentPdfStamperPdfWriter

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();
4

2 に答える 2

5

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();
    }
}

XMLViewResolverを使用しました。以下は、spring-servlet.xmlで作成されたエントリです。

   <bean class="org.springframework.web.servlet.view.XmlViewResolver">
      <property name="location">
         <value>/WEB-INF/spring-pdf-views.xml</value>
      </property>
   </bean>

以下はspring-pdf-views.xmlの内容です

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

    <bean id="invoicePDF"
        class="com.pdf.view.PDFView">
        <property name="url" value = "/WEB-INF/resources/templates/invoiceTemplate.pdf" />
    </bean>
 </beans>

以下は、ビューをレンダリングするコントローラーコードで定義されたメソッドです。ここでModelAndViewに設定されているビュー名は、上記のspring-pdf-views.xmlで定義されているものと同じです。

@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;
    }
于 2014-05-17T07:52:25.017 に答える
1

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);
        }
     }
于 2013-04-08T16:35:25.993 に答える