요구 사항은 PDF를 내보내는 기능입니다. 다수의 달리기가 마침내 구현되었습니다. 나는 많은 우회를했고,이 방법이 여전히 구부러져 있다고 생각합니다.
프론트 엔드에서 PDF를 직접 생성 할 수있는 JSPDF 플러그인이있어 매우 간단하지만 IE를 지원하지 않습니다.
프론트 엔드 :
먼저 html2canvas.js를 소개합니다
html2canvas (document.body, {// 스크린 샷 객체 // 세부 매개 변수는 여기에서 onrendered : function (canvas) {// 렌더링 완료 콜백 canvas.id = "mycanvas"; // base64 이미지 데이터가 생성됩니다. 형식이 없으면 var formdata (); "../bulletin/exportpdf"; // xhr.send (formdata) {// 콜백 함수 if (xhr.status) aLertbox ({content : 'pdf는 성공적으로 내보 란! }}}); // base64로 이미지 URL 데이터를 BloBFunction으로 변환합니다. convertBase64UrltoBlob (urlData) {// URL 헤더를 제거하고 Byte var bytes = window.atob (urldata.split ( ',')로 변환합니다. // 예외를 방어하고 ASCII 코드를 0 ~ 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 패키지를 가져옵니다
@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 "고급"기능을 지원합니다.
그러나 itext 오류가 발생하면 오류를보고하지 않습니다. 당신은 그것을 뛰어 넘어 PDF 문서를 되돌아보고 오류의 원인을 찾을 수 없습니다. 정말 좌절입니다.
마지막으로 인터넷과 바이두 검색의 관련 블로그 게시물과 게시물에 감사드립니다.
위의 기사는 HTML 페이지를 그림으로 저장하고 PDF에 그림을 작성하여 전체 구현 (권장)을 달성하기 위해 내가 공유하는 전체 컨텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.