五分钟上线——函数计算 Word 转 PDF 云服务

本文涉及的产品
简介: 函数计算的按调用量收费,动态伸缩特性使其比较适合部署在线转化工具(如:图片裁剪,网页转图片,文字转音频)。这类转换工具通常考虑是 cpp 实现,最终编译成二进制的命令行工具或动态链接库。而函数计算支持多种语言运行时,采用 HTTP 协议进行远程调用,也非常适用于异构模式。

注意: 下面借助于 OSS 解压的方法已经不推荐,仅供学习而保留,对于大文件和依赖目前更推荐 NAS 方案,希望快速上手请移步 https://yq.aliyun.com/articles/718653

函数计算的按调用量收费,动态伸缩特性使其比较适合部署在线转化工具(如:图片裁剪,网页转图片,文字转音频)。这类转换工具通常考虑是 cpp 实现,最终编译成二进制的命令行工具或动态链接库。而函数计算支持多种语言运行时,采用 HTTP 协议进行远程调用,也非常适用于异构模式。本文将介绍如何基于 fc-libreoffice 项目快速搭建一个 Word 转  PDF 的云服务。

fc-libreoffice 是一个基于 nodejs 进行接口封装的 npm,其中内置了针对函数计算 运行时预编译的 libreoffice 。虽然 libreoffice 已经经过裁剪,并使用压缩比较高的 Brotli 算法进行压缩。但最终的压缩包大小为 84M,超过了函数计算 50M 压缩包的大小限制。所以示例项目采用上传 OSS,运行时预下载并解压 libreoffice。下文将侧重于快速搭建 libreoffice 云服务,调用几个脚本封装的 make 命令即可快速体验。

依赖工具

  • docker-ce 安装方法参考官方安装文档
  • fun 一款函数计算的编排工具,用于快速部署函数计算应用。

    MacOS 平台可以使用如下方法安装

    brew tap vangie/formula
    brew install fun

    其他平台可以通过 npm 安装

    npm install @alicloud/fun -g
  • ossutil oss 的命令行工具。将其下载并放置到 $PATH 所在目录。

克隆项目

fc-libreoffiice 项目下有一个 example 项目,进行简单配置就可以快速部署。

# 克隆项目
git clone https://github.com/awesome-fc/fc-libreoffice.git

# 进入示例工程目录
cd fc-libreoffice/example

修改配置文件

# 配置 .env 文件
cp env.example .env

填充 .env 文件里的环境变量

# 阿里云 AK。建议使用主 AK,fun 部署需要角色修改权限。
ALIBABA_CLOUD_ACCESS_KEY_ID=
ALIBABA_CLOUD_ACCESS_KEY_SECRET=

# 阿里云账户 ID。去阿里云账户中心可以查到
ALIBABA_CLOUD_ACCOUNT_ID=

# 部署的 region
ALIBABA_CLOUD_DEFAULT_REGION=

# 用于上传 liboffice 压缩文件的 oss bucket,请先去 oss 控制台创建一个
OSS_BUCKET=

部署函数并验证效果

部署函数,此过程中会安装依赖,上传 OSS,并部署函数到函数计算平台

$ make deploy
.... (此处略去了大量输出内容)

Waiting for service libre-svc to be deployed...
        Waiting for function libre-fun to be deployed...
                Waiting for packaging function libre-fun code...
                package function libre-fun code done
        function libre-fun deploy success
service libre-svc deploy success

调用函数,将预制的 example.docx 文件转换层 example.pdf 文件,并上传到 OSS。

$ make invoke
bin/invoke.sh
+ fcli function invoke -s libre-svc -f libre-fun
{"name":"example.pdf","url":"http://vangie-test.oss-cn-shanghai-internal.aliyuncs.com/example.pdf","res":{"status":200,"statusCode":200,"headers":{"server":"AliyunOSS","date":"Sat, 01 Dec 2018 03:42:25 GMT","content-length":"0","connection":"keep-alive","x-oss-request-id":"5C02032129DDF1C134B9BC7C","x-oss-event-status":"eyJSZXN1bHQiOiAiT2sifQ==","etag":"\"94829EEB576E66A2B5760DD034EECB0B\"","x-oss-hash-crc64ecma":"5833133482735102142","content-md5":"lIKe61duZqK1dg3QNO7LCw==","x-oss-server-time":"60"},"size":0,"aborted":false,"rt":83,"keepAliveSocket":true,"data":{"type":"Buffer","data":[]},"requestUrls":["http://vangie-test.oss-cn-shanghai-internal.aliyuncs.com/example.pdf"],"timing":null,"remoteAddress":"100.118.102.36","remotePort":80,"socketHandledRequests":3,"socketHandledResponses":3}}

