サーバー側にファイルを保存せずにPDFをブラウザに提供するにはどうすればよいですか?

ミシャルハリッシュ

私には2つの方法があります。1つはサーバー側でPDFを生成し、もう1つはクライアント側でPDFをダウンロードします。

サーバー側に保存せずにこれを実行し、クライアント側がこれを直接ダウンロードできるようにするにはどうすればよいですか。

以下は2つの方法です。

public void downloadPDF(HttpServletRequest request, HttpServletResponse response) throws IOException{

    response.setContentType("application/pdf");
    response.setHeader("Content-disposition","attachment;filename="+ "testPDF.pdf");
    FileInputStream fis = null;
    DataOutputStream os = null;

    try {
        File f = new File("C://New folder//itext3.pdf");
        response.setHeader("Content-Length",String.valueOf(f.length()));

        fis = new FileInputStream(f);
        os = new DataOutputStream(response.getOutputStream());
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = fis.read(buffer)) >= 0) {
            os.write(buffer, 0, len);
        }

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        fis.close();
        os.flush();
        os.close();
    }
    response.setHeader("X-Frame-Options", "SAMEORIGIN");
}

そして:

public Document generatePDF() {

    Document doc = new Document();
     try {
            File file = new File("C://New folder//itext_Test2.pdf");
            FileOutputStream pdfFileout = new FileOutputStream(file);
            PdfWriter.getInstance(doc, pdfFileout);

            doc.addAuthor("TestABC");
            doc.addTitle("Aircraft Details");
            doc.open();


            Anchor anchor = new Anchor("Aircraft Report");
            anchor.setName("Aircraft Report");

            Chapter catPart = new Chapter(new Paragraph(anchor), 1);

            Paragraph para1 = new Paragraph();
            Section subCatPart = catPart.addSection(para1);
            para1.add("This is paragraph 1");

            Paragraph para2 = new Paragraph();
            para2.add("This is paragraph 2");


            doc.add(catPart);

            doc.close();


        } catch (Exception e) {
            e.printStackTrace();
        }
     return doc;
}
ブルーノ・ロワジー

response.getOutputStream()を作成する代わりに使用するようにアドバイスする人FileOutputStreamは正しいです。たとえば、私の本の第9章Helloサーブレットを参照してください

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

ただし、このようにバイトを直接送信すると、一部のブラウザで問題が発生します。を使用してメモリ内にファイルを作成ByteArrayOutputStreamし、コンテンツヘッダーで期待できるバイト数をブラウザに通知する方が安全です

public class PdfServlet extends HttpServlet {

    protected void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        try {
            // Get the text that will be added to the PDF
            String text = request.getParameter("text");
            if (text == null || text.trim().length() == 0) {
                 text = "You didn't enter any text.";
            }
            // step 1
            Document document = new Document();
            // step 2
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            PdfWriter.getInstance(document, baos);
            // step 3
            document.open();
            // step 4
            document.add(new Paragraph(String.format(
                "You have submitted the following text using the %s method:",
                request.getMethod())));
            document.add(new Paragraph(text));
            // step 5
            document.close();

            // setting some response headers
            response.setHeader("Expires", "0");
            response.setHeader("Cache-Control",
                "must-revalidate, post-check=0, pre-check=0");
            response.setHeader("Pragma", "public");
            // setting the content type
            response.setContentType("application/pdf");
            // the contentlength
            response.setContentLength(baos.size());
            // write ByteArrayOutputStream to the ServletOutputStream
            OutputStream os = response.getOutputStream();
            baos.writeTo(os);
            os.flush();
            os.close();
        }
        catch(DocumentException e) {
            throw new IOException(e.getMessage());
        }
    }
}

完全なソースコードについては、PdfServletを参照してくださいここでコードを試すことができます:http//demo.itextsupport.com/book/

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

サーバーやブラウザのRAMに保存せずに、大きなファイルをディスクに直接ダウンロードするにはどうすればよいですか?

分類Dev

ブラウザからNode.jsサーバーに大きなファイルを送信するにはどうすればよいですか?

分類Dev

ユーザーファイルを上書きせずに本番サーバーを更新するにはどうすればよいですか?

分類Dev

ブラウザをフリーズさせずに JavaScript でタイマーループを使用するにはどうすればよいですか?

分類Dev

php over sshでリモートファイルをフェッチし、ウェブサーバーにファイルのコピーを作成せずに、ファイルをブラウザの応答に直接返すにはどうすればよいですか?

分類Dev

pdfminerを使用して、ローカルにダウンロードせずにS3バケットに保存されているPDFファイルからテキストを抽出するにはどうすればよいですか?

分類Dev

いずれかのブラウザがAndroidにファイルを保存すると、ブロードキャストが送信されますか?Androidのブラウザで保存/ダウンロードしたファイルを傍受するにはどうすればよいですか?

分類Dev

バーコードをファイルに保存せずにQLabelに出力するにはどうすればよいですか?

分類Dev

JavaScriptを使用してファイルをダウンロードして保存するにはどうすればよいですか(ブラウザなし)

分類Dev

サーバー上のファイルをクライアントのWebブラウザー(Javaで記述されたサーバー)で使用できるようにするにはどうすればよいですか?

分類Dev

ブラウザのサポートを壊さずに実行可能なJavascriptファイルにハッシュバンを追加するにはどうすればよいですか?

分類Dev

ファイルを圧縮せずにアーカイブに保存するにはどうすればよいですか?

分類Dev

compojureサーバーによって提供されるhtmlファイルに.jsファイルを含めるにはどうすればよいですか?

分類Dev

ダウンロードする代わりにブラウザにファイルを表示するにはどうすればよいですか?

