0

itextpdf を使用して pdf を読み取るための jsp サーブレットを作成しましたが、例外が発生しました。例外の理由を教えてください。

page.jsp

<html>
<%@page import="java.io.File"%>
<%@page import="java.io.*"%>
<%@page import="javax.servlet.*"%>
<%@page import="com.itextpdf.text.Image"%>
<%@page import="com.itextpdf.text.Document"%>
<%@page import="com.itextpdf.text.DocumentException"%>
<%@page import="com.itextpdf.text.pdf.PdfReader"%>
<%@page import="com.itextpdf.text.pdf.PdfImportedPage"%>
<%@page import="com.itextpdf.text.pdf.PdfWriter"%>
<%@page import="com.itextpdf.text.pdf.PdfContentByte"%>
<%
    response.reset();
    response.setContentType("application/pdf");
    response.setHeader("Content-Disposition",
            "inline;filename=Saba_PhBill.pdf");
    File file = new File(
            "D:\\TNWRD_Documents\\Knowladge_Base\\CHAPTER_I.pdf");
    String OUTPUTFILE = "D:\\TNWRD_Documents\\CHAPTER_II.pdf";
    FileInputStream in = new FileInputStream(file);
    PdfReader reader = new PdfReader(in);
    Document document = new Document();
    //PdfWriter writer = PdfWriter.getInstance(document,
    //        new FileOutputStream(OUTPUTFILE));
    OutputStream outputStream = new FileOutputStream(OUTPUTFILE);
    PdfWriter writer = PdfWriter.getInstance(document, outputStream);
    document.open();
    //PdfReader reader = new PdfReader(INPUTFILE);
    PdfContentByte cb = writer.getDirectContent();
    int n = reader.getNumberOfPages();
    PdfImportedPage pages;
    // Go through all pages
    for (int i = 1; i <= n; i++) {
        // Only page number 2 will be included
        pages = writer.getImportedPage(reader, i);
        Image instance = Image.getInstance(pages);
        document.add(instance);
        cb.addTemplate(pages, 0, 0);
        document.addHeader("pdf", "pdf");
    }
    document.close();
%>
</html>
4

1 に答える 1

1

<html>PDF ファイルをと</html>タグで囲むと、ブラウザで PDF を表示できなくなります。それは違法な構文です。

さらに、PDF をFileOutputStream. それは...とても奇妙です。PDF バイトを ServletOutputStream に送信する必要があります。

これは、最も単純な Hello World サーブレットであるHelloです。PdfWriterインスタンスの作成時にどの OutputStream が使用されているかがわかりますか? response.getOutputStream()ServletOutputStreamインスタンスです。

もちろん、これはほとんどのブラウザーで機能しますが、一部の古いブラウザー バージョンでは問題が発生する場合があります。そのため、次の例もあります: PdfServlet

最後に、あなたは JSP 開発者であるため、JSP のコースで、JSP からバイナリ ファイルを作成することは常に悪い考えであることを覚えています。優れた開発者は、サーブレットを作成してバイナリ ドキュメントを作成します。

于 2013-04-25T17:03:37.933 に答える