关于javascript:初探JavaScript-PDF-blob转换为Word-docx方法

51次阅读

共计 2915 个字符,预计需要花费 8 分钟才能阅读完成。

PDF 转 WORD 为什么是历史难题

PDF 转 Word 是一个十分十分广泛的需要,堪称人人忌危,为什么如此广泛的需要,却如此难行呢,还得看为什么会有这样的一个需要:

PDF 文档遵循 iOS32000 的标准是由 Adobe 公司推出的文档格局,之所以利用如此宽泛,是因为 PDF 精确定位了每个字符的坐标、依据坐标绘制的各种形态,应用 PDF 格局传输和打印文档能够保障格局的一致性,而后很多 PDF 文件是可用于浏览,展现,打印,但编辑起来是十分艰难,如格局调整,文字批改,款式调整等,那么就衍生了 PDF 转 Word 这一历史性的需要,但因为两者之间采纳的编码标准以及布局机制的齐全不统一,导致转换起来会非常复杂,个别的工具不是格局错乱,就是内容错乱,很难达到客户的原生冀望。

其难点在于建设从 PDF 基于元素地位的格局到 Word 基于内容的格局的映射。PDF 文档理论并不存在段落、表格的概念,PDF 转 Word 要做的就是将 PDF 文档中“横、竖线条围绕着文本”解析为 Word 的“表格”将“文本及下方的一条横线”解析为“文本下划线”等等。

两个工具两套规定,自古以来两个工具之间的兼容转换,除非是为一家所有,会有通用的规范和接口预留,达到很好的兼容性,但 Adobe 和微软都是微小的科技企业,且两款软件性能都是十分弱小且覆盖面全,要做到完满的匹配所有规定更是十分苦难。

对于报表用户来说,很多用户会将报表了解为报告,报告天然会联想到 Word,那么就很心愿在页面中展现的内容可能成 Word 文件来进行存档,编辑等作用。

ActiveReportsJS 是前端的报表开发工具,不与后端关联,因而想要将展现的 HTML 生成 Word,研发团队通过一些调研发现整个过程会非常复杂十分艰难,正如他们反馈:“不是一个 sprint 能解决的问题”,就 PDF.js 背地都有弱小的 Mozilla 撑持,更何况 Word 文档是依靠微软的 Offic 开发组件去生成的。

但在理论接触客户的时候,许多用户都会来询问相干内容包含如何用报表设计相似审批表、人事履历表、检测报告等很常见的 Word 报告。用户对后果都比较满意,但惟一用户不满的是报表后果只能生成 pdf。 这是传统,这也是外围需要,也是痛点。

本葡萄就有些很着急,于是不信这个邪,在前端工具如此丰盛的状况下,竟没有一个这样可用的工具?

开始搜寻,关上 google,榨干全副脑汁的词汇量输出了我须要的关键词,搜寻到了以下后果。

乍一看,第一条齐全吻合,Node.js 虽说是服务端也不是不能够承受,只有有计划即可。

应用 cloudmersive-convert-api-client 实现任意文件格式的转换

https://cloudmersive.medium.c…

看着十分有戏

代码简略:

但认真看看代码,** 果然老天在为咱们送货色的时候都在背地的标好了价格:

心想如果能够,付费就付费吧, 毕竟咱们也是做付费商业软件的业余 er,版权意识还是须要有的。

点击登录,用谷歌账号登陆胜利后,即可在我的项目中援用 cloudmersive-convert-api-client 安装包。

该 JS 库提供了将近几十种的 API 及 Class 用于解决转换不同的格式文件:除了将 PDF 转 Word 外,还有其余发的文件格式转换,应用起来也是非常简单,

转换后果测评:

能够辨认本地的 PDF 文件,转换后果:

  1. 可能保障 90% 的格局和款式,达到要求
  2. 图片可间接导入
  3. 背景色无奈保留
  4. 表格无奈间接导入为 Word 的表格,只能作为但文本
  5. 页眉页脚信息无奈间接导入为 Word 的页眉页脚,只作为文本
  6. 局部内容失落

  • 产品价格

因为整个转换 API 只是 CloudMersive 的一个 API 性能,整个产品还附加其余的平安测验等性能,因而产品是按月及并发数免费的。大家可自行搜寻理解,不过他们网站倒是提供好了几个文件转换的工具十分好用,无需登录间接获取转换后果

https://cloudmersive.com/tools

尝试既然有 PDF 流间接暴力转换 Word 文档,可否?

通过搜寻发现 PDF 对象流间接用 JS 转换为 Word 文件是十分艰难的,而且通过验证 ARJS 导出 PDF 文件能够用 Word 软件关上,那么忽然想到是否能够找一个中间件,将 PDF 流间接转换为 doc 或 docx 格局,但搜寻一番,尝试之后,只是在.pdf 后面加了 document.docx.pdf

该办法尝试失败。

跟技术大咖聊了之后, 才发现 pdf 和 word 尽管实质都是二进制流,但外部的申明等都是各自文件特有的属性,因而不能间接转换,简而言之就是是什么文件流就只能保留什么文件流。且 PDF 和 Word 是两大技术公司背书,间接转换得用业余的工具,因而此路不通。

曲线救 Coder: HTML 转换 PDF 大工将成?

于是乎,退而求其次,HTML 是万能的,HTML 能够转万物,HTML 转 PDF,HTML 转图片,HTML 转 Excel 等等等,那么 ActiveReportsJS 提供了可将报表导出为 HTML 文件且格局完全一致,那么办法来了,我间接应用 HTML 转 Word 不是更不便些?Google 搜寻果然此类材料比 PDF 转 Word 多了百倍,而且看代码也是操作非常简单:

https://jscodemine.grapecity….

只需 3 步骤:

1. 将报表导出 HTML
` var pageReport = new ARJS.PageReport();

            pageReport.load('./BandedReport.rdlx-json')
                .then(function() {return pageReport.run() })
                .then(function(pageDocument) {return HTMLExport.exportDocument(pageDocument) })

`

2. 加工 HTML 代码减少 office 标记

3. 创立 a 标签,间接下载 doc 格局

`var fileDownload = document.createElement(“a”);

   document.body.appendChild(fileDownload);
   fileDownload.href = sourceHTML;
   fileDownload.download = 'document.doc';
   fileDownload.click();
   document.body.removeChild(fileDownload);        

`
看看后果:成果很 Nice

转换后果测评:

  1. 款式失落,包含字体色彩,背景色,形态
  2. 图像失落
  3. 表格能够间接导入为 Word 表格
  4. 图标保留

4. 总结

两种转化后果总结如下:

通过一番尝试也算是有一个 Workaround,思考到报告类的报表个别以文本内容为主,款式也比拟奢侈,所以应用 html 到 Word 转换不失为一个疾速简洁的办法,大部分须要保留为 Word 还是为了进行二次编辑。本葡萄也在致力寻找 HTML 转 Word 款式保留的办法,有新的停顿会给大家更新第二篇。

转载请注明出处:葡萄城官网,葡萄城为开发者提供业余的开发工具、解决方案和服务,赋能开发者。

  • Wiki 百科:PDF 介绍
  • Wiki 百科:Word 介绍
  • pdf.js analog for Word Documents
  • 纯前端报表控件 ActiveReportsJS

正文完
 0