2020-10-22 14:59:36 +08:00
|
|
|
|
/*
|
|
|
|
|
* 打印预览或另存为PDF功能,需要依赖:
|
|
|
|
|
* ../plugin/printThis.js
|
|
|
|
|
*/
|
|
|
|
|
;(function ( global, factory ) {
|
|
|
|
|
'use strict';
|
|
|
|
|
if ( typeof define !== 'undefined' && define.amd ) { // export as AMD...
|
|
|
|
|
define( ['jquery','GooFlow'], factory );
|
|
|
|
|
}
|
|
|
|
|
else if ( typeof module !== 'undefined' && module.exports ) { // ...or as browserify
|
|
|
|
|
factory( require('jquery'), require('GooFlow') );
|
|
|
|
|
}else
|
|
|
|
|
factory( global.$, global.GooFlow );
|
|
|
|
|
|
|
|
|
|
}( typeof window !== 'undefined' ? window : this, function ( $,GooFlow ) {
|
|
|
|
|
if(GooFlow.prototype.print && typeof GooFlow.prototype.print==='function'){
|
|
|
|
|
return;//防止多次载入
|
|
|
|
|
}
|
|
|
|
|
/*
|
|
|
|
|
* printThis v1.12.2
|
|
|
|
|
* @desc Printing plug-in for jQuery
|
|
|
|
|
* @author Jason Day
|
|
|
|
|
* 精简版 only for GooFlow
|
|
|
|
|
*/
|
|
|
|
|
(function($) {
|
|
|
|
|
|
|
|
|
|
function appendContent($el, content) {
|
|
|
|
|
if (!content) return;
|
|
|
|
|
|
|
|
|
|
// Simple test for a jQuery element
|
|
|
|
|
$el.append(content.jquery ? content.clone() : content);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function appendBody($body, $element, opt) {
|
|
|
|
|
// Clone for safety and convenience
|
|
|
|
|
// Calls clone(withDataAndEvents = true) to copy form values.
|
|
|
|
|
var $content = $element.clone();
|
|
|
|
|
|
|
|
|
|
if (opt.printContainer) {
|
|
|
|
|
// grab $.selector as container
|
|
|
|
|
$content.appendTo($body);
|
|
|
|
|
} else {
|
|
|
|
|
// otherwise just print interior elements of container
|
|
|
|
|
$content.each(function() {
|
|
|
|
|
$(this).children().appendTo($body)
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var opt;
|
|
|
|
|
$.fn.printThis = function(options) {
|
|
|
|
|
opt = $.extend({}, $.fn.printThis.defaults, options);
|
|
|
|
|
var $element = this instanceof jQuery ? this : $(this);
|
|
|
|
|
|
|
|
|
|
var strFrameName = "printThis-" + (new Date()).getTime();
|
|
|
|
|
|
|
|
|
|
if (window.location.hostname !== document.domain && navigator.userAgent.match(/msie/i)) {
|
|
|
|
|
// Ugly IE hacks due to IE not inheriting document.domain from parent
|
|
|
|
|
// checks if document.domain is set by comparing the host name against document.domain
|
|
|
|
|
var iframeSrc = 'javascript:document.write("<head><script>document.domain="' + document.domain + '";</script></head><body></body>")';
|
|
|
|
|
var printI = document.createElement('iframe');
|
|
|
|
|
printI.name = "printIframe";
|
|
|
|
|
printI.id = strFrameName;
|
|
|
|
|
printI.className = "MSIE";
|
|
|
|
|
document.body.appendChild(printI);
|
|
|
|
|
printI.src = iframeSrc;
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
// other browsers inherit document.domain, and IE works if document.domain is not explicitly set
|
|
|
|
|
var $frame = $("<iframe id='" + strFrameName + "' name='printIframe' />");
|
|
|
|
|
$frame.appendTo("body");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var $iframe = $("#" + strFrameName);
|
|
|
|
|
|
|
|
|
|
// show frame if in debug mode
|
|
|
|
|
if (!opt.debug) $iframe.css({
|
|
|
|
|
position: "absolute",
|
|
|
|
|
width: "0px",
|
|
|
|
|
height: "0px",
|
|
|
|
|
left: "-600px",
|
|
|
|
|
top: "-600px"
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// $iframe.ready() and $iframe.load were inconsistent between browsers
|
|
|
|
|
setTimeout(function() {
|
|
|
|
|
|
|
|
|
|
// Add doctype to fix the style difference between printing and render
|
|
|
|
|
function setDocType($iframe, doctype){
|
|
|
|
|
var win, doc;
|
|
|
|
|
win = $iframe.get(0);
|
|
|
|
|
win = win.contentWindow || win.contentDocument || win;
|
|
|
|
|
doc = win.document || win.contentDocument || win;
|
|
|
|
|
doc.open();
|
|
|
|
|
doc.write(doctype);
|
|
|
|
|
doc.close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (opt.doctypeString){
|
|
|
|
|
setDocType($iframe, opt.doctypeString);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var $doc = $iframe.contents(),
|
|
|
|
|
$head = $doc.find("head"),
|
|
|
|
|
$body = $doc.find("body"),
|
|
|
|
|
$base = $('base'),
|
|
|
|
|
baseURL;
|
|
|
|
|
$body.css({height:'auto',margin:'0',padding:'0',background:'#fff'});
|
|
|
|
|
// add base tag to ensure elements use the parent domain
|
|
|
|
|
if (opt.base === true && $base.length > 0) {
|
|
|
|
|
// take the base tag from the original page
|
|
|
|
|
baseURL = $base.attr('href');
|
|
|
|
|
} else if (typeof opt.base === 'string') {
|
|
|
|
|
// An exact base string is provided
|
|
|
|
|
baseURL = opt.base;
|
|
|
|
|
} else {
|
|
|
|
|
// Use the page URL as the base
|
|
|
|
|
baseURL = document.location.protocol + '//' + document.location.host;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$head.append('<base href="' + baseURL + '">');
|
|
|
|
|
|
|
|
|
|
$("link[rel=stylesheet]").each(function() {
|
|
|
|
|
var href = $(this).attr("href");
|
|
|
|
|
if (href) {
|
|
|
|
|
var media = $(this).attr("media") || "all";
|
|
|
|
|
$head.append("<link type='text/css' rel='stylesheet' href='" + href + "' media='" + media + "'>");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// add title of the page
|
|
|
|
|
if (opt.pageTitle) $head.append("<title>" + opt.pageTitle + "</title>");
|
|
|
|
|
|
|
|
|
|
// print header
|
|
|
|
|
appendContent($body, opt.header);
|
|
|
|
|
|
|
|
|
|
appendBody($body, $element, opt);
|
|
|
|
|
|
|
|
|
|
// print "footer"
|
|
|
|
|
appendContent($body, opt.footer);
|
|
|
|
|
|
|
|
|
|
setTimeout(function() {
|
|
|
|
|
if ($iframe.hasClass("MSIE")) {
|
|
|
|
|
// check if the iframe was created with the ugly hack
|
|
|
|
|
// and perform another ugly hack out of neccessity
|
|
|
|
|
window.frames["printIframe"].focus();
|
|
|
|
|
$head.append("<script> window.print(); </s" + "cript>");
|
|
|
|
|
} else {
|
|
|
|
|
// proper method
|
|
|
|
|
if (document.queryCommandSupported("print")) {
|
|
|
|
|
$iframe[0].contentWindow.document.execCommand("print", false, null);
|
|
|
|
|
} else {
|
|
|
|
|
$iframe[0].contentWindow.focus();
|
|
|
|
|
$iframe[0].contentWindow.print();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// remove iframe after print
|
|
|
|
|
if (!opt.debug) {
|
|
|
|
|
setTimeout(function() {
|
|
|
|
|
$iframe.remove();
|
|
|
|
|
}, 1000);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}, opt.printDelay);
|
|
|
|
|
|
|
|
|
|
}, 333);
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// defaults
|
|
|
|
|
$.fn.printThis.defaults = {
|
|
|
|
|
debug: false, // show the iframe for debugging
|
|
|
|
|
printContainer: true, // print outer container/$.selector
|
|
|
|
|
pageTitle: "", // add title to print page
|
|
|
|
|
printDelay: 333, // variable print delay
|
|
|
|
|
header: null, // prefix to html
|
|
|
|
|
footer: null, // postfix to html
|
|
|
|
|
base: false, // preserve the BASE tag, or accept a string for the URL
|
|
|
|
|
doctypeString: '<!DOCTYPE html>' // html doctype
|
|
|
|
|
};
|
|
|
|
|
})($);
|
|
|
|
|
////////////////printThis.js END!
|
|
|
|
|
|
|
|
|
|
//扩展定义打印预览或另存为PDF功能的方法
|
|
|
|
|
GooFlow.prototype.print=function(scale){
|
|
|
|
|
var max=this._suitSize();
|
|
|
|
|
if(!scale) scale=1.0;
|
|
|
|
|
max.width+=100;max.height+=100;
|
|
|
|
|
var printDiv=this.$workArea.clone();
|
|
|
|
|
printDiv.css({
|
|
|
|
|
width:max.width+"px",height:max.height+"px"
|
|
|
|
|
});
|
|
|
|
|
printDiv.children(".GooFlow_work_group").css({width:max.width+"px",height:max.height+"px"});
|
|
|
|
|
printDiv.children("svg").css({width:max.width+"px",height:max.height+"px"});
|
|
|
|
|
printDiv.children(".GooFlow_work_vml").css({width:max.width+"px",height:max.height+"px"});
|
|
|
|
|
printDiv=printDiv.wrap('<div class="GooFlow GooFlow_work" style="width:'
|
|
|
|
|
+max.width+'px;height:'+max.height+'px; overflow:hidden"></div>').parent();
|
|
|
|
|
if(GooFlow.color.font){
|
|
|
|
|
printDiv.css("color",GooFlow.color.font);
|
|
|
|
|
}
|
|
|
|
|
printDiv.css({"transform-origin": "top left", transform:"scale("+scale+")"}).printThis({
|
|
|
|
|
base:document.URL, pageTitle:this.$title
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
return GooFlow;
|
|
|
|
|
}));
|