ChatGPT解答:JavaScript保存当前网页页面图片为pdf文件或者word文件,前端用vue2,给出详细的方案和代码
ChatGPTDemo
Based on OpenAI API (gpt-3.5-turbo).
JavaScript保存当前网页页面图片为pdf文件或者word文件,前端用vue2,给出详细的方案和代码,保存当前网页页面图片为pdf文件或者word文件,可以通过第三方库实现。
-
使用jsPDF库保存为pdf文件
jsPDF是一个用于生成PDF文件的JavaScript库。它可以在客户端浏览器中生成PDF文件,也可以在服务器端使用Node.js生成PDF文件。
安装jsPDF库:
npm install jspdf --save
使用jsPDF库生成pdf文件:
import jsPDF from 'jspdf'
// 获取页面元素
const element = document.getElementById('pdf-content')
// 将元素转换为canvas
html2canvas(element).then(canvas => {
// 获取canvas宽高
const contentWidth = canvas.width
const contentHeight = canvas.height
// 将canvas转换为图片数据
const imgData = canvas.toDataURL('image/png')
// 设置pdf文件尺寸
const pdfWidth = contentWidth / 2.75
const pdfHeight = contentHeight / 2.75
// 创建pdf实例
const pdf = new jsPDF('p', 'mm', [pdfWidth, pdfHeight])
// 添加图片到pdf文件
pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight)
// 保存pdf文件
pdf.save('filename.pdf')
})
-
使用html-docx-js库保存为word文件
html-docx-js是一个用于将HTML转换为Microsoft Word文档的JavaScript库。
安装html-docx-js库:
npm install html-docx-js --save
使用html-docx-js库生成word文件:
import htmlDocx from 'html-docx-js'
// 获取页面元素
const element = document.getElementById('word-content')
// 将元素转换为html
const htmlContent = element.outerHTML
// 将html转换为word文档
const wordContent = htmlDocx.asBlob(htmlContent)
// 保存word文件
saveAs(wordContent, 'filename.docx')
注意:需要引入FileSaver库才能使用saveAs方法保存文件。
完整代码如下:
<template>
<div>
<div id="pdf-content">
<!-- 页面内容 -->
</div>
<button @click="savePdf">保存为pdf文件</button>
<div id="word-content">
<!-- 页面内容 -->
</div>
<button @click="saveWord">保存为word文件</button>
</div>
</template>
<script>
import jsPDF from 'jspdf'
import htmlDocx from 'html-docx-js'
import FileSaver from 'file-saver'
export default {
methods: {
savePdf() {
// 获取页面元素
const element = document.getElementById('pdf-content')
// 将元素转换为canvas
html2canvas(element).then(canvas => {
// 获取canvas宽高
const contentWidth = canvas.width
const contentHeight = canvas.height
// 将canvas转换为图片数据
const imgData = canvas.toDataURL('image/png')
// 设置pdf文件尺寸
const pdfWidth = contentWidth / 2.75
const pdfHeight = contentHeight / 2.75
// 创建pdf实例
const pdf = new jsPDF('p', 'mm', [pdfWidth, pdfHeight])
// 添加图片到pdf文件
pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight)
// 保存pdf文件
pdf.save('filename.pdf')
})
},
saveWord() {
// 获取页面元素
const element = document.getElementById('word-content')
// 将元素转换为html
const htmlContent = element.outerHTML
// 将html转换为word文档
const wordContent = htmlDocx.asBlob(htmlContent)
// 保存word文件
FileSaver.saveAs(wordContent, 'filename.docx')
}
}
}
</script>
加入新功能:点击按钮后,用户选择保存路径后,再保存
要实现在用户选择保存路径后再保存文件,可以使用<input type="file">
元素来让用户选择保存路径,然后再将文件保存到用户选择的路径中。
修改代码如下:
<template>
<div>
<div id="pdf-content">
<!-- 页面内容 -->
</div>
<button @click="savePdf">保存为pdf文件</button>
<div id="word-content">
<!-- 页面内容 -->
</div>
<button @click="saveWord">保存为word文件</button>
<input ref="fileInput" type="file" style="display: none" @change="saveFile">
</div>
</template>
<script>
import jsPDF from 'jspdf'
import htmlDocx from 'html-docx-js'
import FileSaver from 'file-saver'
export default {
methods: {
savePdf() {
// 获取页面元素
const element = document.getElementById('pdf-content')
// 将元素转换为canvas
html2canvas(element).then(canvas => {
// 获取canvas宽高
const contentWidth = canvas.width
const contentHeight = canvas.height
// 将canvas转换为图片数据
const imgData = canvas.toDataURL('image/png')
// 设置pdf文件尺寸
const pdfWidth = contentWidth / 2.75
const pdfHeight = contentHeight / 2.75
// 创建pdf实例
const pdf = new jsPDF('p', 'mm', [pdfWidth, pdfHeight])
// 添加图片到pdf文件
pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight)
// 显示文件选择框
this.$refs.fileInput.click()
// 将pdf文件保存到用户选择的路径中
this.fileContent = pdf.output('blob')
})
},
saveWord() {
// 获取页面元素
const element = document.getElementById('word-content')
// 将元素转换为html
const htmlContent = element.outerHTML
// 将html转换为word文档
const wordContent = htmlDocx.asBlob(htmlContent)
// 显示文件选择框
this.$refs.fileInput.click()
// 将word文件保存到用户选择的路径中
this.fileContent = wordContent
},
saveFile() {
// 获取用户选择的文件
const file = this.$refs.fileInput.files[0]
// 如果用户取消选择,则返回
if (!file) {
return
}
// 保存文件到用户选择的路径中
FileSaver.saveAs(this.fileContent, file.name)
}
}
}
</script>
修改后,点击保存按钮后会弹出文件选择框,用户选择保存路径后再保存文件。
完整的vue文件的内容
下面是完整的Vue文件的内容:
<template>
<div>
<div id="pdf-content">
<!-- 页面内容 -->
</div>
<button @click="savePdf">保存为pdf文件</button>
<div id="word-content">
<!-- 页面内容 -->
</div>
<button @click="saveWord">保存为word文件</button>
<input ref="fileInput" type="file" style="display: none" @change="saveFile">
</div>
</template>
<script>
import jsPDF from 'jspdf'
import htmlDocx from 'html-docx-js'
import FileSaver from 'file-saver'
export default {
data() {
return {
fileContent: null
}
},
methods: {
savePdf() {
// 获取页面元素
const element = document.getElementById('pdf-content')
// 将元素转换为canvas
html2canvas(element).then(canvas => {
// 获取canvas宽高
const contentWidth = canvas.width
const contentHeight = canvas.height
// 将canvas转换为图片数据
const imgData = canvas.toDataURL('image/png')
// 设置pdf文件尺寸
const pdfWidth = contentWidth / 2.75
const pdfHeight = contentHeight / 2.75
// 创建pdf实例
const pdf = new jsPDF('p', 'mm', [pdfWidth, pdfHeight])
// 添加图片到pdf文件
pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight)
// 显示文件选择框
this.$refs.fileInput.click()
// 将pdf文件保存到用户选择的路径中
this.fileContent = pdf.output('blob')
})
},
saveWord() {
// 获取页面元素
const element = document.getElementById('word-content')
// 将元素转换为html
const htmlContent = element.outerHTML
// 将html转换为word文档
const wordContent = htmlDocx.asBlob(htmlContent)
// 显示文件选择框
this.$refs.fileInput.click()
// 将word文件保存到用户选择的路径中
this.fileContent = wordContent
},
saveFile() {
// 获取用户选择的文件
const file = this.$refs.fileInput.files[0]
// 如果用户取消选择,则返回
if (!file) {
return
}
// 保存文件到用户选择的路径中
FileSaver.saveAs(this.fileContent, file.name)
}
}
}
</script>
注意:需要在项目中安装jspdf
、html-docx-js
和file-saver
库。