分類Dev

ソフトウェアをインストールせずにプロキシサーバーを使用するにはどうすればよいですか

分類Dev

Google Drive API v3 .NET:ユーザーがサーバーからではなくGoogleドライブから直接ファイルをダウンロードできるようにするにはどうすればよいですか?

分類Dev

サーバーでホストせずにHTMLファイルでCSVデータを表示するにはどうすればよいですか?

分類Dev

ブラウザにファイルを表示するにはどうすればよいですか

分類Dev

Pythonでダウンロードせずにリンクからファイルサイズを取得するにはどうすればよいですか?

分類Dev

エディターを使用せずにEclipseでプログラムでファイルを保存するにはどうすればよいですか?

分類Dev

ajaxを使用し、データベースを使用せずに、単純なjsonファイルサーバー側からjavascript、フィルター処理されたレコードを取得するにはどうすればよいですか?

分類Dev

サーバープッシュでプッシュした後、ブラウザのキャッシュにファイルを保存するにはどうすればよいですか?

分類Dev

node.jsを使用してサーバー側からブラウザーを更新するにはどうすればよいですか?

分類Dev

ブラウザを使用せずにLinuxコンソールでURLを使用してファイルをftpまたはダウンロードするにはどうすればよいですか?

分類Dev

Laravel PDFライブラリを使用してPHPでPDFファイルをダウンロードするにはどうすればよいですか?

分類Dev

サーバー(springboot)で生成されたAngularのPDFファイルをダウンロードするにはどうすればよいですか?

分類Dev

Pythonでファイルを保存せずに終了するにはどうすればよいですか

分類Dev

スクロールバーを見ずにウェブサイトをスクロール可能にするにはどうすればよいですか?

分類Dev

ブラウザでのグーグル検索をウィンドウサイズに合わせるにはどうすればよいですか?

Related 関連記事

  1. 1

    サーバーやブラウザのRAMに保存せずに、大きなファイルをディスクに直接ダウンロードするにはどうすればよいですか?

  2. 2

    ブラウザからNode.jsサーバーに大きなファイルを送信するにはどうすればよいですか?

  3. 3

    ユーザーファイルを上書きせずに本番サーバーを更新するにはどうすればよいですか?

  4. 4

    ブラウザをフリーズさせずに JavaScript でタイマーループを使用するにはどうすればよいですか?

  5. 5

    php over sshでリモートファイルをフェッチし、ウェブサーバーにファイルのコピーを作成せずに、ファイルをブラウザの応答に直接返すにはどうすればよいですか?

  6. 6

    pdfminerを使用して、ローカルにダウンロードせずにS3バケットに保存されているPDFファイルからテキストを抽出するにはどうすればよいですか?

  7. 7

    いずれかのブラウザがAndroidにファイルを保存すると、ブロードキャストが送信されますか?Androidのブラウザで保存/ダウンロードしたファイルを傍受するにはどうすればよいですか?

  8. 8

    バーコードをファイルに保存せずにQLabelに出力するにはどうすればよいですか?

  9. 9

    JavaScriptを使用してファイルをダウンロードして保存するにはどうすればよいですか(ブラウザなし)

  10. 10

    サーバー上のファイルをクライアントのWebブラウザー(Javaで記述されたサーバー)で使用できるようにするにはどうすればよいですか?

  11. 11

    ブラウザのサポートを壊さずに実行可能なJavascriptファイルにハッシュバンを追加するにはどうすればよいですか?

  12. 12

    ファイルを圧縮せずにアーカイブに保存するにはどうすればよいですか?

  13. 13

    compojureサーバーによって提供されるhtmlファイルに.jsファイルを含めるにはどうすればよいですか?

  14. 14

    ダウンロードする代わりにブラウザにファイルを表示するにはどうすればよいですか?

  15. 15

    ソフトウェアをインストールせずにプロキシサーバーを使用するにはどうすればよいですか

  16. 16

    Google Drive API v3 .NET:ユーザーがサーバーからではなくGoogleドライブから直接ファイルをダウンロードできるようにするにはどうすればよいですか?

  17. 17

    サーバーでホストせずにHTMLファイルでCSVデータを表示するにはどうすればよいですか?

  18. 18

    ブラウザにファイルを表示するにはどうすればよいですか

  19. 19

    Pythonでダウンロードせずにリンクからファイルサイズを取得するにはどうすればよいですか?

  20. 20

    エディターを使用せずにEclipseでプログラムでファイルを保存するにはどうすればよいですか?

  21. 21

    ajaxを使用し、データベースを使用せずに、単純なjsonファイルサーバー側からjavascript、フィルター処理されたレコードを取得するにはどうすればよいですか?

  22. 22

    サーバープッシュでプッシュした後、ブラウザのキャッシュにファイルを保存するにはどうすればよいですか?

  23. 23

    node.jsを使用してサーバー側からブラウザーを更新するにはどうすればよいですか?

  24. 24

    ブラウザを使用せずにLinuxコンソールでURLを使用してファイルをftpまたはダウンロードするにはどうすればよいですか?

  25. 25

    Laravel PDFライブラリを使用してPHPでPDFファイルをダウンロードするにはどうすればよいですか?

  26. 26

    サーバー(springboot)で生成されたAngularのPDFファイルをダウンロードするにはどうすればよいですか?

  27. 27

    Pythonでファイルを保存せずに終了するにはどうすればよいですか

  28. 28

    スクロールバーを見ずにウェブサイトをスクロール可能にするにはどうすればよいですか?

  29. 29

    ブラウザでのグーグル検索をウィンドウサイズに合わせるにはどうすればよいですか?

ホットタグ

アーカイブ