通过前端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场景本地转换文件功能足够
评论 (0)