先日、マーキングシステムの開発を依頼され、電話をかけるのに時間がかかりました。
1.コンパイルツールと環境:eclipse + jdk1.8 + tomcat8.5 + ireport5.0.1 + jasperreports4.5.1 + Firefox browser
2.プリンターを呼び出す方法は2つあります。
これは、ireportでテンプレートを設計した後でジャスパーファイルを生成し、バックグラウンドでジャスパーファイルを呼び出してデータを転送し、pdfファイルを生成して、プロジェクトのルートディレクトリの下の一時フォルダーに配置します。このコードは配置されません。つまり、次のpdfPathはpdfファイルです。パス、例:D:\ xxx \ apache-tomcat-8.5.53 \ webapps \プロジェクト名\ temp \ xxx.pdf、
コードをすぐ下に置きます。
(1)サーバー側でプリンターを呼び出す(利点:一度に1つのキーで印刷できます。欠点:サーバーとクライアントでプリンターを共有する必要があります。サーバーの電源をオフにして再起動すると、プリンターを再構成する必要があるため、これは最終的な計画ではありません)
String printName = "xxxx"; // プリンターの名前 boolean isChoose = false ; // 対応するプリンターがあるかどうか File file = new File(pdfPath); PDDocument document = PDDocument.load(file); // PDFファイルを読み取る PrinterJobジョブPrinterJob.getPrinterJob =(); //は、印刷ジョブを作成する // 指定されたプリンタの名前を取得するために、プリンタの全てをループ するための(PrintServiceのPS:PrinterJob.lookupPrintServices()){ 文字列PSName = ps.toStringを(); IF (psName.equals (printName)){ isChoose= true ; job.setPrintService(ps); break ; } } if (isChoose){ job.setPageable(new PDFPageable(document)); Paper paper = new Paper(); paper.setSize(227、142); // セット印刷用紙サイズ:長さ(mm)* 72 / 25.4私はここにいます80mm * 50mm paper.setImageableArea(0、0、paper.getWidth()、// 印刷位置/座標を設定します paper.getHeight()); PageFormat pageFormat = new PageFormat(); pageFormat.setPaper(paper); Book book = new Book(); // 一部の属性が印刷されたシートの数をスケーリングするかどうか(document.getNumberOfPages()はpdfファイルのページ数)などを設定し、ここで実際のサイズを選択します book.append(new PDFPrintable (文書、Scaling.ACTUAL_SIZE)、PageFormatに、document.getNumberOfPages()); job.setPageable(書籍); job.print(); // 印刷を開始 } // ファイルの削除 IF (File.Exists()){ ファイル。削除(); }
(2)クライアント(ローカル)プリンターを呼び出す(jsはブラウザーを実装してプリンターを呼び出す)(利点:ローカルプリンターを直接呼び出す、設定は必要ありません。欠点:印刷プロンプトボックスがポップアップし、操作が1つ増えます)
背景を呼び出してPDFファイルを生成し、ファイルパスを前景に渡します。次のコードをページに追加します。ここでは、ページに表示します。これは、印刷プレビューと同じです(表示したくないのですが、表示を追加します:スタイルになし)。印刷結果が空白です。後でデバッグする時間があります)
<iframe style = "font-weight:bold; width:100%; height:300px" id = "printIframe"> </ iframe>
印刷ボタンをクリックするトリガーメソッドに次のコードを追加します。
var arr = data.pdfPath.split( "project name \\"); <!-data.pdfPathはフォアグラウンドから返されたpdfパスであり、プロジェクト 名の後にパスを取得するだけでよい-> $( "#printIframe ").attr(" src "、arr [1]); <!-iframeのsrcを読み込み、pdfファイルを読み込みます-> setTimeout(function(){ document.getElementById( 'printIframe')。contentWindow.print (); }、500);
クリックすると、印刷プロンプトが表示されます。デフォルトのプリンターの場合は、[印刷]をクリックします(プリンターは最初に用紙サイズを設定する必要があります)
インターネット上でクライアントを呼び出したプリンターは、lodopプラグインを使用してワンクリック印刷を実現できることを発見しましたが、印刷コンテンツには、トライアルバージョンのいくつかの単語が自動的に追加されます。 1ステップの操作なので、次のステップに進みませんでした。
別の方法として、クライアント側にAdobeリーダーをインストールし、javaバックグラウンドコールでAcroRd32.exeを実行して直接印刷します。これは実現できますが、インストールしたAdobeリーダーはラベルpdfファイルを開くだけなのでQRコードを表示し、他のコンテンツは空白です。フォントの問題については、時間の関係上、あきらめましたが、必要に応じて、オンラインで特定の操作を見つけることができます。