Os requisitos são uma função da exportação de PDF. A corrida multipartidária foi finalmente implementada. Eu fiz muitos desvios e suspeito que esse método ainda esteja em uma curva agora.
Há um plug -in JSPDF que pode gerar diretamente o PDF no front -end, o que é muito simples, mas não suporta o IE.
front-end:
Primeiro, introduza html2canvas.js
html2Canvas (document.body, {// screenShot Object // Os parâmetros detalhados podem ser configurados aqui Onerenderted: function (canvas) {// a renderização de chamadas de chamado de recompensa canvas.id.id = "myCanvas"; // imagem da imagem/base64/dataurl = canvas.tas.ts.tas.t = "myCanvas"; // base64 Dados da imagem/dataurl = canvas.tas.ts.Tas.TasTaur = "; Parâmetros Var FormData = Novo Formdata (); o método de transmissão e o endereço xhr.send (formData); êxito! // Converta os dados da URL da imagem com base64 em Blobfunction convertbase64urltoblob (urldata) {// remova o cabeçalho da URL e converta -os em byte var bytes = window.atob (urldata.split (',') [1]); // Disposto exceções, converta o código ASCII com menos de 0 a maior que 0 var ab = novo ArrayBuffer (bytes.length); var Ia = novo UINT8Array (AB); for (var i = 0; i <bytes.length; i ++) {ia [i] = bytes.charcodeat (i); } Retorne new Blob ([ab], {type: 'Image/png'});}Compatibilidade: Firefox 3.5+, Chrome, Opera, IE10+
Não suportado: iframe, plug-in do navegador, flash
As imagens de domínio cruzado precisam ser combinadas com o cabeçalho do servidor de domínio cruzado para permitir solicitações de domínio cruzado
Access-Control-Alow-Origin: * Access-Control-Alow-Credenciais: True
A imagem SVG não pode ser suportada diretamente, há um pacote de patch, mas eu não experimentei.
O IE9 não suporta o formato de dados do FormData, nem suporta o BLOB. Nesse caso, a string 64base gerada pela tela será removida e depois passada para o segundo plano diretamente. Depois que o fundo é recebido:
String base64 = img.split (",") [1]; base64decoder decody = new base64decoder (); byte [] imgbyte = decode.DecodeBuffer (base64);extremidade traseira:
Importe o pacote ITEXT JAR (Endereço oficial de download: https://sourceforge.net/projects/itext/)
@RequestMapping ("/exportpdf") public @ResponseBody Void ExportPDF (PARTETHTTTPSERVETREQUEST Solicitação, HTTPServletResponse resposta) lança servletexception, ioexception {resultData resultado = novo resultadodata (); // formato de resultado personalizado string filepath = "c: //exportpdf2.pdf"; String imagePath = "c: //exportimg2.bmp"; Documento documento = new document (); tente {map getMap = request.getFilemap (); MultipartFile mFile = (MultipartFile) getMap.get ("imgdata"); // obtém dados de entrada de dados file = mfile.getInputStream (); byte [] fileByte = FileCopyUtils.copyTobyteArray (arquivo); FileImageOutputStream ImageOutput = new FileImageOutputStream (novo File (ImagePath)); // Abra o fluxo de entrada Imageoutput.Write (FileByte, 0, FileByte.Length); // Gere o arquivo de imagem local Imageoutput.Close (); Pdfwriter.getInstance (documento, new FileOutputStream (filepath)); // iTextpdf file // document.setPagesize (Pagesize.a2); document.open (); document.add (novo parágrafo ("apenas teste ...")); Imagem imagem = imagem.getInstance (imagepath); // iText-PDF-IMAGE FLOAT HEIGTH = Image.getHeight (); largura de flutuação = imagem.getWidth (); int porcent = getPercent2 (heigth, largura); // dimensionar a imagem para dimensionar a imagem.Setalignment (image.middle); Image.ScalePercent (porcentagem+3); document.add (imagem); document.close (); resultado.SetSuccess (true); OperatelogService.addoperateloginfo (solicitação, "Exportado com sucesso: exportado Briefing PDF com sucesso"); } catch (documentException de) {System.err.println (de.getMessage ()); } catch (Exceção e) {e.printStackTrace (); resultado.SetSuccess (false); resultado.SterrorMessage (e.toString ()); tente {operatorlogservice.addoperatelogerror (solicitação, "Falha na exportação: exceção do servidor"); } catch (Exceção E1) {e1.printStackTrace (); }} Response.getWriter (). print (jsonObject.FromObject (resultado) .toString ());} private static int getPercent2 (float h, float w) {int p = 0; flutuar p2 = 0,0f; P2 = 530 / W * 100; p = Math.Round (P2); retornar p;}O ITEXT é um projeto de fonte de código aberto bem conhecido, uma biblioteca de classes Java usada para gerar documentos em PDF.
Velocidade rápida de processamento e suporta muitos recursos "avançados" em PDF.