0

ローカルの PDF ファイルを読み込んで、iText を使用してブラウザーでダウンロードできるようにするにはどうすればよいですか? これは私が試したものですが、ファイルには常に次のように書かれています:

Adobe Reader は、サポートされているファイル タイプではないか、ファイルが破損しているため (たとえば、電子メールの添付ファイルとして送信され、正しくデコードされていないなど)、「xxx.pdf」を開くことができませんでした。

PdfReader reader = new PdfReader(filename);
byte[] streamBytes = reader.getPageContent(1);

response.setContentType("application/force-download");
response.setCharacterEncoding("UTF-8");
response.addHeader("Content-Disposition", "attachment; filename=" + filename);

BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());

bos.write(reader.getPageContent(1));
bos.write(streamBytes);
bos.flush();
bos.close();

iTextがファイルをPDFとして認識するかどうかもテストしました。これが出力です。

System.out.println("PDF Version: " + reader.getPdfVersion());
System.out.println("Number of pages: " + reader.getNumberOfPages());
System.out.println("File length: " + reader.getFileLength());
System.out.println("Encrypted? " + reader.isEncrypted());
System.out.println("Rebuilt? " + reader.isRebuilt());

14:52:42,121 INFO  [STDOUT] PDF Version: 4
14:52:42,121 INFO  [STDOUT] Number of pages: 2
14:52:42,121 INFO  [STDOUT] File length: 186637
14:52:42,121 INFO  [STDOUT] Encrypted? false
14:52:42,121 INFO  [STDOUT] Rebuilt? false
4

1 に答える 1

1

コンテンツ タイプは「application/pdf」にする必要があります。

  response.setContentType("application/pdf");

編集: PDFを変更していないため、 PdfReaderを使用する必要はありません。次のようなことをしたい:

             FileInputStream baos = new FileInputStream("c:\\temp\\test.pdf");

             response.setHeader("Expires", "0");
             response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
             response.setHeader("Pragma", "public");
             response.setContentType("application/pdf");
             response.addHeader("Content-Disposition", "attachment; filename=test.pdf");

             OutputStream os = response.getOutputStream();

             byte buffer[] = new byte[8192];
             int bytesRead;

             while ((bytesRead = baos.read(buffer)) != -1) {
                 os.write(buffer, 0, bytesRead);
             }

             os.flush();
             os.close();
于 2012-07-11T13:06:17.600 に答える