テクノロジーの活用 itext.jar: バイト ファイル入力ストリームを画像、PDF などに変換します。 html2canvas.js: HTML ページ領域のスクリーンショットを base64 エンコードされた画像リソースとして保存します java + js の 1. リソースを準備する itext.jar html2canvas.js 2. フロントエンドコード: //スクリーンショット操作を実行します。document.querySelector("body") はスクリーンショットを撮る領域です。function test() { html2canvas(document.querySelector("本文"), { onrendered: 関数 (キャンバス) { var dataUrl = canvas.toDataURL('image/png'); var formData = new FormData(); //フォームオブジェクトをシミュレート formData.append("imgData", convertBase64UrlToBlob(dataUrl)); //データを書き込む var xhr = new XMLHttpRequest(); //データ送信方法 xhr.open("POST", "http://localhost:8080/pdf"); //送信方法とアドレスを構成する xhr.send(formData); xhr.onreadystatechange = function () { //コールバック関数}; } }); } // イメージの Base64 エンコードをフォーマットし、バイト ファイル ストリームに変換します。関数 convertBase64UrlToBlob(urlData){ //URLヘッダーを削除してバイトに変換します var バイト = window.atob(urlData.split(',')[1]); //例外を処理し、0 未満の ASCII コードを 0 より大きい値に変換します var ab = 新しいArrayBuffer(bytes.length); var ia = new Uint8Array(ab); (var s = 0; s < bytes.length; s++) の場合 { ia[s] = bytes.charCodeAt(s); } 新しいBlob([ab]、{type:'image/png'})を返します。 } <body onclick="test()">//スクリーンショットメソッドを呼び出す 3. バックエンドコード: @RequestMapping(値 = "/pdf",メソッド = RequestMethod.POST) パブリック void テスト (MultipartHttpServletRequest リクエスト、HttpServletResponse レスポンス) は IOException をスローします { 文字列ファイルパス = "D:\\blog\\exportPdf2.pdf"; 文字列 imagePath = "D:\\blog\\exportImg2.png"; ドキュメント document = new Document(); 試す{ マップ getMap = request.getFileMap(); MultipartFile mfile = (MultipartFile) getMap.get("imgData"); //データを取得 InputStream file = mfile.getInputStream(); byte[] fileByte = FileCopyUtils.copyToByteArray(ファイル); FileImageOutputStream imageOutput = new FileImageOutputStream(new File(imagePath));//入力ストリームを開きます imageOutput.write(fileByte, 0, fileByte.length);//ローカルイメージファイルを生成します imageOutput.close(); PdfWriter.getInstance(document, new FileOutputStream(filePath)); //itextpdf ファイルdocument.open(); document.add(新しい段落("JUST TEST ...")); 画像 image = Image.getInstance(imagePath); //itext-pdf-image 浮動小数点の高さ = image.getHeight(); 浮動小数点の幅 = image.getWidth(); int percent = getPercent2(heigth, width); // 画像を縮小します image.setAlignment(Image.MIDDLE); image.scalePercent(パーセント+3); document.add(画像); ドキュメントを閉じる(); }キャッチ(DocumentException de){ System.err.println(de.getMessage()); } キャッチ(例外e){ e.printStackTrace(); } } プライベート静的int getPercent2(float h, float w) { 整数p = 0; 浮動小数点数 p2 = 0.0f; p2 = 530 / w * 100; p = Math.round(p2); p を返します。 } 4 パッケージ名 com.itextpdf.text.Document をインポートします。 com.itextpdf.text.DocumentException をインポートします。 com.itextpdf.text.Image をインポートします。 com.itextpdf.text.Paragraph をインポートします。 com.itextpdf.text.pdf.PdfWriter をインポートします。 org.springframework.boot.SpringApplication をインポートします。 org.springframework.boot.autoconfigure.SpringBootApplication をインポートします。 org.springframework.stereotype.Controller をインポートします。 org.springframework.util.FileCopyUtils をインポートします。 org.springframework.web.bind.annotation.RequestMapping をインポートします。 org.springframework.web.bind.annotation.RequestMethod をインポートします。 org.springframework.web.multipart.MultipartFile をインポートします。 org.springframework.web.multipart.MultipartHttpServletRequest をインポートします。 javax.imageio.stream.FileImageOutputStream をインポートします。 javax.servlet.http.HttpServletResponse をインポートします。 java.io.File をインポートします。 java.io.FileOutputStream をインポートします。 java.io.IOException をインポートします。 java.io.InputStream をインポートします。 java.util.Map をインポートします。 4 フロントエンドでスクリーンショットを撮り、バックエンド インターフェイスにアクセスし、スクリーンショット ファイルを PDF またはその他の形式でローカルに保存します。 興味のある学生はバックエンドを変更してファイルをローカルにダウンロードすることができます 5 プロジェクトソースコードアドレス https://github.com/zhangjy520/learn_java/tree/master/boot これで、HTML から PDF へのスクリーンショット保存機能の実装に関するこの記事は終了です。より関連性の高い HTML から PDF へのスクリーンショット保存コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。 |
はじめに以前は、Docker イメージは Azure のコンテナー レジストリに保存されていました。...
序文403 クロスオリジン エラーが発生しNo 'Access-Control-Allow-...
Web プロジェクトを開発する場合、IIS をインストールする必要があります。IIS がインストール...
MySQL グリーンバージョン設定コードと 1067 エラーMySQL エンコーディングを表示 ...
目次結果を一目で見るハート効果デジタルスクロールアニメーションアニメーションのように結果を一目で見る...
自社製品にクリック後1~2秒待機時間があるボタン(確認メールを送信する)があるため、クリック後の1~...
方法:実際のプロジェクトを例に挙げてみましょう。 .lk-ツールバー{ .el-入力{ 幅: 169...
フロントエンドcss3 フィルターは、Web ページのグレー効果を実現できるだけでなく、ナイト モー...
目次1. IDEAはdockerプラグインをダウンロードします2. クラウドサーバーDocker 2...
序文:プロジェクトの開発中に、1 行にナビゲーション バーが多すぎる場合に水平スクロール バーを実装...
序文要素がビューポート内にあるかどうかを監視する2つの方法を共有する1. 位置計算Element.g...
目次1 システムの紹介2 システムショートカット3 一般的なシステムコマンド1 システムの紹介 1....
高可用性 Web クラスターを実現する Keepalived+Nginx+Tomcat 1. Ngi...
位置プロパティposition プロパティは、要素に使用する配置方法のタイプ (静的、相対的、固定、...
ファイルコントロールを美しくする理由は何ですか?他の子供たちはみんなきちんとしたきれいな服を着ている...