From 32a95699e59c5c65e18c08643266c9cbfa380ee4 Mon Sep 17 00:00:00 2001 From: licp <lichunping@guanfang.com.cn> Date: 星期五, 07 六月 2024 09:56:05 +0800 Subject: [PATCH] 优化设备明细、检验任务附件权限 --- src/util/file.js | 94 +++++++++++++++++++++++++++-------------------- 1 files changed, 54 insertions(+), 40 deletions(-) diff --git a/src/util/file.js b/src/util/file.js index cca1216..c3a3e7b 100644 --- a/src/util/file.js +++ b/src/util/file.js @@ -1,47 +1,61 @@ -import * as pdfjsLib from 'pdfjs-dist'; import { convertToHtml } from 'mammoth'; +import Vue from 'vue' export default { - methods: { - convertFileToHtml(file) { - const fileType = file.type.split('/')[1]; - const fileExtension = fileType === 'pdf' ? '.pdf' : '.docx'; - - // 灏嗘枃浠惰浆鎹负Blob瀵硅薄 - const fileReader = new FileReader(); - fileReader.onload = async (event) => { - const arrayBuffer = event.target.result; - const byteArray = new Uint8Array(arrayBuffer); - const blob = new Blob([byteArray], { type: fileType + fileExtension }); - - if (fileType === 'pdf') { - // 浣跨敤pdfjsLib灏哖DF杞崲涓篐TML - const pdfData = await pdfjsLib.getDocument(blob).promise; - const pageNumber = 1; - const scale = 1; - const viewport = pageNumber * scale; - const canvas = document.createElement('canvas'); - const context = canvas.getContext('2d'); - canvas.width = pdfData.internal.pageSize.getWidth() * scale; - canvas.height = pdfData.internal.pageSize.getHeight() * scale; - const renderContext = { - canvasContext: context, - viewport: viewport, - }; - const renderTask = pdfData.getPage(pageNumber).render(renderContext); - await renderTask.promise; - const base64Image = canvas.toDataURL('image/png'); - - // 灏哹ase64Image杞崲涓篐TML - const htmlContent = `<img src="${base64Image}" />`; - return htmlContent; - } else if (fileType === 'docx') { + async convertFileToHtml(url) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', Vue.prototype.javaApi+url, true);//鑾峰彇鏂囦欢娴佺殑鎺ュ彛 + xhr.send(); + xhr.responseType = "blob";//涓嶈兘婕� + let xhrPromise = new Promise((resolve, reject) => { + xhr.onload = async function () { + if (this.status === 200) { + // 杩斿洖鐨勬枃浠舵祦锛岃浆鎹㈡垚blob瀵硅薄 + var blob = new Blob([this.response],{ type:'application/vnd.openxmlformats-officedocument.wordprocessingml.document' }); // 浣跨敤mammoth灏哤ord杞崲涓篐TML - const htmlContent = await convertToHtml(blob, { format: 'html' }); - return htmlContent; + let reader = new FileReader(); + reader.readAsArrayBuffer(blob); + let htmlContentPromise = new Promise((resolve, reject) => { + reader.onload = async function () { + var arrayBuffer = xhr.response; //arrayBuffer + const result = await convertToHtml({ arrayBuffer: arrayBuffer }) + let html = result.value.replace(/飪�/g, '') + .replace('<h1>', '<h1 style="text-align: center;">') + .replace(/<table>/g, '<table style="border-collapse: collapse;border: 1px solid #000;">') + .replace(/<tr>/g, '<tr style="height: 30px;">') + .replace(/<td>/g, '<td style="border: 1px solid #000;">') + .replace(/<p>/g, '<p style="text-indent: 2em;">') + .replace(/<a [^>]*>/g, "") + .replace(/<\/a>/g, "") + // .replace(/em/g, "cm"); + resolve(html) + }; + }) + resolve(await htmlContentPromise) } - }; - fileReader.readAsArrayBuffer(blob); - }, + + } + }) + return await xhrPromise }, + downloadIamge(imgsrc, name) {//涓嬭浇鍥剧墖鍦板潃鍜屽浘鐗囧悕 + var image = new Image(); + // 瑙e喅璺ㄥ煙 Canvas 姹℃煋闂 + image.setAttribute("crossOrigin", "anonymous"); + image.onload = function() { + var canvas = document.createElement("canvas"); + canvas.width = image.width; + canvas.height = image.height; + var context = canvas.getContext("2d"); + context.drawImage(image, 0, 0, image.width, image.height); + var url = canvas.toDataURL("image/png"); //寰楀埌鍥剧墖鐨刡ase64缂栫爜鏁版嵁 + + var a = document.createElement("a"); // 鐢熸垚涓�涓猘鍏冪礌 + var event = new MouseEvent("click"); // 鍒涘缓涓�涓崟鍑讳簨浠� + a.download = name || "photo"; // 璁剧疆鍥剧墖鍚嶇О + a.href = url; // 灏嗙敓鎴愮殑URL璁剧疆涓篴.href灞炴�� + a.dispatchEvent(event); // 瑙﹀彂a鐨勫崟鍑讳簨浠� + }; + image.src = imgsrc; + } }; -- Gitblit v1.9.3