2

iframe 内で PDF を印刷するためのいくつかのオプションを調査しましたが、どれも機能していないようです。

簡単な詳細:

  1. ユーザーからいくつかの検索パラメーターを取得します。
  2. データベース検索を行い、Apachi FOP を使用して結果の PDF を生成します。
  3. 印刷ボタンとキャンセル ボタンのある Web ページに誘導されます。
  4. ユーザーが [印刷] ボタンをクリックすると、PDF を表示するウィンドウが開きます。
  5. ユーザーが PDF を印刷するための印刷ダイアログが開きます。
  6. PDF ファイルがサーバーから削除されます。
  7. 窓が閉まる

高度な詳細:

  • これは IE8 でのみ動作する必要があります。
  • FOP 統合は、XSLT 変換を使用しません。文字列としてフォーマットされた入力 FOP XML の StringReader のみを使用します。
  • PDF を表示するウィンドウは、実際には 2 つの JSP ページです。
  • 最初のページ:
    • ソースとして 2 番目の JSP ページを含む iframe がある
    • PDF を iframe に印刷する printPDF() 関数をロード時に実行します。
  • 2 番目のページ:
  • Java BufferedOutputStream および ServletOutputStream を使用
    • 出力後にファイルを削除します
    • out = pageContent.pushBody(); を使用します。

最初の jsp ページ (印刷関数を呼び出す実行) の一部を次に示します。

<body onload='printPDF()'>
<table>
    <tr>
        <td class="content">
            <%
            // get myfilename from the myfile parameter on the URL
            String myfile = request.getParameter("myfile");
            out.print("<iframe src='fc_view_letter.jsp?myfile="+ myfile + "' id='pdfFrame'></iframe>");
            %>
        </td>
    </tr>
</table>
<script>
    function printPDF()
    {
        var id = 'pdfFrame';
        var iframe = document.frames ? document.frames[0] : document.getElementById(id);
        var ifWin = iframe.contentWindow || iframe;

        ifWin.focus();
        ifWin.printPage();
        //ifWin.print();
    }
</script>
</body>

2 番目の JSP ページ (pdf を表示するページ) のほとんどを次に示します。

<%@ page session="false" %>
<%@ page import="java.io.*" %>
<%@ page import="java.net.URLDecoder" %>
<html>
<head>
</head>
<body>
<%
String myfile = request.getParameter("myfile");
String myfiledecoded = "";
myfiledecoded = URLDecoder.decode(myfile, "UTF8");
String myfilename = myfiledecoded;
String extension;
int dotPos = myfilename.lastIndexOf(".")+1;
extension = myfilename.substring(dotPos);
int slashPos = myfilename.lastIndexOf("/")+1;
String secondparam = "filename=" + myfiledecoded.substring(slashPos);
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", secondparam);
try {
        ServletOutputStream sout = response.getOutputStream();
        response.setHeader("Content-Disposition", secondparam);

        File  file  = new File(myfilename);
        FileInputStream fstream = new FileInputStream(file);

        BufferedInputStream bis = null;
        bis = new BufferedInputStream(fstream);


        BufferedOutputStream bos = null;
        bos = new BufferedOutputStream(sout);

        byte[] buff = new byte[1024];
        int bytesRead;

        while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
             bos.write(buff, 0, bytesRead);
        }

         bis.close();
         bos.close();

         sout.flush();
         sout.close();

         //file.delete();

}
catch (Exception e)  {    
 System.out.println("Exception Occured...................." );
}
   out.clear();
    out = pageContext.pushBody();
%>
</body>
</html>

私が問題だと思うのは、バッファがすべてのhtmlを排除し、PDFのみを表示すると考えていることです。または、少なくともIEでそれを行います。Firefox を見ると、PDF ファイルが埋め込まれていました。HTML ではないため、iframe のコンテンツを取得できない可能性があります。

これまでの私の情報源は次のとおりです。

Javascript iframe コンテンツのみを印刷

PDFが生成された後に印刷ダイアログを開くには?

http://www.ehow.com/how_7352227_use-javascript-print-pdf.html

http://www.webmasterworld.com/forum91/4086.htm

javascriptを使用してembed/iframe内でpdfを印刷する方法

親ウィンドウから動的に作成された iframe の内容を印刷する

4

1 に答える 1

0

私がやったのは、PDFを生成し、iTextを使用して、PDFがロードされたときに実行される印刷JavaScriptを追加することでした

于 2013-12-27T13:29:45.383 に答える