前端转PDF,通过前端edge库去实现(officeNet源码见附件)

前端转PDF,通过前端edge库去实现(officeNet源码见附件)

大祥子
2021-12-16 / 0 评论 / 647 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年06月08日,已超过689天没有更新,若内容或图片失效,请留言反馈。

通过前端edge库去实现(officeNet源码见附件
1、方案系统环境:
 需要安装office,试过office2019 和 2016,其他版本尚未测试;
 需要安装vs2010的office运行时(office安装完毕之后应该已经包含运行时环境,但实际情况不能保证每一台安装都没问题)(最好下载安装个微软运行库)
 运行时微软官方下载地址(或者直接下载微软运行库合集):
  微软运行库
  微软运行库
 需要.netframework4.5及其以上(因为edge支持的.net的类库版本要求不得低于4.5,否则类库语法编译不通过,类库代码编写必须按照edge的格式要求定义返回值方法名入参格式等)
2、方案前端环境:
 1.package.json  dependencies 追加 "electron-edge-js": "^14.16.1" (和electron 13.6.0版本匹配)
 2.vue.config.js 外部拓展 externals 追加 "electron-edge-js",打包的时候否则遗漏报错
 3.officeNet.dll 提供的中间类库,放到前端项目根目录下调用 const edge = require('electron-edge-js')

3、officeNet功能:

var sdkPath = path.resolve("./officeNet.dll")
// 三个参数名称和参数的值写死
const translate = edgefunc({
  assemblyFile: sdkPath,
  typeName:"officeNet.OfficeTrans",
  translate: "Invoke"
})
// 这两个参数名称写死,一个是输入文件绝对地址,一个是输出文件绝对地址,类库取这两个字段
var input = {
  inputFilePath: "E:\office-dll\0222\1.docx",
  outputFilePath: "E:\office-dll\0222\1.pdf"
}
translate(input, function(err,result) {
  if (err) throw err;
  console.log("traslate doc -> pdf: " + result); // 成功返回1 失败返回2
});

// 三个参数名称和参数的值写死
const officeVersionCheck =edge.func({
  assemblyFile: sdkPath,
  typeName:"officeNet.OfficeCheck",
  translate: "Invoke"
})
// 入参为{}对象(预留)
officeVersionCheck({}, function(err,result) {
  if (err) throw err;
  console.log("office word version check:" + result); // 返回1 环境正常,返回2,office版本低于2010,返回3,系统无office
});

该方法通过注册表去获取word信息,不能绝对确认office在系统中安装,无法检测office安装是否存在问题;
简单举例:注册表异常 或者 注册表残留 都会导致返回的值不准确(该方法只能作为一个参考)
备注:
 1.不能保证所有版本的word文件都能转换为pdf,可能存在转换失败的情况,代码注意做好不能转换的处理
 2.仅限于windows环境使用
 3.虽然edge内可以写c#代码,c#中可以写node代码,禁止这样写,代码互侵太严重
 4.edge官方地址https://github.com/tjanczuk/edge#how-to-marshal-data-between-c-and-nodejs
 5.自行熟悉edge的语法和代码约束和方法定义要求,edge性能不高(node和c#两个运行环境的胶水层),但是应用于当前pc场景本地转换文件功能足够

269

评论 (0)

取消