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.com/how-to-convert-pdf-to-word-docx-format-in-node-js-30291f7c446b

看着非常有戏

代码简单:

但仔细看看代码, **果然老天在为我们送东西的时候都在背后的标好了价格 :

心想如果可以,付费就付费吧, 毕竟我们也是做付费商业软件的专业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.com/share/Itym7G5fAUSWY4ffuu2cJw/

只需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

初探JavaScript PDF blob转换为Word docx方法相关推荐

  1. C# 将PDF文件转换为word格式

    Pdf(Portable Document Format)意为"便携式文档格式",是现在最流行的文件格式之一,它有很多优点如:尺寸较小.阅读方便.操作系统平台通用等,非常适合在网络 ...

  2. java pdf 转换 word_如何使用Java将pdf文件转换为word文件

    如何使用Java将pdf文件转换为word文件? 而且,它看起来像它一样容易吗? 解决方法: public class PDFTextReader { static String pdftoText( ...

  3. 将Pdf文件转换为Word

    在Word 2013里面,我们可以打开一个PDF文件,并对其进行编辑,重新保存后,实现将PDF文件转换为Word文件 下面由简单的代码VBA代码实现将某个目录下所有的PDF文件转为Word文件 Sub ...

  4. 如何快速将PDF文件转换为Word文档

    PDF文件是一个广泛使用的电子文档格式,其被广泛应用于各种领域,包括教育.商业和政府.虽然PDF文件非常实用,但有时你需要将其转换为Word文档,以便更方便地编辑和处理.以下是几种快速将PDF文件转换 ...

  5. 在Word2013中如何将PDF文件转换为Word文件

    Word和PDF文件之间的相互转换在我们的生活中是经常需要用到的,也是曾经困扰了很多人的一个问题,现在好了,Word2013可以直接帮我们将PDF文件转换为 Word 文件了,小伙伴儿们有没有惊呆了呢 ...

  6. 苹果手机如何将PDF文件转换为Word文档

    作为职场小白一遇到文件转换就头疼,特别是下班了之后手机接收到的PDF文件,电脑又不在身边,手机又不会转换,是不是很多人都有我这样的苦恼,但是小编今天就在这告诉大家,手机上市可以实现PDF文件转换Wor ...

  7. 如何在C#中实现将PPT演示文稿转换为 Word DOCX

    在某些情况下,可能需要将 PowerPoint 演示文稿转换为 Word 文档.为了自动化此过程或批量转换,本文介绍了如何使用 C# 将 PowerPoint PPTX/PPT 转换为 Word DO ...

  8. 怎么把rmd改成html,在Rmd中的htmlTable - 转换为Word docx

    我有以下Rmd文件,它生成一个html文件,然后我将其复制粘贴到docx文件(对于协作者)中.以下是我想知道如何处理表格的问题,但我无法在短片中找到答案here:在Rmd中的htmlTable - 转 ...

  9. html字符串转成数组,图文详解JavaScript中字符串转换为数组的方法

    在前端开发中经常需要使用JavaScript,那你知道怎么将JS字符串转换为数组吗?这篇文章就和大家讲讲JS将字符串转换为数组的方法,感兴趣的朋友可以参考一下,希望可以帮助到你. 之前一篇文章已经给大 ...

  10. 如何将PDF格式转换为WORD文档

    经常在PDF形式上看到有好的文件时,想把它拿出来,但是却是不行,所以我第一步就是找一下有没有可以到PDF格式与WORD文档的转换,在网上找了一下,原来还真的有很多,今天我就把这些方法也传上来,不过我也 ...

最新文章

  1. MediaCodec_loop 崩溃
  2. [SourceInsight].SI自动添加函数注释
  3. java文件全是数字编码_批量将Java源代码文件的编码从GBK转为UTF-8
  4. [haoi2011]防线修建
  5. nginx正向代理 反向代理
  6. 吴恩达《机器学习》第九章:神经网络的学习
  7. MySQL数据库数据存放位置修改
  8. 发布传参_Taro 1.2.9 发布,BAT 小程序、H5 与 RN 端统一框架
  9. 可三维成像(16,32线等)激光雷达调研
  10. 【破解】PyCharm2018专业版激活(激活到2100年)
  11. Thread dump文件抓取和分析(JCA工具)
  12. 如何使用.bas文件
  13. OV7670手册相关摘要
  14. DPCM编码解码的原理
  15. 2022年全国技能大赛云计算 RocketChat聊天系统上云
  16. 阿里、百度、腾讯Java程序员面经(附带面试题答案)
  17. 计算机找不到文件素材,AE收集文件后发现素材消失了的解决步骤
  18. isca_2021_papers_list
  19. 句子类型 - there be结构
  20. solidity:1. 变量和常量

热门文章

  1. 小程序——列表,详情页(模板)
  2. 最新版计算机应用基础,计算机应用基础课件(最新版)
  3. orCAD导入AD库 连不上线 更改元件库 出现Unable To Save Part
  4. VC开发工具与各运行库对应关系
  5. 常用的台湾繁体字字体(轉)
  6. UA PHYS515A 电磁理论IV 时变电磁场理论1 含时的麦克斯韦方程
  7. 【总结】密码学详细学习
  8. DynamipsGUI支持的全系列Cisco IOS下载
  9. GoldWave2020注册激活码版下载音频处理制作教程
  10. 【原】从一个bug浅谈YUI3组件的资源加载