2017-11-24 3 views
0
フライングソーサーを使用して Convert a Jsp with css to pdf

に処理JSP

に関連

からXHTMLでPDFを生成し、私はPDFに簡単にHTML/XHTMLに変換することができます。

ここで、HTML/XHTMLのパラメータを設定できるようにするために、コアJSTLを使用してテンプレートを作成するためにJSPを使用することにしました。 TomcatはJSPをHTMLに解析するので、応答コンテンツを取得してFlying-saucerで処理して結果をPDFに変換する必要があります。

しかし、上記の質問に関連して応答内容を傍受する方法はわかりません。

1 - ServletResponseインターフェイスは、JSPを処理する前にコンテンツを追加するのに便利です。

2 - HttpServletResponseは応答のヘッダーを変更します。

私のメソッドの中でレスポンスの内容を取得してフライングソーサーで処理し、それをクライアントに「application/pdf」として送り返すにはどうすればよいですか?

N.B. :私たちはStruts 1を使用しています。私はそれが悪いことを知っています。私たちはすぐにSpringに移りますが、まだこのアプリケーションのためには移動しません。


ない-最高しかし、作業溶液:今私はURIを使用して、JSPの内容を設定するリクエストパラメータを使用するために

は、その後、「アプリケーション/ PDF」へと戻ってそれを送信しますクライアント。

import org.xhtmlrenderer.pdf.ITextRenderer; 
import com.lowagie.text.DocumentException; 
import java.io.BufferedReader; 
import java.io.CharArrayWriter; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.util.Scanner; 

/** 
* PdfConverter 
* Pdf methods to convert Jsp from URI, or Xhtml/Xml from URI 
* or internal content to Pdf. 
*/ 
public class PdfConverter { 

    private static String encoding = "UTF-8"; 

    /** 
    * Convert JSP from local server to PDF 
    * @param jspUri usage : 
    * URL jspUri = 
    *  new URL("http://localhost:8080/myApp/myJspServlet?param1=1&param2=2"); 
    * @param pdfFileName 
    * @return Html content as a String from generated Jsp. 
    * @throws DocumentException 
    * @throws IOException 
    */ 
    public static String JspToHtmlString(URL jspUri) throws DocumentException, 
                  IOException { 
     BufferedReader in = new BufferedReader(
      new InputStreamReader(jspUri.openStream()) 
     ); 
     CharArrayWriter caw = new CharArrayWriter(); 
     int octet = 0; 
     while ((octet = in.read()) != -1) { caw.write(octet); } 
     String pdfContent = caw.toString(); 
     caw.close(); 
     return pdfContent; 
    } 

    /** 
    * Convert Xhtml from package to PDF to the folder where this class is 
    * located. 
    * @param xhtmlFileName name of the Xhtml file inside the application. 
    * @param pdfFileName name of the written Pdf file. 
    * @return Pdf file generated and written on disk. 
    * @throws DocumentException 
    * @throws IOException 
    */ 
    public static File XhtmlToPdfConverter(String xhtmlFileName, 
              String pdfFileName) throws 
                  DocumentException, 
                  IOException { 
     FileOutputStream pdf = new FileOutputStream(pdfFileName); 
     new ITextRenderer() {{ 
      setDocumentFromString(
       new Scanner(
        this.getClass().getResourceAsStream(xhtmlFileName), encoding 
       ).useDelimiter("\\A").next() 
      ); 
      layout(); 
      createPDF(pdf); 
     }}; 
     pdf.close(); 
     return new File(pdfFileName); 
    } 
} 
+0

を使用してビューをレンダリング取得する必要があります。インスピレーションについては、[struts2-pdfstream](https://github.com/aleksandr-m/struts2-pdfstream)を参照してください。 –

答えて

0

手動でリクエストディスパッチャを呼び出して、ビューをレンダリングすることができます。これはSpringの実装ですが、アイデアとクラスのほとんどは同じでなければなりません。これが機能するために

あなたは何とか自分のServletContextはその後、あなたは要求をラップすることができ、偽のリクエスト/レスポンス

関連する問題