从 OSS 下载 example.pdf 到当前目录,查看转换后的结果。

$ make download
bin/download.sh
Succeed: Total num: 1, size: 33,811. OK num: 1(download 1 objects).
0.192966(s) elapsed

下面是转换后的结果,左图为 word 源文件,右图为生成的 pdf 文件。中文和内嵌图片都效果不错。

_2018_12_01_11_47_56

小结

fc-libreoffcie/example 仅仅是一个示例项目,对于正在的生产环境应用,还有不少的优化空间,比如下载文件的完整性校验、流式解压、支持 http 接口输入源文件和输出目标文件、使用 time trigger 进行预热以减少冷启动开销等。上面几个简单的 make 命令背后调用了一些 bash 脚本编写的自动化步骤,这些步骤涉及到一些常用的函数计算领域的方法和技巧,如果您对 libreoffice 的移植过程比较感兴趣可以阅读另一篇文章《手把手教您将 libreoffice 移植到函数计算平台》或者您可以直接阅读 fc-libreoffice 的源码。

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
1月前
|
应用服务中间件
使用 Adobe Livecycle Enterprise service 将 word 文档转换成 PDF 格式
使用 Adobe Livecycle Enterprise service 将 word 文档转换成 PDF 格式
20 0
iframe 在线预览pdf、word、excel、ppt、txt、图片、视频
iframe 在线预览pdf、word、excel、ppt、txt、图片、视频
|
10天前
|
关系型数据库 Serverless 分布式数据库
PolarDB PostgreSQL版Serverless功能上线公测啦,公测期间免费使用!
Serverless数据库能够使得数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。PolarDB PostgreSQL版 Serverless提供了CPU、内存、存储、网络资源的实时弹性能力,构建计算与存储分离架构下的 PolarDB PostgreSQL版产品新形态。
|
1月前
|
Java Linux 数据安全/隐私保护
Java【代码 16】将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理
【2月更文挑战第3天】Java 将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理
63 0
|
1月前
|
Java 程序员 数据安全/隐私保护
分享一个word转pdf的工具类Aspose[java]
分享一个word转pdf的工具类Aspose[java]
32 0
|
1月前
|
数据安全/隐私保护 Python Windows
Python办公自动化【Word转换PDF、PDF读取内容、PDF合并文件、PDF拆分文件、PDF加密文件、PPT基本操作-增加幻灯片、增加内容】(六)-全面详解(学习总结---从入门到深化)
Python办公自动化【Word转换PDF、PDF读取内容、PDF合并文件、PDF拆分文件、PDF加密文件、PPT基本操作-增加幻灯片、增加内容】(六)-全面详解(学习总结---从入门到深化)
37 0
|
2月前
|
存储 Shell 数据安全/隐私保护
Python 自动化指南(繁琐工作自动化)第二版:十五、使用 PDF 和 WORD 文档
Python 自动化指南(繁琐工作自动化)第二版:十五、使用 PDF 和 WORD 文档
43 1
|
2月前
|
数据安全/隐私保护 Python
Python办公自动化【Word转换PDF、PDF读取内容、PDF合并文件、PDF拆分文件、PDF加密文件、PPT基本操作-增加幻灯片、增加内容】(六)-全面详解(学习总结---从入门到深化)(下)
Python办公自动化【Word转换PDF、PDF读取内容、PDF合并文件、PDF拆分文件、PDF加密文件、PPT基本操作-增加幻灯片、增加内容】(六)-全面详解(学习总结---从入门到深化)
32 1
|
2月前
|
数据安全/隐私保护 Python Windows
Python办公自动化【Word转换PDF、PDF读取内容、PDF合并文件、PDF拆分文件、PDF加密文件、PPT基本操作-增加幻灯片、增加内容】(六)-全面详解(学习总结---从入门到深化)(上)
Python办公自动化【Word转换PDF、PDF读取内容、PDF合并文件、PDF拆分文件、PDF加密文件、PPT基本操作-增加幻灯片、增加内容】(六)-全面详解(学习总结---从入门到深化)
43 0
|
3月前
在word、ppt、excel编辑软件标题栏顶部左上角加入自定义功能:另存为、导出PDF
在word、ppt、excel编辑软件标题栏顶部左上角加入自定义功能:另存为、导出PDF

热门文章

最新文章

相关产品

  • 函数计算