0

JSPを使用して単一のTIFFファイルを表示しています。フローは次のとおりです。

  1. TIFFに変換するためのPDFが提供されます。
  2. 「ブラックボックス」APIにFileオブジェクトとOutputStreamの形式でPDFをフィードします(現在ByteArrayOutputStreamを使用していますが、必要に応じて変更できます。
  3. 「ブラックボックス」はPDFをTIFFに変換し、結果をOutputStreamに保存します。
  4. out.println(outputstream)を使用してTIFFを吐き出します。

問題は、表示された画像の代わりにテキストストリームを取得していることです。次のhead/metaタグを使用しました。

    <head><title>PDF to TIFF tester</title>
  <META HTTP-EQUIV="Content-Script-Type" CONTENT="image/tiff"></head>
  <body>

しかし、それは最終結果を変更しません。何か助けはありますか?

4

4 に答える 4

2

これには JSP を使用しないでください。これは、HTML/CSS/JS コードを配置するためのテキストベースのテンプレートと、taglibs (JSTL など) と EL (式言語など) を使用してバックエンド Java コードと対話するための機能を提供するビュー テクノロジ${}です。

TIFF イメージは文字 (テキスト) データではありません。バイナリデータです。これには本当にサーブレットを使用する必要があります。Writerバイナリ データを返すためにメソッドを使用しないでください。OutputStreamこれにはメソッドを使用する必要があります。そうしないと、バイナリ データが壊れてしまいます (これは、内部で を使用するため、JSP で発生することでもありますWriter)。

サーブレットがどのように見えるかのキックオフ例を次に示します。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String pdfFilename = request.getParameter("filename");
    File pdfFile = new File("/path/to/all/pdf/files", pdfFilename);

    response.setHeader("Content-Type", "image/tiff");
    doYourThingToConvertPdfFileToTiff(pdfFile, response.getOutputStream());
}

url-patternたとえば、このサーブレットをのにマップして、リンクやブラウザのアドレスバー、さらには要素の属性で/pdf2tiff呼び出すことができるようにします。http://example.com/contextname/pdf2tiff?filename=file.pdfsrc<img>

doYourThingToConvertPdfFileToTiff、指定された に TIFF を既に書き込んでいるように見える「ブラック ボックス」APIOutputStreamです。それを利用して、HTTP 応答の 1 つを渡すだけです。


更新: 本当に、本当にこれに JSP を使用する必要がある場合は、サーブレット クラスで行うのと同じコードを JSP で記述できます。ほぼコピペできます。テンプレート テキストをストリームに書き込んでいないことだけを確認してください。これには、スクリプトレットの外側の改行や空白が含まれます。そうしないと、バイナリ ファイルにも書き込まれ、破損します。

複数のスクリプトレット ブロックがある場合は、スクリプトレットの終了%>と次のスクリプトレットの開始<%の間に改行がないように配置する必要があります。したがって、例えば

<%@page import="java.io.File" %><%
    //...
%>

それ以外の

<%@page import="java.io.File" %>
<%
    //...
%>
于 2010-05-13T18:17:13.120 に答える
0

これは機能しません。image/tiffへのhttp応答のコンテンツタイプにする必要があります。

詳細情報: http: //www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tutorial-Response-Headers.html

于 2010-05-13T17:53:12.577 に答える
0

メタ タグは、ブラウザが見ているものではありません。スクリプトレットを使用して、応答オブジェクトにコンテンツ タイプを設定してみてください。このページにはいくつかの提案があります。

于 2010-05-13T18:02:11.917 に答える
0

JSP を使用する必要がある場合:

出力ストリームをランダムに生成された名前のファイルに保存し、JSP でそのファイルを参照できます。出力ディレクトリが Web サーバーのパスにあることを確認する必要があります。

これには、独自の問題もあります。

  • 古いファイルを削除する方法でファイルシステムを管理する必要があります (そのため、サーバーのディスクがいっぱいになります)。
  • ファイルへの同期を管理する必要があります (2 つのサーバー スレッドが同じファイルを更新しないようにする必要があります)。
  • ああ、あるユーザーが生成した画像が別のユーザーに表示されないようにする必要があります。

多くの人がこの種のことをしているのを見てきました。ライブラリがあると確信しています。

于 2010-05-13T18:27:32.797 に答える