المتطلبات هي وظيفة تصدير PDF. تم تنفيذ التشغيل متعدد الأطراف أخيرًا. لقد أخذت العديد من الالتفافات ، وأظن أن هذه الطريقة لا تزال في منحنى الآن.
يوجد مكون إضافي JSPDF يمكنه إنشاء PDF مباشرة على الواجهة الأمامية ، وهو أمر بسيط للغاية ، لكنه لا يدعم IE.
الواجهة الأمامية:
أولا تقديم html2canvas.js
html2canvas (document.body ، {// screenshot object // يمكن تكوين المعلمات التفصيلية هنا inrendered: function (canvas) {// عرض canvas canvas.id = "mycanv" ؛ // التنسيق ، أو بدون معلمات VARDATA = new formdata () ؛ "../bulletin/exportpdf") ؛ if (back.success == true) {alertbox ({content: 'pdf تم تصديره بنجاح! }}}}}}}) ؛ // قم بتحويل بيانات عنوان URL Image باستخدام base64 إلى blobfunction convertBase64UrlTOBlOB (urldata) {// قم بإزالة رأس URL وتحويله إلى byte var bytes = window.atob (urldata.split ('،') [1]) ؛ // الدفاع عن الاستثناء وتحويل رمز ASCII بأقل من 0 إلى أكبر من 0 var ab = new ArrayBuffer (bytes.length) ؛ var ia = new uint8array (ab) ؛ لـ (var i = 0 ؛ i <bytes.length ؛ i ++) {ia [i] = bytes.charcodeat (i) ؛ } إرجاع blob new ([ab] ، {type: 'Image/Png'}) ؛}التوافق: Firefox 3.5+ ، Chrome ، Opera ، IE10+
غير مدعوم: Iframe ، البرنامج المساعد للمتصفح ، فلاش
يجب دمج الصور المتقاطعة مع رأس خادم عبر المجال للسماح بطلبات المجال المتقاطع
الوصول إلى السيطرة على الأصول: * Access-Control-Callereds: True
لا يمكن دعم صورة SVG مباشرة ، فهناك حزمة تصحيح ، لكنني لم أجربها.
لا يدعم IE9 تنسيق بيانات FormData ، ولا يدعم Blob. في هذه الحالة ، ستتم إزالة السلسلة 64Base التي تم إنشاؤها بواسطة قماش ثم تم نقلها إلى الخلفية مباشرة. بعد استلام الخلفية:
سلسلة base64 = img.split ("،") [1] ؛ decode BASE64Decoder = جديد BASE64DECODER () ؛ byte [] imgbyte = decode.decodeBuffer (base64) ؛نهاية الطريق:
استيراد حزمة itext jar
requestmapping ("/exportpdf") publicresponsebody void esportpdf (multiparthttpletRequest request ، httpservletresponse) يلقي servletexception ، ioException {resultData result = new resultdata () ؛ // Custom Result Format String FilePath = "C: //exportpdf2.pdf" ؛ String ImagePath = "C: //exportimg2.bmp" ؛ وثيقة المستند = مستند جديد () ؛ حاول {map getMap = request.getFileMap () ؛ multipartfile mfile = (multipartfile) getMap.get ("imgdata") ؛ // احصل على ملف inputStream data = mfile.getInputStream () ؛ byte [] filebyte = fileCopyUtils.copyTobyTearray (file) ؛ 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.getInstance (ImagePath) ؛ // itext-pdf-dimage float heigth = image.getheight () ؛ عرض التعويم = Image.getWidth () ؛ int في المئة = getPercent2 (heigth ، العرض) ؛ // تحجيم الصورة لتوسيع صورة. Image.scaleperCent (في المئة+3) ؛ document.add (Image) ؛ document.close () ؛ النتيجة. OperAtelogService.AddOperateloginfo (طلب ، "تم تصديره بنجاح: تصدير موجز pdf") ؛ } catch (documentException de) {system.err.println (de.getMessage ()) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ النتيجة. النتيجة. Try {PropratorLogService.AddOperateLogerror (طلب ، "فشل التصدير: استثناء الخادم") ؛ } catch (استثناء e1) {e1.printstacktrace () ؛ }} response.getWriter (). print (jsonobject.fromObject (النتيجة) .ToString ()) ؛} private static int getpercent2 (float h ، float w) {int p = 0 ؛ تعويم P2 = 0.0F ؛ P2 = 530 / W * 100 ؛ p = math.round (p2) ؛ العودة p ؛}Itext هو مشروع معروف لموقع Source SourceForge ، وهو مكتبة فئة Java تستخدم لإنشاء مستندات PDF.
سرعة المعالجة السريعة ويدعم العديد من الميزات "المتقدمة" PDF.
ومع ذلك ، عند حدوث خطأ itext ، لن يبلغ عن خطأ. سوف تقفز فوقه وتنظر إلى مستند PDF ولا يمكنك العثور على سبب الخطأ. إنه حقًا إحباط.
أخيرًا ، أود أن أشكر منشورات ومشاركات المدونة ذات الصلة على الإنترنت وبحث Baidu.
إن المقالة أعلاه تنقذ صفحة HTML كصورة وتكتب الصورة إلى PDF لتحقيق التنفيذ الكامل (الموصى به) هو المحتوى الكامل الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.