2017-04-11 16 views
0

私はiTextというAPIについて聞いたことがあります。サーブレットを使用してPDFファイル(テンプレート)を書きます

私の問題は、現在、jspフォームで提供されている情報を既存のpdfファイル(テンプレート)に上書きしたいということです。 インターネット上で見つかったコードを試しましたが、サーブレットではうまく動作しませんでした。おかげさまで

EDIT私が見つけてサーブレットに入れることを試みたコードはここにあります。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 


      Document document = new Document(PageSize.A4); 
      try { 

       PdfWriter.getInstance(document, new FileOutputStream(new File(
         "test.pdf"))); 
       document.open(); 
       String content = request.getParameter("aa"); 
       Paragraph paragraph = new Paragraph(content); 
       document.add(paragraph); 

      } catch (DocumentException e) { 
       e.printStackTrace(); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } finally { 
       document.close(); 
      } 
     } 
+0

試したことを共有できますか? – soorapadman

+0

_私はインターネット上で見つかったコードをいくつか試しました_ - あなたがそのコードを見つけた場所を教えてください。 –

+0

私はそれに応じて自分の投稿を更新しました。 –

答えて

0

私はあなたのサーブレットを見て、私は次を参照してください。

new FileOutputStream(new File("test.pdf")) 

これはあなたのサーバー上のファイルシステムにファイルを書いていることを意味します。 responseオブジェクトにバイトを送信することはありません。したがって、ブラウザには何も表示されません。

iTextは「サーブレットでは機能しません」と主張していますが、それは正しくありません。例外がスローされない場合、「test.pdf」という名前のファイルがサーバー側の作業ディレクトリに作成されています。これはあまりスマートではありません。サーブレットを使用する人が増えるほど、PDFがサーバーに保存されるためです。あなたはおそらくそれを望んでいません。おそらくメモリにPDFを作成し、PDFバイトをブラウザに提供したいと思うでしょう。

あなたの質問への短い答えに、あなたはresponseオブジェクトのOutputStreamに代わりのFileOutputStreamにPDFを作成する必要があることです。

public class Hello extends HttpServlet { 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
     response.setContentType("application/pdf"); 
     try { 
      // step 1 
      Document document = new Document(); 
      // step 2 
      PdfWriter.getInstance(document, response.getOutputStream()); 
      // step 3 
      document.open(); 
      // step 4 
      document.add(new Paragraph("Hello World")); 
      document.add(new Paragraph(new Date().toString())); 
      // step 5 
      document.close(); 
     } catch (DocumentException de) { 
      throw new IOException(de.getMessage()); 
     } 
    } 
} 

しかし、このアプローチには既知の問題を避けるために、あなたがすべき公式の文書も読んでください。キーワード "サーブレット" のために、あなたはこれらのFAQエントリを見つけることができます検索:

あなたはiTextので新しく追加されたので、それがありますあなたが新しいiText 7の代わりにiText 5を使用することを選択したことは驚くべきことです。iText 7はiText 5と互換性がありません。それは図書館の完全な書き換えです。我々はiTextの上で積極的な開発を停止しているので、私は、あなたがiTextは7使用することをお勧めします。5.

更新:「文書はページがありません」

として知られているエラーコンテンツを持たない文書を作成しようとしていることを示します。

は交換してください:

String content = request.getParameter("aa"); 
Paragraph paragraph = new Paragraph(content); 
document.add(paragraph); 

で:

document.add(new Paragraph("Hello")); 

私の推測では、文書に追加するには、noコンテンツを生じない、パラメータ"aa"をフェッチしながら、何かが間違っていたということです。

+0

こんにちは、あなたの豊富な応答に感謝:D は、私はあなたがmentionned、それはそのためにたくさん、 感謝をどのような作品を試みました。 –

関連する問題