aws lambda 转换 office/txt/html 为 pdf

这篇具有很好参考价值的文章主要介绍了aws lambda 转换 office/txt/html 为 pdf。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简洁的写作需要勇气。让事物变小是一种深思熟虑的、困难的和有价值的行为。大多数书籍本应是一篇博客文章。大多数博客文章本应是一条微博。大多数微博本应不写。

aws lambda 转换 office/txt/html 为 pdf

概述

aws lambda

AWS Lambda 是一项无服务器事件驱动型计算服务,该服务使您可以运行几乎任何类型的应用程序或后端服务的代码,而无需预置或管理服务器。可以从 200 多个 AWS 服务和软件即服务 (SaaS) 应用程序中触发 Lambda,且只需按您的使用量付费。

为什么选择使用 aws lambda

文件格式转换是一种非常消耗内存和 CPU 的计算,并且存在很多不确定性。如果使用传统的方式去实现,比如 api + 多线程的方式运行,如果在大批量转换的时候,很多失败的任务没有进行有效的资源释放,这很容易引起系统的内存泄漏或 CPU 过载。并且如果任务过多,服务的横向扩展会变得比较复杂(实现横向扩展远比转换服务本身复杂)。

aws lambda 引入能有效的解决上述产生的问题,通过 lambda + sqs 的方式可以很方便的实现一个高可用的格式转换服务。

  • aws lambda 支持 docker 的方式调用,不管运行运行环境多复杂,也能有效的进行环境打包。
  • 每一个 lambda 函数的执行是独立的,失败任务不会影响到其他任务的执行。
  • sqs 消息队列的方式触发 lambda,可以对任务过多时进行有效的“削峰”处理。

构建转换环境

由于 aws lambda 支持 docker 的方式运行,因此我们可以构建好基础的转换服务运行环境,这样只需要关注具体的业务逻辑编写即可。

  • 对于 html 的转换方案,采用 wkhtmltopdf
  • 对于 office(word/excel/powerpoint) 则采用开源的 libreoffice

由于我的业务环境使用 python 居多,因此这里选择的基础镜像为 python:3.7,这同时也是一个基于 Debain 的系统。

html 转换方案

wkhtmltopdf 是一个使用 Qt WebKit 引擎做渲染的,能够把 html 文档转换成 pdf 文档 或 图片(image) 的命令行工具。支持多个平台,可在 win,linux,os x 等系统下运行。

优点:

  • 生成 PDF 时会自动根据 HTML 页面中 H 标签生成树形目录结构;
  • 小巧方便,转换速度快;
  • 跨平台,可以在 Liunx 下用,也可以在 win 使用;

下面是 Dockerfile 的关于安装 wkhtmltopdf 的命令,其实过程主要是从 wkhtmltopdf 官网下载对应的版本,只有通过 dpkg 进行安装。

# Install wkhtmltopdf
RUN wget -O wkhtmltox_0.12.6.1-2.bullseye_amd64.deb https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.bullseye_amd64.deb && \
		apt-get -y update && apt-get -y install xfonts-encodings xfonts-utils xfonts-base xfonts-75dpi && \
		dpkg -i wkhtmltox_0.12.6.1-2.bullseye_amd64.deb  && \
		apt-get -y autoremove && apt-get clean && \
		rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
		wkhtmltopdf --version

安装完之后可以通过 python 的 os 调用系统命令进行 html 文件的转换,详细的参数配置选择可以参考官网。

wkhtmltopdf --page-size A4 --orientation Portrait --dpi 300 --image-dpi 600 --image-quality 94 <input name> <output name>
office 转换方案

对于转换 office 到 pdf,最好的方案是调用 office 的底层服务,但这会紧紧局限在 windows 平台,如果要进行跨平台使用,LibreOffice 是一个不错的选择,它能最大程度的兼容 word/excel/powerpoint,最终转换效果也是很不错的。

LibreOffice 在 linux 的安装会比较复杂一些,同时需要安装一些相应的字体库等。其安装过程可以分为下面三步:

  • 增加 LibreOffice “fresh” PPA
  • 安装语言包
  • 安装额外必须的包
  • 安装 LibreOffice

可以参考这篇文章获得详细的解释,下面是 Dockerfile 的关于安装 LibreOffice 的命令

# Install LibreOffice
RUN	apt-get -y update && apt-get -y dist-upgrade &&\
		apt-get -y install software-properties-common && \
		add-apt-repository -y ppa:libreoffice/ppa && \
		apt-get -y install locales libreoffice libreoffice-writer libreoffice-impress libreoffice-common && \
		apt-get -y install fonts-opensymbol && \
		apt-get -y install hunspell-en-us hyphen-en-us mythes-en-us libreoffice-help-en-us && \
		apt-get -y install libreoffice-l10n-de hunspell-de-de-frami hyphen-de mythes-de libreoffice-help-de && \
		apt-get -y install libreoffice-l10n-fr hunspell-fr-comprehensive hyphen-fr mythes-fr libreoffice-help-fr && \
		apt-get -y install libreoffice-l10n-es hunspell-es hyphen-es mythes-es libreoffice-help-es && \
		apt-get -y install fonts-dejavu fonts-dejavu-core fonts-dejavu-extra fonts-droid-fallback fonts-dustin fonts-f500 fonts-fanwood && \
		apt-get -y install fonts-freefont-ttf fonts-liberation fonts-lmodern fonts-lyx fonts-sil-gentium fonts-texgyre fonts-tlwg-purisa && \
		apt-get -y autoremove && apt-get clean && \
		rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
		localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 && \
		libreoffice --version

安装完之后可以通过 python 的 os 调用系统命令进行 html 文件的转换。

libreoffice --headless --convert-to pdf <input name>

