المتطلبات هي وظيفة تصدير PDF. تم تنفيذ التشغيل متعدد الأطراف أخيرًا. لقد أخذت العديد من الالتفافات ، وأظن أن هذه الطريقة لا تزال في منحنى الآن.
يوجد مكون إضافي JSPDF يمكنه إنشاء PDF مباشرة على الواجهة الأمامية ، وهو أمر بسيط للغاية ، لكنه لا يدعم IE.
الواجهة الأمامية:
أولا تقديم html2canvas.js
html2canvas (document.body ، {// screenshot object // يمكن تكوين المعلمات التفصيلية هنا inrendered: function (canvas) {// encluder canvaS canvas. المعلمات VARMDATA = new FormData () طريقة الإرسال والعناوين XHR.Send (formdata) ؛ تم تصديره بنجاح! '، قفل: سحب: خطأ ، موافق: صحيح}) ؛ // قم بتحويل بيانات عنوان 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 (عنوان التنزيل الرسمي: https://sourceforge.net/projects/itext/)
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.