Les exigences sont fonction de l'exportation du PDF. La course multipartite a finalement été mise en œuvre. J'ai pris de nombreux détours, et je soupçonne que cette méthode est encore dans un virage maintenant.
Il existe un plugin JSPDF qui peut générer directement du PDF sur l'avant, ce qui est très simple, mais ne prend pas en charge IE.
l'extrémité avant:
Introduire d'abord html2canvas.js
html2Canvas (document.body, {// Object ScreenShot // Les paramètres détaillés peuvent être configurés ici OnSendered: fonction (Canvas) {// le rendu de la base de la base 64 Canvas.id = "MyCanvas"; // l'image Base64 Data '); Paramètres var FormData = new FormData (); // Configurez la méthode de transmission et l'adresse xhr.send (formdata); xhr.onreadystateChange = function () {// function de rappel if (xhr.readystate == 4) {if (xhr.status == 200) {var back = JSON. Alertbox ({Content: 'PDF exporté avec succès!', Lock: true, glisser: false, ok: true}); }); // convertir les données d'URL de l'image avec Base64 en blobfonction convertBase64UrlToBlob (urldata) {// Retirez l'en-tête URL et convertissez-la en octet var bytes = window.atob (urldata.split (',') [1]); // disposer des exceptions, convertir le code ASCII avec moins de 0 à plus de 0 var AB = nouveau ArrayBuffer (Bytes.Length); var ia = new uint8Array (ab); pour (var i = 0; i <bytes.length; i ++) {ia [i] = bytes.Charcodeat (i); } return new blob ([ab], {type: 'image / png'});}Compatibilité: Firefox 3.5+, Chrome, opéra, IE10 +
Non pris en charge: iframe, plug-in de navigateur, flash
Les images de domaine transversal doivent être combinées avec l'en-tête du serveur transversal pour permettre les demandes de domaine transversal
Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: True
L'image SVG ne peut pas être directement prise en charge, il y a un package de patch, mais je ne l'ai pas essayé.
IE9 ne prend pas en charge le format de données FormData, et il ne prend pas en charge BLOB. Dans ce cas, la chaîne 64Base générée par Canvas sera supprimée puis transmise directement à l'arrière-plan. Une fois le contexte reçu:
String Base64 = img.split (",") [1]; base64decoder decode = new Base64DecOder (); BYTE [] IMGBYTE = DECODE.DECODEBUFFER (BASE64);extrémité arrière:
Importez le package JAR ITEXT (Adresse de téléchargement officielle: https://sourceforge.net/projects/itext/)
@RequestMapping ("/ ExportPdf") public @ResponseBody void exportpdf (MultipartHTTTPServLetRequest Request, httpServletResponse réponse) lève Servlexception, ioException {resultData result = new resultData (); // chaîne de format de résultat personnalisé filepath = "c: //exportpdf2.pdf"; String imagePath = "c: //exportimg2.bmp"; Document document = nouveau document (); essayez {map getmap = request.getFileMap (); MultipartFile mFile = (multipartFile) getmap.get ("imgdata"); // Obtenez des données inputStream file = mfile.getInputStream (); Byte [] filebyte = fileCopyUtils.copyToByTearray (fichier); FileImageOutputStream imageOutput = new FileImageOutputStream (nouveau fichier (imagePath)); // Ouvrir une entrée Stream ImageOutput.Write (FileByte, 0, FileByte.Length); // générer un fichier image local imageOutput.close (); Pdfwriter.getInstance (document, nouveau fileoutputStream (filepath)); // itextpdf file // document.setPageSize (pagesize.a2); document.open (); document.add (nouveau paragraphe ("Test Just ...")); Image image = image.getInstance (imagePath); // itext-pdf-image float heigth = image.getheight (); float width = image.getWidth (); int pour cent = getpercent2 (heigth, largeur); // Échelle de l'image pour échelle Image.SetAlignment (image.middle); Image.Scalepercent (pourcentage + 3); document.add (image); document.close (); résultat.setsuccess (true); operatelogService.addoperateLoginfo (demande, "exporté avec succès: briefing exporté PDF avec succès"); } catch (documentException de) {System.err.println (de.getMessage ()); } catch (exception e) {e.printStackTrace (); résultat.setsuccess (false); result.seTerrorMessage (e.toString ()); essayez {operatorLogService.addoperateLoGerror (demande, "Exportation échoué: exception du serveur"); } catch (exception e1) {e1.printStackTrace (); }} réponse.getWriter (). print (jsonObject.FromObject (result) .toString ());} private static int getpercent2 (float h, float w) {int p = 0; float p2 = 0,0f; p2 = 530 / w * 100; p = math.round (p2); retour p;}ITEXT est un projet de site de site open source bien connu, une bibliothèque de classe Java utilisée pour générer des documents PDF.
Vitesse de traitement rapide et prend en charge de nombreuses fonctionnalités PDF "avancées".