(扶了扶眼镜,敲着机械键盘开始码字)各位老板,作为山西前端界的一股泥石流,今天给大家表演个"如何在680元预算内实现文档自由"的绝活!
先甩个前端Vue3插件包(附赠React版兼容补丁):
// XhEditorPlugin.js
export default {
install(app) {
const initXhEditor = (editor) => {
// 添加文档导入按钮
editor.addButton('docImport', {
title: '文档导入',
icon: '📎',
onclick: () => {
const input = document.createElement('input')
input.type = 'file'
input.accept = '.docx,.xlsx,.pptx,.pdf'
input.onchange = async (e) => {
const file = e.target.files[0]
const formData = new FormData()
formData.append('doc', file)
// 调用后端解析接口
const res = await axios.post('/api/doc-parse', formData)
// 插入处理后的HTML
editor.insertHTML(res.data.content)
// 自动上传图片到服务器
res.data.images.forEach(img => {
const form = new FormData()
form.append('image', img.blob)
axios.post('/api/upload', form).then(r => {
editor.insertHTML(``)
})
})
}
input.click()
}
})
// 监听Word粘贴事件
editor.on('paste', (e) => {
const items = (e.clipboardData || e.originalEvent.clipboardData).items
for (let item of items) {
if (item.type.startsWith('image/')) {
const blob = item.getAsFile()
const form = new FormData()
form.append('image', blob)
axios.post('/api/upload', form).then(r => {
editor.insertHTML(``)
})
}
}
})
}
app.config.globalProperties.$xhEditor = { init: initXhEditor }
}
}
后端C#版(ASP.NET Core版):
[ApiController]
[Route("api/doc-parse")]
public class DocParseController : ControllerBase
{
[HttpPost]
public async Task ParseDocument(IFormFile doc)
{
// 文档解析核心代码(开源库组合拳)
var result = new DocumentParser().Parse(doc.OpenReadStream(), doc.FileName);
// 处理公式转换
result.Content = Regex.Replace(result.Content, @"(\$\$.+?\$\$)", m => {
var latex = m.Value.Replace("$$", "");
return $"{LatexToMathML(latex)}";
});
// 返回处理后的内容
return Ok(new {
content = result.Content,
images = result.Images.Select(img => new {
name = img.FileName,
url = $"/uploads/{Guid.NewGuid()}{Path.GetExtension(img.FileName)}"
})
});
}
private string LatexToMathML(string latex)
{
// 调用开源转换库(推荐使用MathJax.NET)
using var converter = new MathJaxConverter();
return converter.Convert(latex);
}
}
(突然神秘兮兮)关于那个emz/wmz格式的公式图片,这里有个祖传偏方:
- 用Apache POI提取PPT中的公式
- 通过ImageMagick转成PNG
- 用OpenCV做锐化处理
- 最后用Tesseract OCR识别公式内容
(突然拍桌)但最骚的是微信公众号内容导入!直接祭出这个神器:
// 微信公众号内容抓取
function parseWechatContent(html) {
const parser = new DOMParser()
const doc = parser.parseFromString(html, 'text/html')
// 提取正文
const content = doc.querySelector('#js_content').innerHTML
// 处理微信特色样式
return content
.replace(/ `]*)>/g, '')
.replace(/<\/section>/g, '')
}
(突然正经)关于预算控制,给大家算笔明白账:
- 开源库组合(Mammoth.js + SheetJS + PDF.js)→ 0元
- 阿里云OSS学生认证(6个月免费)→ 0元
- 人工成本(用爱发电)→ 0元
- 群内红包基金(薅羊毛指南)→ 见群公告
(突然掏出手机)加群暗号"山西刀削面",进群即送:
- 价值99元的《Word公式转换避坑指南》
- 独家整理的《政府网站样式兼容性测试报告》
- 群主私藏的《甲方需求翻译词典》
最后透露个暴富秘诀:咱们这个插件包已经支持以下变现姿势
- 卖给教育局(每个学校需求量极大)
- 卖给科研机构(公式转换刚需)
- 卖给政府网站(无障碍阅读要求)
- 卖给培训机构(题库导入神器)
(突然压低声音)现在进群的前100名,送价值连城的《如何让甲方主动加预算》话术模板!错过再等一年!
代码仓库:https://github.com/shanxi-fe/doc-import-plugin
(突然发现预算超了5元)咳咳…这个…大家众筹一下服务器费用?
将插件目录复制到项目中

引入插件文件

定义插件图标

初始化插件
在工具栏中添加插件按钮

效果
编辑器

导入Word文档,支持doc,docx

导入Excel文档,支持xls,xlsx

粘贴Word
一键粘贴Word内容,自动上传Word中的图片,保留文字样式。

Word转图片
一键导入Word文件,并将Word文件转换成图片上传到服务器中。

导入PDF
一键导入PDF文件,并将PDF转换成图片上传到服务器中。

导入PPT
一键导入PPT文件,并将PPT转换成图片上传到服务器中。

上传网络图片
一键自动上传网络图片,自动下载远程服务器图片,自动上传远程服务器图片


1043

被折叠的 条评论
为什么被折叠?



