function _initData(exPortData) {
exPortData.fileName =
typeof exPortData.fileName !== "undefined"
? exPortData.fileName
: "jQuery-Word-Export";
exPortData.fileType =
typeof exPortData.fileType !== "undefined" ? exPortData.fileType : ".doc";
}
function getModelHtml(mhtml, mhtmlBottom, exPortData) {
// console.log(exPortData.dev);
var styles,
updateStyles,
Brow = '',
direction =
typeof exPortData.direction !== "undefined"
? exPortData.direction
: "Vertical",
header,
dev =
typeof exPortData.dev !== "undefined"
? exPortData.dev
: " margin:72.0pt 90.0pt 72.0pt 90.0pt;",
footer = "";
let devStyle = typeof exPortData.style !== 'undefined'
? exPortData.style
: ''
if (exPortData.styles) {
styles = exPortData.styles.html();
}
if (exPortData.updateExportCss) {
updateStyles = exPortData.updateExportCss.html();
}
if (exPortData.direction == "Horizontal") {
// 横向
direction = `
@page Section1{
size:841.95pt 595.35pt;
mso-page-orientation:landscape;
margin:90.0pt 72.0pt 90.0pt 72.0pt;
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-gutter-margin:0.0pt;
mso-paper-source:0;
padding:24.0pt 24.0pt 24.0pt 24.0pt;
layout-grid:16.3pt;
}
div.Section1{
page:Section1;
}
`;
} else {
// 纵向
direction = `
@page Section1{
size:595.35pt 841.95pt;
mso-page-orientation:luprightness;
${dev}
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-gutter-margin:0.0pt;
mso-paper-source:0;
padding:24.0pt 24.0pt 24.0pt 24.0pt;
layout-grid:16.3pt;
}
div.Section1{
page:Section1;
}
`;
}
if (typeof exPortData.header !== 'undefined') {
header =
'
\n' +
'\n" +
"
";
}
if (typeof exPortData.footer !== 'undefined') {
footer =
'";
}
if (typeof exPortData.header !== 'undefined' && typeof exPortData.footer !== 'undefined') {
Brow = `
`
}
// console.log(devStyle);
return `
${mhtml}
${Brow}
${mhtmlBottom}
`;
}
const exportWord = function (exPortData) {
// console.log(exPortData, 1);
// 文档类型 fileType 可以doc xls html 其他的自己去试
if (typeof jQuery !== "undefined" && typeof saveAs !== "undefined") {
_initData(exPortData);
var options = {
maxWidth: 624,
};
// Clone selected element before manipulating it
var markup = $(exPortData.dom).clone();
// Remove hidden elements from the output
markup.each(function () {
var self = $(exPortData.dom);
if (self.is(":hidden")) self.remove();
});
// Embed all images using Data URLs
var images = Array();
var img = markup.find("img");
for (var i = 0; i < img.length; i++) {
// Calculate dimensions of output image
var w = Math.min(img[i].width, options.maxWidth);
var h = img[i].height * (w / img[i].width);
// Create canvas for converting image to data URL
var canvas = document.createElement("CANVAS");
canvas.width = w;
canvas.height = h;
// Draw image to canvas
var context = canvas.getContext("2d");
context.drawImage(img[i], 0, 0, w, h);
// Get data URL encoding of image
var uri = canvas.toDataURL("image/png");
$(img[i]).attr("src", img[i].src);
img[i].width = w;
img[i].height = h;
// Save encoded image to array
images[i] = {
type: uri.substring(uri.indexOf(":") + 1, uri.indexOf(";")),
encoding: uri.substring(uri.indexOf(";") + 1, uri.indexOf(",")),
location: $(img[i]).attr("src"),
data: uri.substring(uri.indexOf(",") + 1),
};
}
// Prepare bottom of mhtml file with image data
var mhtmlBottom = "\n";
for (var i = 0; i < images.length; i++) {
mhtmlBottom += "--NEXT.ITEM-BOUNDARY\n";
mhtmlBottom += "Content-Location: " + images[i].location + "\n";
mhtmlBottom += "Content-Type: " + images[i].type + "\n";
mhtmlBottom +=
"Content-Transfer-Encoding: " + images[i].encoding + "\n\n";
mhtmlBottom += images[i].data + "\n\n";
}
mhtmlBottom += "--NEXT.ITEM-BOUNDARY--";
var fileContent = getModelHtml(markup.html(), mhtmlBottom, exPortData);
// console.log(fileContent, 22);
var blob = new Blob([fileContent], {
type: "application/msword;charset=utf-8",
});
saveAs(blob, exPortData.fileName + exPortData.fileType);
} else {
if (typeof jQuery === "undefined") {
console.error("Please make sure your (jQuery) exists --faith");
}
if (typeof saveAs === "undefined") {
console.error("Please make sure your (FileSaver.js) exists --faith");
}
}
};
export default exportWord;