ข้อกำหนดเป็นหน้าที่ของการส่งออก PDF การทำงานหลายฝ่ายได้ถูกนำไปใช้ในที่สุด ฉันได้หยุดไปหลายครั้งและฉันสงสัยว่าวิธีนี้ยังคงอยู่ในโค้งงอในขณะนี้
มีปลั๊กอิน JSPDF ที่สามารถสร้าง PDF โดยตรงที่ปลายด้านหน้าซึ่งง่ายมาก แต่ไม่รองรับเช่น
ส่วนหน้า:
แนะนำ html2canvas.js เป็นครั้งแรก
html2canvas (document.body, {// screenshot object // พารามิเตอร์รายละเอียดสามารถกำหนดค่าได้ที่นี่ onrendered: ฟังก์ชั่น (Canvas) {// การแสดงผลการเรียกกลับ Canvas Canvas.id = "Mycanvas"; หรือไม่มีพารามิเตอร์ var formdata = new FormData (); "../bulletin/exportpdf"); == TRUE) {AlertBox ({เนื้อหา: 'PDF ส่งออกสำเร็จ!', Lock: True, Drag: False, OK: TRUE}); - // แปลงข้อมูล URL รูปภาพด้วย base64 เป็น blobfunction ConvertBase64urltoblob (urldata) {// ลบส่วนหัว URL และแปลงเป็นไบต์ byte var = window.atob (urldata.split (',') [1]); // ปกป้องข้อยกเว้นและแปลงรหัส ASCII ด้วยน้อยกว่า 0 เป็นมากกว่า 0 var ab = new ArrayBuffer (bytes.length); var ia = ใหม่ uint8array (ab); สำหรับ (var i = 0; i <bytes.length; i ++) {ia [i] = bytes.charcodeat (i); } ส่งคืน blob ใหม่ ([ab], {type: 'image/png'});}ความเข้ากันได้: Firefox 3.5+, Chrome, Opera, IE10+
ไม่รองรับ: iframe, ปลั๊กอินเบราว์เซอร์, แฟลช
รูปภาพข้ามโดเมนจะต้องรวมกับส่วนหัวเซิร์ฟเวอร์ข้ามโดเมนเพื่ออนุญาตคำขอข้ามโดเมน
Access-Control-Ollow-Origin: * Access-Control-Ollow-Credentials: TRUE
ไม่สามารถรองรับภาพ SVG ได้โดยตรงมีแพ็คเกจแพทช์ แต่ฉันยังไม่ได้ลอง
IE9 ไม่รองรับรูปแบบข้อมูล FormData และไม่รองรับ Blob ในกรณีนี้สตริง 64Base ที่สร้างขึ้นโดยผืนผ้าใบจะถูกลบออกแล้วส่งผ่านไปยังพื้นหลังโดยตรง หลังจากได้รับพื้นหลัง:
String base64 = img.split (",") [1]; base64decoder decode = ใหม่ base64decoder (); ไบต์ [] imgbyte = decode.decodeBuffer (base64);ปลายด้านหลัง:
นำเข้าแพ็คเกจ itext jar
@RequestMapping ("/exportPdf") สาธารณะ @ResponseBody เป็นโมฆะ ExportPDF (MultiparthttpservletRequest คำขอ httpservletResponse) โยน servletexception, ioexception // สตริงรูปแบบผลลัพธ์ที่กำหนดเอง filePath = "C: //EXPORTPDF2.pdf"; String imagePath = "C: //exportimg2.bmp"; เอกสารเอกสาร = เอกสารใหม่ (); ลอง {map getMap = request.getFileMap (); multipartFile mFile = (multipartFile) getMap.get ("imgdata"); // รับ data inputstream file = mfile.getInputStream (); BYTE [] fileByte = fileCopyutils.copytobyteArray (ไฟล์); fileImageOutputStream imageOutput = ใหม่ fileImageOutputStream (ไฟล์ใหม่ (imagePath)); // เปิดอินพุตสตรีม imageOutput.write (filebyte, 0, filebyte.length); // สร้างภาพรูปภาพท้องถิ่น imageOutput.close (); pdfwriter.getInstance (เอกสาร, ใหม่ fileOutputStream (filePath)); // itextpdf file // document.setPagesize (pagesize.a2); document.open (); document.add (ย่อหน้าใหม่ ("แค่ทดสอบ ... ")); Image image = image.getInstance (imagePath); // itext-pdf-image heigth = image.getheight (); ความกว้างลอย = image.getWidth (); int เปอร์เซ็นต์ = getpercent2 (heigth, width); // การปรับขนาดภาพเป็นสเกลภาพการจัดตำแหน่ง (image.middle); image.scalepercent (เปอร์เซ็นต์+3); document.add (รูปภาพ); document.close (); result.setsuccess (จริง); operatelogservice.addoperateloginfo (คำขอ "ส่งออกสำเร็จ: ส่งออกการบรรยายสรุป PDF สำเร็จ"); } catch (documentException de) {system.err.println (de.getMessage ()); } catch (exception e) {e.printstacktrace (); result.setsuccess (เท็จ); result.seterRorMessage (e.toString ()); ลอง {OperatorLogService.adDoperAtelogError (คำขอ, "การส่งออกล้มเหลว: ข้อยกเว้นเซิร์ฟเวอร์"); } catch (Exception e1) {e1.printstacktrace (); }} response.getWriter (). พิมพ์ (jsonObject.FromObject (ผลลัพธ์) .toString ());} ส่วนตัวคงที่ int getpercent2 (ลอย H, ลอย w) {int p = 0; ลอย p2 = 0.0f; p2 = 530 / w * 100; p = math.round (p2); กลับ p;}ITEXT เป็นโครงการ Open Source Source SourceForge ที่รู้จักกันดีซึ่งเป็นไลบรารีคลาส Java ที่ใช้ในการสร้างเอกสาร PDF
ความเร็วในการประมวลผลที่รวดเร็วและรองรับคุณสมบัติ "ขั้นสูง" PDF จำนวนมาก
อย่างไรก็ตามเมื่อเกิดข้อผิดพลาด ITEXT คุณจะไม่รายงานข้อผิดพลาด คุณจะกระโดดข้ามมันและมองย้อนกลับไปที่เอกสาร PDF และไม่พบสาเหตุของข้อผิดพลาด มันเป็นความหงุดหงิดจริงๆ
ในที่สุดฉันขอขอบคุณโพสต์บล็อกและโพสต์ที่เกี่ยวข้องบนอินเทอร์เน็ตและการค้นหา Baidu
บทความข้างต้นบันทึกหน้า HTML เป็นรูปภาพและเขียนรูปภาพไปยัง PDF เพื่อให้ได้การใช้งานเต็มรูปแบบ (แนะนำ) เป็นเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น