From ebafa0caac76450802535f0952457e86c4ea2962 Mon Sep 17 00:00:00 2001 From: licp <lichunping@guanfang.com.cn> Date: 星期三, 03 四月 2024 17:05:55 +0800 Subject: [PATCH] 测试在线编制 --- src/components/view/b1-report-preparation.vue | 59 +++++++++++++++++-- src/util/file.js | 74 +++++++++++------------- static/检测报告模板2020-11-09.docx | 0 src/assets/api/controller.js | 1 4 files changed, 86 insertions(+), 48 deletions(-) diff --git a/src/assets/api/controller.js b/src/assets/api/controller.js index 4c25d3e..1e7b4ca 100644 --- a/src/assets/api/controller.js +++ b/src/assets/api/controller.js @@ -180,4 +180,5 @@ const insReport = { pageInsReport: "/insReport/pageInsReport", //鏌ヨ妫�楠屾姤鍛婃暟鎹� + wordToHtml: "/insReport/wordToHtml", //Word杞琀TML } diff --git a/src/components/view/b1-report-preparation.vue b/src/components/view/b1-report-preparation.vue index 753b297..d56cb4d 100644 --- a/src/components/view/b1-report-preparation.vue +++ b/src/components/view/b1-report-preparation.vue @@ -72,6 +72,7 @@ <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> </div> </div> + <!-- <input id="input" type="file" accept=".doc,.docx"></input> --> <div class="table"> <ValueTable ref="ValueTable" :url="$api.insReport.pageInsReport" :componentData="componentData" :key="upIndex"/> @@ -82,7 +83,7 @@ <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;" v-if="!fullscreen"></i> <img src="../../../static/img/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen=false;" > </div> - <Word :style="fullscreen?'height:83vh':'height:70vh'" v-if="claimVisible" ref="Word" :value="value"/> + <Word :style="{height:fullscreen?'82':'70'+'vh'}" v-if="claimVisible" ref="Word" :value="value"/> <span slot="footer" class="dialog-footer"> <el-button @click="claimVisible = false">鍙� 娑�</el-button> <el-button type="primary" @click="confirmClaim">纭� 瀹�</el-button> @@ -94,7 +95,8 @@ <script> import ValueTable from '../tool/value-table.vue' import Word from '../tool/word.vue' - // import convertFileToHtml from '../../util/file'; + import file from '../../util/file'; + import { convertToHtml } from 'mammoth'; export default { components: { ValueTable, @@ -198,12 +200,39 @@ statusList: [], claimVisible: false, fullscreen:false, - value:'' + value:`` } }, mounted() { this.entityCopy = this.HaveJson(this.componentData.entity) this.getPower() + + // let that = this; + // let input = document.getElementById('input'); + // input.onchange = function(){ + // let file = this.files[0]; + // let reader = new FileReader(); + // reader.readAsArrayBuffer(file); + // reader.onload = function(loadEvent){ + // convertToHtml({ + // arrayBuffer: loadEvent.target.result }) + // .then(res=>{ + // that.value = res.value + // .replace('<h1>', '<h1 style="text-align: center;">') + // .replace('<h2>', '<h2 style="text-align: center;">') + // .replace('<img ','<img style="height:3.6cm;width:3.6cm"') + // .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, "") + // console.log(11111111111,that.value) + // that.claimVisible = true; + // }) + // .done(); + // } + // } }, methods: { refreshTable() { @@ -213,8 +242,22 @@ this.componentData.entity = this.HaveJson(this.entityCopy) this.upIndex++ }, - handleWeave() { - this.claimVisible = true; + async handleWeave(row) { + // this.value = await file.convertFileToHtml(row.url) + // this.claimVisible = true; + this.$axios.post(this.$api.insReport.wordToHtml, { + path:row.url + }).then(res => { + if (res.code === 200) { + // console.log(11111111,res.data) + this.value = res.data.replace(/<a [^>]*>/g, "") + .replace(/<\/a>/g, "").replace(/ /g, " "); + this.claimVisible = true; + } + + }).catch(error => { + console.error(error) + }) }, // 鏉冮檺鍒嗛厤 getPower(radio) { @@ -238,10 +281,10 @@ this.upLoad = false; }, confirmClaim() { - console.log(this.$refs.Word.getValue()) + // console.log(this.$refs.Word.getValue()) }, - selectAllByOne(row){ - console.log(row); + async selectAllByOne(row){ + console.log(row,await file.convertFileToHtml(row.url)); } } } diff --git a/src/util/file.js b/src/util/file.js index cca1216..3757902 100644 --- a/src/util/file.js +++ b/src/util/file.js @@ -1,47 +1,41 @@ -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 }, }; diff --git "a/static/\346\243\200\346\265\213\346\212\245\345\221\212\346\250\241\346\235\2772020-11-09.docx" "b/static/\346\243\200\346\265\213\346\212\245\345\221\212\346\250\241\346\235\2772020-11-09.docx" new file mode 100644 index 0000000..69b627d --- /dev/null +++ "b/static/\346\243\200\346\265\213\346\212\245\345\221\212\346\250\241\346\235\2772020-11-09.docx" Binary files differ -- Gitblit v1.9.3