1

私は授業のためにJava Webアプリケーションをやっています。このアプリケーションには、売り手と買い手の 2 種類のユーザーがいます。バイヤーは一連のものを購入することができます。彼が購入した場合、領収書を PDF 形式で作成する必要があります。しかし、Tomcat で何かを購入しようとすると、次のエラーが表示されます。

HTTP Status 500 - \WebApplication\pdf\test.pdf (Impossibile trovare il percorso specificato)

type Exception report

message \WebApplication\pdf\test.pdf (Impossibile trovare il percorso specificato)

description The server encountered an internal error that prevented it from fulfilling this request.

exception

java.io.FileNotFoundException: \WebApplication\pdf\test.pdf (Impossibile trovare il percorso specificato)

    java.io.FileOutputStream.open(Native Method)
    java.io.FileOutputStream.<init>(FileOutputStream.java:212)
    java.io.FileOutputStream.<init>(FileOutputStream.java:104)
    viewer.PdfCreator.createPdf(PdfCreator.java:30)
    servlet.BuyerConfirmationPage.doGet(BuyerConfirmationPage.java:115)
    servlet.BuyerConfirmationPage.doPost(BuyerConfirmationPage.java:61)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

そして、ここに私が書いたコードがあります:

try {
            Document document = new Document(PageSize.A4,50,50,50,50);
            PdfWriter.getInstance(document,new FileOutputStream(request.getContextPath() + "/pdf/test.pdf"));
            document.open();
            PdfPTable table = new PdfPTable(5);
            PdfPCell seller_cell = new PdfPCell(new Paragraph("Seller"));
            PdfPCell name_cell = new PdfPCell(new Paragraph("Name"));
            PdfPCell price_cell = new PdfPCell(new Paragraph("Price"));
            PdfPCell UM_cell = new PdfPCell(new Paragraph("UM"));
            PdfPCell quantity_cell = new PdfPCell(new Paragraph("Quantity"));
            table.addCell(seller_cell);
            table.addCell(name_cell);
            table.addCell(price_cell);
            table.addCell(UM_cell);
            table.addCell(quantity_cell);
            PdfPCell seller_cell_value = new PdfPCell(new Paragraph(seller));
            PdfPCell name_cell_value = new PdfPCell(new Paragraph(name));
            PdfPCell price_cell_value = new PdfPCell(new Paragraph(total_price));
            PdfPCell UM_cell_value = new PdfPCell(new Paragraph(UM));
            PdfPCell quantity_cell_value = new PdfPCell(new Paragraph(quantity));
            table.addCell(seller_cell_value);
            table.addCell(name_cell_value);
            table.addCell(price_cell_value);
            table.addCell(UM_cell_value);
            table.addCell(quantity_cell_value);
            document.add(table);
            document.close();


        } catch (DocumentException ex) {
            Logger.getLogger(PdfCreator.class.getName()).log(Level.SEVERE, null, ex);
        }

コードが正しく、フォルダーが存在することは確かですが、ファイルを保存できないのはなぜですか?

4

3 に答える 3

2

これは iText に関する質問ではありません。すべての iText コードを削除してプレーン テキストを FileOutputStream に書き込もうとすると、同じ例外が発生します。

Perneel が提出した「Web からロードされた PDF が必要ですか?」という質問は、非常に関連性があります。ファイルに書き込むのではなく、メモリ内に PDF を作成してみませんか? インスピレーションについては、「iText in Action」の第 9 章の例を参照してください: http://itextpdf.com/book/chapter.php?id=9 (この章を読むことも役に立ちます)。

いずれにせよ、madth3 は正しいです。(1) へのパスが\WebApplication\pdf\存在し、(2) Web アプリケーションがこのパスにアクセスできると想定しています。パスを使用してFileオブジェクトを作成し、そのパスをサーブレットの出力に書き込むために使用するだけです。きっと期待した結果にはなりません。"."getAbsolutePath()

于 2012-11-14T06:46:52.170 に答える
0

Web から読み込まれた pdf が必要ですか? 次のようなpdfファイルを生成することはできません:

Document document = new Document(PageSize.A4,50,50,50,50);
File file = File.createTempFile("dossier_" + selectedDossier.getDossierID() + "_", ".pdf");
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file.getPath()));
于 2012-11-13T15:50:15.890 に答える
0

取得しているコンテキスト パスは、URL で使用される相対パスであるため、おそらくあなたが考えている場所を指していません。次のようなものを使用する必要があると思いますgetRealPath()

于 2012-11-13T16:13:53.213 に答える