요구 사항은 PDF를 내보내는 기능입니다. 다수의 달리기가 마침내 구현되었습니다. 나는 많은 우회를했고,이 방법이 여전히 구부러져 있다고 생각합니다.
프론트 엔드에서 PDF를 직접 생성 할 수있는 JSPDF 플러그인이있어 매우 간단하지만 IE를 지원하지 않습니다.
프론트 엔드 :
먼저 html2canvas.js를 소개합니다
html2canvas (document.body, {// 스크린 샷 객체 // 세부 매개 변수는 여기에서 onrendered : function (canvas) {// 렌더링 완료 콜백 canvas.id = "mycanvas"; // base64 이미지 data var var var var varurl = canvas.todaurl (image/png '); var formdata ()가 없으면 양식 대상 객체를 조롱합니다 방법 및 주소 xhr.send (formdata); xhr.onreadystatechange = function () {// 콜백 함수 if (xhr. readystate = 4) {var back = json.parse (xhr.responsetext); 성공적으로! ', true, drag : false : true}} else {aLertbox :'pdf Export! ', lock : true : false, ok : true}}}}}}}}}}}}}}}}. // base64로 이미지 URL 데이터를 BloBFunction으로 변환합니다. convertBase64UrltoBlob (urlData) {// URL 헤더를 제거하고 Byte var bytes = window.atob (urldata.split ( ',')로 변환합니다. // 예외를 처리하고 ASCII 코드를 0보다 작은 0 ~ 0 var AB = New ArrayBuffer (Bytes.Length)를 변환합니다. var ia = 새로운 uint8array (ab); for (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 : * 액세스-제어 홀로 인증 : True
SVG 이미지는 직접 지원할 수없고 패치 패키지가 있지만 시도하지 않았습니다.
IE9는 FormData 데이터 형식을 지원하지 않으며 Blob을 지원하지도 않습니다. 이 경우 캔버스에 의해 생성 된 64Base 문자열이 제거 된 다음 배경으로 직접 전달됩니다. 배경을받은 후 :
문자열 base64 = img.split ( ",") [1]; base64decoder decode = new Base64decoder (); 바이트 [] imgbyte = decode.decodebuffer (base64);
후단 :
Itext Jar 패키지 가져 오기 (공식 다운로드 주소 : https://sourceforge.net/projects/itext/)
@RequestMapping ( "/ExportPdf") public @ResponseBody void exportpdf (multiparthttpservletrequest request), httpservletResponse 응답) servletexception, ioexception {resultData result = new resultData (); // 사용자 정의 결과 형식 문자열 filepath = "c : //exportpdf2.pdf"; 문자열 imagePath = "c : //exportimg2.bmp"; 문서 문서 = 새 문서 (); {map getMap = request.getFileMap (); multipartfile mfile = (multipartfile) getMap.get ( "imgdata"); // data inputStream file = mfile.getInputStream (); 바이트 [] fileByte = filecopyutils.copytobytearray (파일); FileImageOutputStream imageOutput = 새 FileImageOutputStream (새 파일 (imagePath)); // 입력 스트림 열기 이미지 imageOutput.write (fileByte, 0, fileByte.length); // 로컬 이미지 생성 imageOutput.close (); pdfwriter.getInstance (문서, 새 FileOutputStream (FilePath)); // itextpdf 파일 // document.setPagesize (pagesize.a2); document.open (); document.add (새 단락 ( "그냥 테스트 ..."); 이미지 이미지 = image.getInstance (imagePath); // itext-pdf- 이미지 float heigth = image.getheight (); 플로트 너비 = image.getWidth (); int % = getpercent2 (heigth, 너비); // 이미지를 스케일로 스케일링하여 image.setalignment (image.middle); image.scalepercent (백분율+3); document.add (이미지); document.close (); result.setSuccess (true); OperateLogService.addoperateLoginfo (요청, "성공적으로 내보내기 : 수출 브리핑 PDF가 성공적으로 수출"); } catch (DocumentException de) {System.err.println (de.getMessage ()); } catch (예외 e) {e.printstacktrace (); result.setSuccess (false); result.seterRormessage (e.toString ()); try {OperatorLogservice.addoperateLogerRor (요청, "내보내 실패 : 서버 예외"); } catch (예외 e1) {e1.printstacktrace (); }} response.getWriter (). print (jsonObject.fromObject (result) .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는 PDF 문서를 생성하는 데 사용되는 Java 클래스 라이브러리 인 잘 알려진 오픈 소스 사이트 SourceForge 프로젝트입니다.
빠른 처리 속도와 많은 PDF "고급"기능을 지원합니다.