1/************************************************************************************* 2 wisebookPrint å°å· 3 **************************************************************************************/ 4(function () { 5 /** 6 * wisebookPrint CSSè¨å® 7 * @param options 8 */ 9 wisebookPrint = function (options) { 10 var path = 'v2_css/print/print.css'; 11 if (viewUtils.browser === 'msie' || viewUtils.browser === 'edge') { 12 path = 'v2_css/print/printer_ie9more.css'; 13 } else if (viewUtils.browser === 'safari') { 14 path = 'v2_css/print/printer_safari.css?' + new Date().getTime(); 15 } 16 this.printCss = viewPath + path; 17 $.extend(this.op, options); 18 }; 19 20 wisebookPrint.prototype = { 21 printCss: null, 22 op: { 23 printMode: null, 24 popHt: $(window).innerHeight(), 25 popWd: $(window).innerWidth() - 400, 26 popX: 150, 27 popY: 50, 28 popTitle: '', 29 popClose: true 30 }, 31 originalParts: {zoom: "", width: 0, height: 0, list: []}, 32 originalTotalSize: { 33 width: 0, 34 height: 0 35 }, 36 printInfo: { 37 dir: "", //both, single 38 page: "" 39 }, 40 41 writeDoc: null, 42 printWindow: null, 43 44 /** 45 * å°å·æ©è½ã¯ãã 46 * @param {object} info - ããã¯æ å ± 47 */ 48 startPrinter: function (info) { 49 $("#printIframe").remove(); 50 51 this.originalImgZoom = (PARAM.zoominfo["200"].enable) ? "200" : "100"; 52 this.printInfo.dir = (info.pageList.length === 2) ? "both" : "single"; 53 54 if (this.printInfo.page !== info.pageList) { 55 this.printInfo.page = info.pageList; 56 this.originalimgCreate(); 57 } else { 58 this.originalImgToPrinter(); 59 } 60 ADDONS.loadingImgView('none'); 61 }, 62 63 /** 64 * å°å·ããããã¯ã®ç´é¢ç»åãæºå 65 */ 66 originalimgCreate: function () { 67 var that = this, canvasElem, 68 originalsize = {width: 0, height: PARAM.zoominfo[this.originalImgZoom].height}, 69 elementArr = [], bothImgs = [];//è¦éãã®ã¤ã¡ã¼ã¸é å 70 71 var pageObj, 72 img; 73 74 if (this.printInfo.dir === "both") { 75 //è¦éã 76 for (var i in PARAM.side.view) { 77 var page = PARAM.side.view[i]; 78 if (page <= 0) { 79 continue; 80 } 81 82 pageObj = htmlview._pages[page - 1]; 83 img = (this.originalImgZoom === "100") ? pageObj.image[0].srcList : pageObj.image[1].srcList; 84 85 if (img.length !== this.originalParts.list.length) { 86 this.originalPartData(this.originalImgZoom); 87 } 88 elementArr.push(this.makeOriginaldata(pageObj, img, originalsize.width)); 89 bothImgs.push(viewInfo.bothImg); 90 originalsize.width += PARAM.zoominfo[this.originalImgZoom].width; 91 } 92 } else { 93 //åãã¼ã¸ 94 pageObj = htmlview._pages[this.printInfo.page - 1]; 95 img = (this.originalImgZoom === "100") ? pageObj.image[0].srcList : pageObj.image[1].srcList; 96 97 if (img.length !== this.originalParts.list.length) { 98 this.originalPartData(this.originalImgZoom); 99 } 100 elementArr.push(this.makeOriginaldata(pageObj, img, 0)); 101 originalsize.width = PARAM.zoominfo[this.originalImgZoom].width; 102 } 103 this.originalTotalSize = originalsize; 104 105 var tempIframe = this.createIframe("printer-tmp-element"); 106 tempIframe.write(this.docType() + "<html><head></head>" + this.setBody() + "</html>"); 107 canvasElem = $(tempIframe.getElementById('printer-canvas-image-body')); 108 109 110 111 112 elementArr.forEach(function (elem) { 113 canvasElem.append(elem); 114 }); 115 116 if (viewUtils.browser === 'safari') { 117 this.openIframeOrWindow(); 118 } 119 120 121 122 html2canvas(canvasElem[0], { 123 letterRendering: true, 124 allowTaint: true, 125 useCORS: true, 126 width: originalsize.width , 127 height: originalsize.height 128 }).then(function (canvas) { 129 130 if (viewInfo.toConvert !== "" && viewUtils.browser === 'safari') { 131 that.originalImg = viewInfo.toConvert; 132 } else { 133 that.originalImg = canvas.toDataURL("image/jpeg"); 134 } 135 136 if (that.printInfo.dir === "both") { 137 that.twoPageCanvasRedrawing(canvas, canvasElem, originalsize, bothImgs, that); 138 } else { 139 that.originalImgToPrinter(); 140 $('#printer-tmp-element').remove(); 141 } 142 }); 143 144 145 146 }, 147 148 /** 149 * ç´é¢ã両é¢ã®å ´åCanvasãrefresh 150 * @param canvas 151 * @param canvasElem 152 * @param originalsize 153 * @param bothImgs 154 */ 155 twoPageCanvasRedrawing: function (canvas, canvasElem, originalsize, bothImgs) { 156 var that = this; 157 var img = new Image(); 158 img.crossOrigin = 'anonymous';//2022-09-13 WBCLOUD-94 159 img.onload = function () { 160 161 //2022-08-31 WBCLOUD-94 ãã©ã¦ã¶ã®ãºã¼ã ãoså´ã®è§£å度è¨å®ã100%以å¤ã®å ´åã«è¦
161åããåé¡ã®å¯¾ç 162 let zoom_rate = window.devicePixelRatio || window.screen.availWidth / document.documentElement.clientWidth * 100; 163 originalsize.width *= zoom_rate; 164 originalsize.height *= zoom_rate; 165 166 canvasElem.html(canvas); 167 //åè»¢ä½æ¥ 168 var imgCanvas = canvasElem.find("canvas"), 169 ctx = imgCanvas[0].getContext('2d'); 170 ctx.clearRect(0, 0, originalsize.width, originalsize.height); 171 172 173 174 //大ããåæå® 175 imgCanvas.attr({ 176 width: originalsize.height , 177 height: originalsize.width 178 }); 179 ctx.translate(originalsize.height / 2, originalsize.width / 2); 180 //ç¾å¨ã®canvasãå転 181 ctx.rotate(90 * Math.PI / 180); 182 //å ã¤ã¡ã¼ã¸ã0ç¹åº§æ¨ã«ç§»å 183 ctx.translate(-1 * originalsize.width / 2, -1 * originalsize.height / 2); 184 ctx.drawImage(img, 0, 0); 185 //ã¤ã¡ã¼ã¸éä¿å 186 /** 187 * safariã®å ´åã¯ãµã¼ãã¼ã§å¦ç 188 */ 189 if (bothImgs[0] !== "" && viewUtils.browser === 'safari') { 190 $.ajax({ 191 type: 'POST', 192 dataType: 'text', 193 async: false, 194 url: '/api/toGdImg', 195 data: {'imgs': bothImgs, 'type': 'print'}, 196 success: function (data) { 197 that.originalImg = data; 198 } 199 }); 200 } else { 201 that.originalImg = imgCanvas[0].toDataURL("image/jpeg"); 202 } 203 $('#printer-tmp-element').remove(); 204 var tem_w = that.originalTotalSize.width; 205 that.originalTotalSize.width = originalsize.height; 206 that.originalTotalSize.height = tem_w; 207 208 that.originalImgToPrinter(); 209 }; 210 img.src = that.originalImg; 211 }, 212 213 /** 214 * iframeãéã 215 */ 216 openIframeOrWindow: function () { 217 switch (this.op.printMode) { 218 case "iframe" : 219 this.writeDoc = this.createIframe("printIframe"); 220 break; 221 case "popup" : 222 this.printWindow = this.createWindowPopup(); 223 this.writeDoc = this.printWindow.doc; 224 break; 225 } 226 }, 227 228 /** 229 * å°å·ããã¤ã¡ã¼ã¸ãã¼ã¿ã¼ãiframeã«éããå°å·ã¤ãã³ããã¤ã³ãã£ã³ã° 230 */ 231 originalImgToPrinter: function () { 232 var that = this; 233 234 if (viewUtils.browser !== 'safari') { 235 this.openIframeOrWindow(); 236 } 237 238 var html = this.docType() + "<html>" + this.setHead() + this.setPrintBody() + "</html>"; 239 this.writeDoc.open(); 240 241 this.writeDoc.write(html); 242 243 $(this.writeDoc).ready(function () { 244 var $imgTag = $(that.writeDoc).contents().find('#printImg'); 245 if (viewUtils.browser === 'msie' || viewUtils.browser === 'edge') { 246 that.completePrint($imgTag); 247 } else { 248 $imgTag.bind("load", function () { 249 that.completePrint($(this)); 250 $(this).unbind("load"); 251 }); 252 } 253 }); 254 }, 255 256 /** 257 * å°å·å®äº 258 * @param imgTag 259 */ 260 completePrint: function (imgTag) { 261 var that = this; 262 var width = that.originalTotalSize.width; 263 var height = that.originalTotalSize.height; 264 265 imgTag.css({ 266 position: "absolute", 267 width: "100%", 268 top: "0", 269 left: "0", 270 right: "0", 271 bottom: "0", 272 margin: "0 auto", 273 objectFit: "scale-down" 274 }); 275 276 setTimeout(function () { 277 that.writeDoc.close(); 278 that.printWindow.print(); 279 if (viewUtils.device === 'pc' && that.op.printMode === "iframe") { 280 $("#printIframe").remove(); 281 } else if (that.op.printMode === "popup" && that.op.popClose) { 282 that.printWindow.close(); 283 } 284 that.destroy(); 285 }, 50); 286 }, 287 288 /** 289 * iframeãä½ã 290 * @param iframeid 291 * @returns {null|*} 292 */ 293 createIframe: function (iframeid) { 294 try { 295 var iframeStyle = 'border:0;position:absolute;left:0px;top:0px;opacity:0;z-index:-1;'; 296 var iframe = document.createElement('iframe'); 297 document.body.appendChild(iframe); 298 $(iframe).attr({style: iframeStyle, id: iframeid}); 299 300 301 iframe.doc = null; 302 iframe.doc = iframe.contentDocument ? iframe.contentDocument : (iframe.contentWindow ? iframe.contentWindow.document : iframe.document); 303 } catch (e) { 304 throw e + ". iframes may not be supported in this browser."; 305 } 306 307 this.printWindow = iframe.contentWindow || iframe; 308 return iframe.doc; 309 }, 310 311 /** 312 * ã¦ã£ã³ãã¦ãããã¢ãããä½ã 313 * @returns {Window} 314 */ 315 createWindowPopup: function () { 316 var windowAttr = "location=no,statusbar=no,directories=no,menubar=no,titlebar=no,toolbar=no,dependent=no";
317 windowAttr += ",width=" + this.op.popWd + ",height=" + this.op.popHt; 318 windowAttr += ",resizable=yes,screenX=" + this.op.popX + ",screenY=" + this.op.popY + ",personalbar=no,scrollbars=yes"; 319 320 var newWin = window.open("about:blank", "_blank", windowAttr); 321 newWin.doc = newWin.document; 322 323 return newWin; 324 }, 325 326 /** 327 * iframeã®docTypeã»ãã 328 * @returns {string} 329 */ 330 docType: function () { 331 return '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'; 332 }, 333 334 /** 335 * iframeã®Headerã»ãã 336 * @returns {string} 337 */ 338 setHead: function () { 339 var head = '<head><title>' + this.op.popTitle + '</title>'; 340 head += '<link href="' + this.printCss + '" rel="stylesheet" type="text/css" />'; 341 head += '</head>'; 342 343 return head; 344 }, 345 346 /** 347 * iframeã®Bodyãã»ãã 348 * @returns {string} 349 */ 350 setBody: function () { 351 return '<body style="margin:0; padding:0;">' + 352 '<div id="printer-canvas-image-body" style="width:' + 353 this.originalTotalSize.width + 'px; height:' + 354 this.originalTotalSize.height + 'px; top:0; left:0; position: absolute;"/>' + 355 '</body>'; 356 }, 357 358 /** 359 * å°å·ç¨ã®Bodyãã»ãã 360 * @returns {string} 361 */ 362 setPrintBody: function () { 363 var body_tag = '<body><center id="printContents"><img id="printImg" src="' + this.originalImg + '"/></center></body>'; 364 365 if (viewUtils.browser === 'safari') { 366 //body_tag = '<body><img id="printImg" src="' + this.originalImg + '" width="724" height="850"/></body>'; 367 //2023-02-07 WBCLOUD-260 368 body_tag = '<body><img id="printImg" src="' + this.originalImg + '" width="auto" height="610" /></body>'; 369 370 } 371 return body_tag; 372 }, 373 374 /** 375 * åå²ç»åã®å ´å 376 * 377 * @param zoomvalue 378 * @param index 379 */ 380 originalPartData: function (zoomvalue, index) { 381 var page = (index) ? htmlview._pages[index] : htmlview._pages[0]; 382 var img, 383 dataPageImgWidth = 0, 384 dataPageImgHeight = 0, 385 imageWidth = 0; 386 387 if (zoomvalue === "200") { 388 dataPageImgWidth = page.image[1].width; 389 dataPageImgHeight = page.image[1].height; 390 imageWidth = PARAM.zoominfo['200'].width; 391 img = page.image[1].srcList; 392 } else { 393 dataPageImgWidth = page.image[0].width; 394 dataPageImgHeight = page.image[0].height; 395 imageWidth = PARAM.zoominfo['100'].width; 396 img = page.image[0].srcList; 397 } 398 399 this.originalParts.list = []; 400 401 $.extend(this.originalParts, {zoom: zoomvalue, width: dataPageImgWidth, height: dataPageImgHeight}); 402 403 var w = 0, h = 0, x = 0, y = 0, total = 0; 404 405 for (var i = 0; i < img.length; i++) { 406 w = img[i].width; 407 h = img[i].height; 408 total += w; 409 var pos = { 410 x: x, 411 y: y, 412 width: w, 413 height: h 414 }; 415 416 this.originalParts.list.push(pos); 417 418 if (img.length !== 1) { 419 if (total >= imageWidth) { 420 x = 0; 421 y += h; 422 total = 0; 423 } else { 424 x += w; 425 } 426 } 427 } //for end 428 }, 429 430 /** 431 * originalDataãçæ 432 * 433 * @param pageObj 434 * @param img 435 * @param leftx 436 * @returns {jQuery} 437 */ 438 makeOriginaldata: function (pageObj, img, leftx) { 439 //åå²é対å¿ãã¼ã¸ã§ã³ 440 var x = 0, y = 0, 441 width = this.originalParts.width, 442 height = this.originalParts.height, 443 parts = this.originalParts.list; 444 445 var bgimage = []; 446 var bgsize = []; 447 var bgposition = []; 448 var bgrepeat = []; 449 viewInfo.toConvert = ''; 450 viewInfo.bothImg = ''; 451 452 for (var i = 0; i < parts.length; i++) { 453 if (i === 0) { 454 x = parts[i].x; 455 y = parts[i].y; 456 } 457 var img_url = viewInfo.bookurl + pageObj.number + "/" + img[i].src; 458 // REGEX! if html5Viewhost is NOT one of 459 // bookshelf.wisebook4.jp or local.wisebook.jp or dev.wisebook4.jp or ebook.wisebook4.jp or localViewer 460// var regexPattern = /^(http|https):\/\/((local|dev|bookshelf|ebook)\.wisebook4?\.jp|\/h5\/)/; 461// if (!regexPattern.test(viewInfo.html5Viewhost)) { 462// viewInfo.bothImg = img_url; 463// $.ajax({ 464// type: 'POST', 465// dataType: 'text', 466// async: false, 467// url: '/api/toBase64', 468// data: {'img': img_url}, 469// success: function (data) { 470// img_url = data; 471// viewInfo.toConvert = img_url; 472// } 473// }); 474// } 475 bgimage.push("url(" + img_url + ")"); 476 477 bgposition.push(parts[i].x + "px" + " " + parts[i].y + "px"); 478 bgsize.push(parts[i].width + "px" + " " + parts[i].height + "px"); 479 bgrepeat.push("no-repeat"); 480 } 481 482 var tmpDom = document.createElement('div'); 483 var cssObject = { 484 position: "absolute", 485 width: width, 486 height: height, 487 left: leftx, 488 top: 0, 489 display: "block", 490 backgroundImage: bgimage.join(","), 491 backgroundRepeat: bgrepeat.join(","), 492 backgroundPosition: bgposition.join(","), 493 backgroundSize: bgsize.join(",") 494 }; 495 //return $(tmpDom).css(cssObject); 496 497 //2022-09-13 WBCLOUD-94 divã ã¨crossOriginã使ããªãã®ã§imgã試ã¿ã 498 var tag = ""; 499 tag += '<div style="position:absolute;display:block;left:'+ leftx+ 'px;top:0px;width:'+width+'px;height:'+height+'px;">' 500 //tag += '<img src="' + img_url + '" style="width:'+width+'px;height:'+height+'px;" crossOrigin="anonymous">'; 501 //2022-10-12 WBCLOUD-94 ãã£ãã·ã¥å¯¾ç 502 tag += '<img src="' + img_url + '?ts='+ Date.now() +'" style="width:'+width+'px;height:'+height+'px;" crossOrigin="anonymous">'; 503 tag += '</div>'; 504 return $(tag); 505 506 }, 507 508 makeOriginaldata_alt: function (pageObj, img, leftx) { 509 //åå²å¯¾å¿ãã¼ã¸ã§ã³ 510 var x = 0, y = 0, 511 width = this.originalParts.width, 512 height = this.originalParts.height, 513 parts = this.originalParts.list; 514 515 var bgimage = []; 516 var bgsize = []; 517 var bgposition = []; 518 var bgrepeat = []; 519 viewInfo.toConvert = ''; 520 viewInfo.bothImg = ''; 521 522 var div_parts = []; 523 524 for (var i = 0; i < parts.length; i++) { 525 if (i === 0) { 526 x = parts[i].x; 527 y = parts[i].y; 528 }
529 var img_url = viewInfo.bookurl + pageObj.number + "/" + img[i].src; 530 // REGEX! if html5Viewhost is NOT one of 531 // bookshelf.wisebook4.jp or local.wisebook.jp or dev.wisebook4.jp or ebook.wisebook4.jp or localViewer 532// var regexPattern = /^(http|https):\/\/((local|dev|bookshelf|ebook)\.wisebook4?\.jp|\/h5\/)/; 533// if (!regexPattern.test(viewInfo.html5Viewhost)) { 534// viewInfo.bothImg = img_url; 535// $.ajax({ 536// type: 'POST', 537// dataType: 'text', 538// async: false, 539// url: '/api/toBase64', 540// data: {'img': img_url}, 541// success: function (data) { 542// img_url = data; 543// viewInfo.toConvert = img_url; 544// } 545// }); 546// } 547 bgimage.push("url(" + img_url + ")"); 548 bgposition.push(parts[i].x + "px" + " " + parts[i].y + "px"); 549 bgsize.push(parts[i].width + "px" + " " + parts[i].height + "px"); 550 bgrepeat.push("no-repeat"); 551 552 553 //2022-11-08 WBCLOUD-181 åå²å¯¾ç 554 let tag = ""; 555 tag += '<div style="position:absolute;display:block;left:'+ parts[i].x + 'px;top:' + parts[i].y + 'px;width:'+parts[i].width+'px;height:'+ parts[i].height+'px;">' 556 //tag += '<img src="' + img_url + '" style="width:'+width+'px;height:'+height+'px;" crossOrigin="anonymous">'; 557 tag += '<img src="' + img_url + '?ts='+ Date.now() +'" style="width:'+parts[i].width+'px;height:'+ parts[i].height+'px;" crossOrigin="anonymous">'; 558 tag += '</div>'; 559 div_parts.push(tag); 560 561 562 } 563 564 var tmpDom = document.createElement('div'); 565 var cssObject = { 566 position: "absolute", 567 width: width, 568 height: height, 569 left: leftx, 570 top: 0, 571 display: "block", 572 backgroundImage: bgimage.join(","), 573 backgroundRepeat: bgrepeat.join(","), 574 backgroundPosition: bgposition.join(","), 575 backgroundSize: bgsize.join(",") 576 }; 577 //return $(tmpDom).css(cssObject); 578 579 580 //2022-09-13 WBCLOUD-94 divã ã¨crossOriginã使ããªãã®ã§imgã試ã¿ã 581 var tag = ""; 582 tag += '<div style="position:absolute;display:block;left:'+ leftx+ 'px;top:0px;width:'+width+'px;height:'+height+'px;">' 583 //2022-11-08 WBCLOUD-181 åå²å¯¾ç 584 tag += div_parts.join(''); 585 tag += '</div>'; 586 return $(tag); 587 588 589 590 591 }, 592 593 594 595 /** 596 * å°å·æ©è½åæå 597 */ 598 destroy: function () { 599 this.writeDoc = null; 600 this.printWindow = null; 601 } 602 }; 603 604 window.wisebookPrint = wisebookPrint; 605})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.