注意,如果在 lambda 上运行的时候,一定要重新设置 HOME 路径到 /tmp 下,否则会因为无权限创建缓存文件而报错。

export HOME=/tmp && libreoffice --headless --convert-to pdf <input name>
txt 转换方案

将 txt 转换成 pdf 可以直接借用 libreoffce,命令也是一样的,如下:

libreoffice --headless --convert-to pdf <input name>

参考文档

[1] HTML 转 PDF 之 wkhtmltopdf 工具简介 https://www.jianshu.com/p/559c594678b6/
[2] wkhtmltopdf https://wkhtmltopdf.org/downloads.html
[3] Ubuntu18.04中安装wkhtmltopdf http://events.jianshu.io/p/07c8e7837c7e
[4] How to install LibreOffice 7.4 on Linux Mint, Ubuntu, MX Linux, Debian… https://libre-software.net/linux/ how-to-install-libreoffice-on-ubuntu-linux-mint/
[5] convert-document https://github.com/occrp-attic/convert-document/blob/master/Dockerfile
[6] Converting Office Docs to PDF with AWS Lambda https://gist.github.com/madhavpalshikar/96e72889c534443caefd89000b2e69b5文章来源地址https://www.toymoban.com/news/detail-405939.html

到了这里,关于aws lambda 转换 office/txt/html 为 pdf的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AWS中Lambda集成SNS

    在Lambda中,创建名为AWSSNSDemo的函数 创建名为:SNSTopicTest的主题        发布消息后,在DynamoDB中, 如果检测到发布的消息数据,则说明集成成功。  

    2024年02月13日
    浏览(49)
  • 【SERVERLESS】AWS Lambda上实操

    通过Serverless的发展历程及带给我们的挑战,引出我们改如何改变思路,化繁为简,趋利避害,更好的利用其优势,来释放企业效能,为创造带来无限可能。 无服务器计算近年来与云原生计算都是在互联网背景下产生,其顾名思义是指开发者在构建和运行应用时无需管理服务

    2024年04月15日
    浏览(42)
  • 使用AWS Lambda函数的最佳实践!

    主题 函数代码 函数配置 指标和警报 处理流 安全最佳实践 有关 Lambda 应用程序最佳实践的更多信息,请参阅 Serverless Land 中的 Application design。 从核心逻辑中分离 Lambda 处理程序。这样您可以创建更容易进行单元测试的函数。在 Node.js 中可能如下所示: 利用执行环境重用来提

    2024年02月07日
    浏览(49)
  • 如何使用 AWS Lambda 运行 selenium

    借助 AWS Lambda 运行 selenium 来爬取网络数据。 与手动从网站收集数据相比,爬虫可以为我们节省很多时间,对于爬虫的每次请求而言,这相当于 AWS Lambda 的每次函数的运行。 AWS Lambda 是一种将脚本部署到云的简单且价格低廉的服务,如果我们要实现在 AWS Lambda 上运行 selenium 实

    2024年02月03日
    浏览(41)
  • 【LaTex】LaTex 的使用与写作(快速入门,尾附:简洁的论文模板代码)

    在编辑框第一行,输入以下内容来设置文件类型: 一般也可以在 documentclass 处设置基本参数。(如默认字体大小为12pt,纸张大小为A4,单面打印。) 则,第一行内容需改为: 文件的正文部分需要放入 document 环境中,在 document 环境外的部分不会出现在文件中。 加载(amsma

    2024年02月08日
    浏览(50)
  • AWS Lambda - 同步/异步调用,事件源,目标

    Hello大家好,我们今天继续讨论AWS Lambda的内容。 Lambda函数有三种调用方式。 第一种方式是同步调用。 当我们使用API、CLI以及API网关等调用函数时,就是同步调用。 当您同步调用函数时,Lambda会运行该函数并等待响应,当函数完成时将结果同步返回,所以您的代码将等待这个

    2024年02月10日
    浏览(51)
  • AWS中lambda与DynamoDB的集成

    前言:我在整个集成过程中,存在最大的问题有两个, 1. 没有考虑到lambda函数的权限,即对DynamoDB或者其他如Kinesis的权限授权,导致无法写入或者读取。 2.最初使用了异步方式调用,导致无法写数据到DynamoDB,把代码改成同步调用即可  创建好之后保存,然后进行部署(deplo

    2024年02月13日
    浏览(74)
  • 基于 AWS Lambda 的 SaaS 应用教程

    在本教程中,我们将探讨如何使用 AWS Lambda 构建一个简单的 Software as a Service (SaaS) 应用程序。我们的示例应用将是一个用于短链接生成的服务。我们将使用 Node.js 来编写 Lambda 函数,并使用其他 AWS 服务来管理和扩展我们的应用。 步骤 1: 准备工作 确保你已经拥有 AWS 账户,并

    2024年01月21日
    浏览(42)
  • AWS Lambda Golang HelloWorld 快速入门

    以下测试基于 WSL2 Ubuntu 22.04 环境 来到 Lambda 控制台, 创建新的函数, Runtime 选择 Go 1.x Code Upload from .zip file 选择前面编译并打包的 main.zip 文件上传. 随后创建新的 Test 匹配 Lambda 处理的 Event 数据格式: Test, 欧耶~报错了! 返回 Code 标签页, 看到默认的 Handler 设置的是 hello , 这和我们

    2024年02月07日
    浏览(60)
  • aws对象存储s3基于lambda实现图片裁剪

    存储桶名称:wmmzz 1.存储桶策略设置 2. 创建lambda函数 点击跳转到IAM控制台,创建自定义角色,选择服务类型lambda,创建策略 输入策略下一步取名resize-policy,回到创建角色页面,搜索刚才创建的策略选中,再搜索AmazonS3FullAccess选中 点击下一步,输入角色名称resize-role,点击“创建角色

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包