src/assets/api/controller.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/view/b1-report-preparation.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/util/file.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
static/检测报告模板2020-11-09.docx | 补丁 | 查看 | 原始文档 | blame | 历史 |
src/assets/api/controller.js
@@ -180,4 +180,5 @@ const insReport = { pageInsReport: "/insReport/pageInsReport", //æ¥è¯¢æ£éªæ¥åæ°æ® wordToHtml: "/insReport/wordToHtml", //Word转HTML } 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() { 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)); } } } 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å°PDF转æ¢ä¸ºHTML 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'); // å°base64Image转æ¢ä¸ºHTML 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å°Word转æ¢ä¸ºHTML 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) }; fileReader.readAsArrayBuffer(blob); }, }) resolve(await htmlContentPromise) } } }) return await xhrPromise }, }; static/¼ì²â±¨¸æÄ£°å2020-11-09.docxBinary files differ