简历上传,pdf简历下载

This commit is contained in:
2026-04-03 17:52:07 +08:00
parent 821a950df2
commit a39835be01
25 changed files with 2076 additions and 301 deletions
+76 -3
View File
@@ -304,6 +304,7 @@
<script setup lang="ts">
import { ref, computed, nextTick } from 'vue'
import html2pdf from 'html2pdf.js'
import JobResumeTemplate from '@/components/JobResumeTemplate.vue'
import type { ResumeTemplateData } from '@/components/JobResumeTemplate.vue'
import { fetchProfile, fetchEducation, fetchWork, fetchInternship, fetchProject, fetchCompetition } from '@/api/profile'
@@ -588,10 +589,82 @@ function toggleDownloadMenu() {
}
/** 处理下载(PDF/Word */
function handleDownload(type: 'pdf' | 'word') {
async function handleDownload(type: 'pdf' | 'word') {
showDownloadMenu.value = false
// TODO: 实现简历HTML转PDF/Word下载
console.log(`[下载简历] 格式: ${type}`)
if (type === 'pdf') {
// 通过 JobResumeTemplate 组件暴露的 resumeRef 获取简历DOM
const element = resumeTemplateRef.value?.resumeRef
if (!element) {
console.error('[下载简历] 无法获取简历模板DOM')
return
}
// html2pdf 配置选项
const options = {
margin: [10, 10, 10, 10] as [number, number, number, number],
filename: `${resumeTemplateData.value.name || '简历'}_定制简历.pdf`,
image: { type: 'jpeg', quality: 0.98 },
html2canvas: { scale: 2, useCORS: true, logging: false },
jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' as const },
}
try {
await html2pdf().set(options).from(element).save()
} catch (err) {
console.error('[下载简历] PDF生成失败', err)
}
} else {
// 将简历HTML转为Word文档并下载(使用HTML格式的.doc文件,Word可正常打开)
const element = resumeTemplateRef.value?.resumeRef
if (!element) {
console.error('[下载简历] 无法获取简历模板DOM')
return
}
try {
// 获取页面样式表内容
const styleSheets = Array.from(document.styleSheets)
let cssText = ''
styleSheets.forEach((sheet) => {
try {
Array.from(sheet.cssRules).forEach((rule) => {
cssText += rule.cssText + '\n'
})
} catch {
// 跨域样式表无法读取,跳过
}
})
// 组装完整HTML文档(Word可识别的HTML格式)
const fullHtml = `
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta charset="utf-8">
<meta name="ProgId" content="Word.Document">
<meta name="Generator" content="Microsoft Word 15">
<style>${cssText}</style>
</head>
<body>${element.outerHTML}</body>
</html>
`
// 生成Blob并触发下载
const blob = new Blob([fullHtml], { type: 'application/msword' })
const fileName = `${resumeTemplateData.value.name || '简历'}_定制简历.doc`
const link = document.createElement('a')
link.href = URL.createObjectURL(blob)
link.download = fileName
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
URL.revokeObjectURL(link.href)
} catch (err) {
console.error('[下载简历] Word生成失败', err)
}
}
}
/** 立即去投递 */