首页 > 其他分享 >gotenberg+ chromiumly + pdf.js 进行office 文档转换以及预览处理

gotenberg+ chromiumly + pdf.js 进行office 文档转换以及预览处理

时间:2023-04-19 21:02:16浏览次数:53  
标签:基于 chromiumly office 预览 js gotenberg pdf data

日常中office 预览是一个比较常见的问题,基于微软的office online 是一个选择,但是移动端效果不是很好
就有pdf 以及一些基于生成图片的方案也是不错的,以下是基于gotenberg+ chromiumly 的一个尝试

简单说明

gotenberg 是基于golang 开发的包装了Chromium 以及 LibreOffice 的基于api 的无状态pdf 转换服务,可以支持多种格式文件的
pdf 转换生成,比较灵活而且比较强大,包装下可以实现一个基本符合大部分场景的office 预览服务

环境准备

  • docker-compose 文件

 

version: "3"
services:
convert:
image: gotenberg/gotenberg:7
ports:
- "3000:3000"

代码集成使用

基于了chromiumly 包装的服务

  • demo.js
const { PDFEngine } = require("chromiumly");
const fs = require("fs");
const pdf = require('pdf-parse');
(async function () {
const buffer = await PDFEngine.convert({
files: ["app.docx"],
});
fs.writeFile("mydemo.pdf", buffer, "binary", function (err) {
if (err) {
console.log(err);
} else {
let dataBuffer = fs.readFileSync('mydemo.pdf');
pdf(dataBuffer).then(function (data) {
// number of pages
console.log(data.numpages);
// number of rendered pages
console.log(data.numrender);
// PDF info
console.log(data.info);
// PDF.js version
// check https://mozilla.github.io/pdf.js/getting_started/
console.log(data.version);
})
}
});
})()

备注: 以上只是简单的pdf 生成以及pdf 解析,对于实际预览没有直接包含,但是我们可以基于openresty proxy + pdf.js 提供的预览可以方便的处理pdf预览
具体可以参考我以前写的文章

说明

gotenberg 同时支持基于webhook的异步处理也比较强大,比较适合较大文件,而且需要消息通知的,以上只是一个简单的集成说明,实际上对于转换的文件
我们可以直接存放到minio 中,基于s3 实现预览的权限了控制,同时chromiumly client 有点不好的是目前只支持文件,因为包装了文件流,不是很方便,可以
自己开发一个rest api 基于form-data 进行处理,完整运行demo 参考github

参考资料

https://gotenberg.dev/https://github.com/gotenberg/gotenberghttps://www.npmjs.com/package/chromiumlyhttps://github.com/rongfengliang/gotenberg_chromiumly_learninghttps://github.com/unoconv/unoconv

标签:基于,chromiumly,office,预览,js,gotenberg,pdf,data
From: https://blog.51cto.com/rongfengliang/6207434

相关文章

  • 【中介者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介中介者模式(MediatorPattern)是一种行为型模式。它限制对象之间的直接交互,它用一个中介对象来封装一系列的动作,以让对象之间进行交流。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。当一些对象和其他对象紧密耦合以致难以对其进......
  • web页面播放spine动画及播放相关使用及总结spine-player.js
    1.官方git,里面有些例子可以参考。https://github.com/EsotericSoftware/spine-runtimes.git2.官方播放器:http://zh.esotericsoftware.com/spine-player目前测试4.0以上的js支持动画模型透明3.最基本的资源初始化html代码里面:<divid="player-container"style="width:640......
  • Jsp动态显示服务器时间
    <scriptlanguage="javascript"> varcurrentDate=newDate(<%=newjava.util.Date().getTime()%>); functionrun(){ currentDate.setSeconds(currentDate.getSeconds()+1); document.getElementById("currentTime&qu......
  • Puppeteer+RabbitMQ:Node.js 批量加工pdf服务架构设计与落地
    全文约8500字,阅读时长约10分钟。智慧作业最近上线「个性化手册」(简称个册)功能,一份完整的个性化手册分为三部分:•学情分析:根据学生阶段性的学习和考试情况进行学情分析、归纳、总结,汇总学情数据;•精准推荐:推荐算法基于学情数据结合知识图谱进行精准练习题推荐;•错题回顾:错题的......
  • 使用Vue.js实现文字跑马灯效果
    实现文字跑马灯效果,首先用到substring()截取和setInterval计时器clearInterval()清除计时器效果如下:实现代码如下:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content=&......
  • js页面将数据传给vue页面
    js页面 vue页面接收 ......
  • pycharm中运行js文件出现UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in
      在做有道翻译时发现python文件中调用js文件并读取,出现了UnicodeDecodeError:'gbk'codeccan'tdecodebyte0xafinposition205:illegalmultibytesequence报错。其实修改很简单,我们只需要将subprocess.py文件Popen类属性中的enconding='None',改为enconding='utf-8'就可......
  • Three.js教程:材质效果
    推荐:将NSDT场景编辑器加入你3D工具链其他工具系列:NSDT简石数字孪生材质效果前面案例中几何体对应网格模型材质只是设置了一个颜色,实际渲染的时候往往会设置其他的参数,比如实现玻璃效果要设置材质透明度,一些光亮的表面要添加高光效果。半透明效果更改场景中的球体材质对象构造......
  • 如何在 vue3 中使用 jsx/tsx?
    我们都知道,通常情况下我们使用vue大多都是用的SFC(SignleFileComponent)单文件组件模式,即一个组件就是一个文件,但其实Vue也是支持使用JSX来编写组件的。这里不讨论SFC和JSX的好坏,这个仁者见仁智者见智。本篇文章旨在带领大家快速了解和使用Vue中的JSX语法,好......
  • JS中的for in和for of
    在JavaScript中,for...in和for...of都是用于迭代循环的结构: 1.for...in循环:for...in循环主要用于遍历对象的可枚举属性。这种循环不仅遍历对象自身的属性,还会遍历原型链上的可枚举属性。它的语法如下:for(variableinobject){//执行的代码}其中variable是......