pp.server - 生产 & 发布服务器
项目描述
pp.server是一个基于FastAPI的服务器实现,并实现了生产 & 发布平台的服务器端功能。它被称为生产 & 发布服务器。
生产 & 发布服务器提供了使用以下外部PDF转换器将HTML/XML + 资源转换为PDF的Web服务API
PrinceXML (www.princexml.com, 商业)
PDFreactor (www.realobjects.com, 商业)
Speedata Publisher (www.speedata.de, 开源,实验性支持)
WKHTMLTOPDF (www.wkhtmltopdf.org, 开源,实验性支持)
Vivliostyle Formatter (www.vivliostyle.com, 商业,实验性支持)
VersaType Formatter (www.trim-marks.com, 商业,实验性支持)
Antennahouse 7 (www.antennahouse.com, 商业)
Weasyprint (免费,不受支持)
Typeset.sh (www.typeset.sh, 商业)
PagedJS (www.pagedjs.org, 免费)
此外,还提供了使用Calibre (www.calibre.org, 开源)生成EPUB文档的实验性支持。
该Web服务仅提供同步操作。
要求
Python 3.8或更高版本,不支持Python 2.x
外部二进制文件
PrinceXML: prince,
PDFreactor: pdfreactor.py,
Speedata Publisher: sp
Calibre: ebook-convert
WKHTMLTOPDF: wkhtmltopdf
Vivliostyle: vivliostyle-formatter
VersaType : versatype-converter
Weasyprint: weasyprint
Antennahouse: run.sh
Typeset.sh: typeset.sh.phar
PageJS: pagedjs-cli
必须位于 $PATH 中。请参阅各产品安装文档。
安装
使用以下命令创建 Python 3 虚拟环境
python3 -m venv pp.server
安装 Produce & Publish 服务器
bin/pip install pp.server
运行 Produce & Publish 服务器
bin/uvicorn pp.server.server:app
或通过 gunicorn 控制
bin/gunicorn pp.server.server:app -w 2 -k uvicorn.workers.UvicornWorker
若要在进程管理器 circus 下运行 Produce & Publisher 服务器,请使用以下命令生成 circusd.ini 文件
bin/pp-server-templates
并在后台启动
bin/circusd circusd.ini --daemon
转换器要求
对于 PDF 转换,相关的转换二进制文件或脚本必须包含在您的服务器 $PATH 中。
prince 用于 PrinceXML
pdfreactor 用于 PDFreactor 8 或更高版本
wkhtmltopdf 用于 WKHTMLToPDF
ebook-convert 用于 Calibre
sp 用于 Speedata Publisher
vivliostyle 用于 Vivliostyle 格式化器
versatype 用于 Versatype 转换器
weasyprint 用于 Weasyprint
antennahouse 用于 Antennahouse
pagedjs 用于 PagedJS
typesetsh 用于 Typeset.sh
API 文档
所有 API 方法都可通过遵循 API URL 终端的 REST api 获取
http://host:port/<command>
默认服务器配置下,这表示为
https://#:8000/convert
REST API 概览
pp.server 基于 FastAPI 框架用 Python 实现。您可以直接通过
访问 REST API 文档
pp.server 默认使用安装目录下的 var 文件夹作为转换数据的临时文件夹。如果需要不同的缓存目录,请设置环境变量 PP_SPOOL_DIRECTORY。
如果您在 Docker 下运行 PDFreactor 10 或更高版本,则必须设置环境变量 PP_PDFREACTOR_DOCKER=1 以生成适当的 file:///docs/… URI 用于 pdfreactor.py。
PDF 转换 API
请记住,所有转换器都使用 HTML 或 XML 作为转换的输入。所有输入数据(HTML/XML、图片、样式表、字体等)必须存储在 ZIP 归档中。内容的文件名 必须 为 index.html。
您需要将数据 POST 到
以下参数
data - ZIP 归档(作为 base64 编码字符串)
converter - 一个字符串,用于确定要使用的 PDF 转换器(可以是 princexml、pdfreactor、phantomjs、vivliostyle、versatype 或 calibre 以生成 EPUB 内容)
cmd_options - 可选字符串,作为给定的外部转换器调用的命令行参数添加
返回
API 以 JSON 结构返回结果,其中包含以下键值对
状态 - 要么 OK 或 ERROR
数据 - 生成的 PDF 文件,以 base64 编码的字节字符串形式编码
输出 - 转换后的脚本(转换器运行的输出)
内省 API 方法
生产 & 发布服务器版本
返回
{“version”: “3.0.0”, “module”: “pp.server”}
已安装/可用的转换器
返回
{“pdfreactor”: true, “phantomjs”: false, “calibre”: true, “prince”: true}
已安装转换器的版本
返回
{‘prince’: ‘Version x.y’, ‘pdfreactor: ‘Version a.b.c’, …}
其他 API 方法
清理队列目录(删除超过一天的转换数据)
返回
{“directories_removed”: 22}
源代码
错误追踪器
支持
目前,生产 & 发布服务器的支持仅限于项目层面。
许可证
pp.server 根据 GNU 公共许可证 V2 (GPL 2) 发布。
联系
3.3.0 (2023/02/07)
现代化的代码库
现在需要 Python 3.9 或更高版本
未添加新功能
3.2.0 (2020/05/12)
添加了自检端点
3.1.0 (2020/03/20)
各种小的修复
available_converters() 现在以并行方式执行 -> 加速
3.0.0 (2020/02/14)
完全重写,使用 FastAPI 作为 REST 后端
更好的日志记录
更改了 API 名称
取消了对 PhantomJS 和 Unoconv 的支持
更好的错误处理
简化了进一步转换器支持的配置
2.1.0 (2020/08/12)
添加了对 pagedjs-cli 和 typeset.sh 的支持
2.0.4 (2019/02/11)
与 var 文件夹 gunicorn.log 相关的安装问题
添加了可选的 PP_PDFREACTOR_DOCKER 环境支持
2.0.3 (2019/02/11)
与 var 文件夹 gunicorn.log 相关的安装问题
添加了可选的 PP_SPOOL_DIRECTORY 环境支持
2.0.0 (2018/07/14)
主要清理
删除了异步功能
从 waitress 切换到 gunicorn
从 subprocess 切换到 easyprocess
网页显示已安装的转换器和它们的版本
添加了对 VersaType 转换器的支持
1.0.8 (2017/10/23)
内部发布
1.0.7 (2017/08/17)
修复了清理代码中的一个非常旧的错误
1.0.6 (2017/08/08)
在启动时显示可用的转换器
1.0.5 (2017/04/06)
添加了对 WeasyPrint 的支持
1.0.3 (2017/02/13)
使用显式选项 -o 调用 princexml(Prince 11 兼容性)
1.0.0 (2017/01/08)
第一个官方版本
需要 Python 3.5 或更高版本
0.7.13 (2016/08/30)
添加了 circus 依赖项,以便提供开箱即用的守护进程支持
0.7.12 (2016/08/29)
修复了 PDFreactor 8 的问题
0.7.11 (2016/06/01)
更新到 Pyramid 1.7
0.7.7 (2016/01/24)
更新了对最新 Vivliostyle 格式化器的支持
添加了对 Antennahouse 格式化器的支持
0.7.6 (2015/11/30)
支持 PDFreactor 8
0.7.5 (2015/11/18)
修复了创建目录时的竞争条件
0.7.4 (2015/11/14)
支持嵌套上传的 ZIP 文件
0.7.3 (2015/11/14)
支持 Vivliostyle 格式化器
0.7.2 (2015/04/20)
合并了 https://bitbucket.org/ajung/pp.server/pull-request/1/(对 wkhtmltopdf 的不正确检查)
合并了 https://bitbucket.org/ajung/pp.server/pull-request/2/(异步操作的修复)
0.7.1 (2015/03/13)
runcmd() 中的 Unicode 修复
0.7.0 (2015/02/15)
0.6.x 完全错误地打包
更改了仓库结构
0.6.1 (2015/02/02)
将 /api/converter-versions 添加到 webservice API
0.6.0 (2015/01/26)
取消了对 Python 2.X 的支持,现在 Python 3.3 或更高版本是强制要求
0.5.5 (2015/01/23)
UTF8 处理修复
0.5.3 (2014/11/23)
支持 WKHTMLTOPDF
0.5.2 (2014/11/19)
支持 Speedata Publisher
0.5.1 (2014/10/12)
改进了错误处理
0.5.0 (2014/10/12)
官方 Python 3.3/3.4 支持
0.4.7 (25.09.2014)
修复了文档中的错误
0.4.6 (22.08.2014)
删除了 PDFreactor –addlog 选项
0.4.5 (22.08.2014)
添加了补充的命令行选项到 pdfreactor 命令行调用
0.4.4 (24.01.2014)
修复了少量错别字
0.4.3 (20.01.2014)
实现了一天后自动清理队列的功能
0.4.2 (18.01.2014)
修复了与虚拟主机相关的index.pt中的URL问题
0.4.1 (13.01.2014)
在index.pt上显示Python版本和转换器
添加了授权支持
0.4.0 (17.10.2013)
支持Python 3.3
支持Pyramid 1.5
0.3.5 (05.10.2013)
将“cmd_options”添加到pdf和unoconv API方法中,以便为外部转换器指定任意命令行参数
0.3.4 (05.10.2013)
添加了“cleanup”API
0.3.3 (05.10.2013)
添加了“version”和“converter”API方法
0.3.2 (04.10.2013)
添加了对使用Calibre进行EPUB转换的支持
0.3.1 (03.10.2013)
更新了文档
0.3.0 (14.07.2013)
unoconv转换现在返回ZIP存档(例如,HTML文件加提取的图像)
0.2.7 (06.07.2013)
添加了对Phantom.js转换器的支持
0.2.5 (05.07.2013)
更好地检测prince和pdfreactor二进制文件
0.2.2 (05.07.2013)
更新了文档
进行了少量清理
0.2.1 (04.07.2013)
重新添加了轮询API
0.2.0 (03.07.2013)
将XML-RPC api转换为REST api
0.1.9 (01.07.2013)
在pyramid_xmlrpc.parse_xmlrpc_request中monkeypatch,以绕过其愚蠢的DOS请求体检查
0.1.7 (29.06.2013)
添加了更多测试
修复了问题
更新了文档
0.1.5 (27.06.2013)
测试同步操作
修复了问题
0.1.0 (24.06.2013)
初始版本