pp.server - 生产和发布服务器
项目描述
pp.server是一个基于 FastAPI 的服务器实现,实现了 Produce & Publish 平台的服务器端功能。它被称为生产和发布服务器。
Produce & Publish Server 提供了 Web 服务 API,用于使用以下外部 PDF 转换器之一将 HTML/XML + 资产转换为 PDF:
PrinceXML(www.princexml.com,商业)
PDFreactor(www.realobjects.com,商业)
Speedata Publisher(www.speedata.de,开源,实验支持)
WKHTMLTOPDF(www.wkhtmltopdf.org,开源,实验支持)
Vivliostyle Formatter(www.vivliostyle.com,商业,实验支持)
VersaType 格式化程序(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
外部二进制文件
王子XML:王子,
PDFreactor: pdfreactor.py ,
Speedata 发布者:sp
口径:电子书转换
WKHTMLTOPDF: wkhtmltopdf
Vivliostyle: vivliostyle-formatter
VersaType :通用型转换器
Weasyprint: weasyprint
天线室: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
运行生产和发布服务器:
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中。
PrinceXML 的王子
pdfreactor用于 PDFreactor 8 或更高版本
用于WKHTMLToPDF的 wkhtmltopdf
Calibre的电子书转换
用于 Speedata Publisher 的sp
Vivliostyle格式化程序的 vivliostyle
Versatype用于 Versatype 转换器
用于Weasyprint的 weasyprint
天线室的天线室
用于PagedJS的 pagedjs
用于Typeset.sh的 typesetsh
API 文档
所有 API 方法都可通过 API URL 端点后的 REST api 获得:
http://host:port/<command>
使用默认服务器配置,这将转换为:
http://localhost:8000/convert
REST API 内省
pp.server基于 Python 的 FastAPI 框架实现。您可以通过以下方式直接访问 REST API 文档
环境变量
pp.server 默认使用安装目录的var文件夹作为转换数据的临时文件夹。 如果您需要不同的假脱机目录,请设置环境变量PP_SPOOL_DIRECTORY 。
如果您在 Docker 下运行 PDFreactor 10 或更高版本,则必须设置环境变量PP_PDFREACTOR_DOCKER=1以便为pdfreactor.py生成正确的file:///docs/... URI 。
PDF 转换 API
请记住,所有转换器都使用 HTML 或 XML 作为转换的输入。所有输入数据(HTML/XML、图像、样式表、字体等)都必须存储在 ZIP 存档中。内容的文件名必须命名为index.html。
您必须将数据发布到
具有以下参数:
数据- ZIP 存档(作为 base64 编码的字符串)
转换器- 一个字符串,用于确定要使用的 PDF 转换器(princexml、pdfreactor、phantomjs、vivliostyle、versatype或用于生成 EPUB 内容的calibre )
cmd_options - 添加到外部转换器调用的可选命令行参数字符串
回报:
API 将其结果作为 JSON 结构返回,其中包含以下键值对:
状态- OK或ERROR
data - 生成的 PDF 文件编码为 base64 编码的字节字符串
output - 转换脚本(转换器运行的输出)
自省 API 方法
制作和发布服务器版本:
返回:
{“版本”:“3.0.0”,“模块”:“pp.server”}
已安装/可用的转换器:
返回:
{“pdfreactor”:真,“phantomjs”:假,“口径”:真,“王子”:真}
已安装转换器的版本:
返回:
{'prince': '版本 x.y', 'pdfreactor: '版本 abc', ...}
其他 API 方法
清理队列目录(删除超过 1 天的转化数据)
返回:
{“directories_removed”:22}
源代码
错误跟踪器
支持
目前仅在项目基础上提供对 Produce & Publish Server 的支持。
执照
pp.server在 GNU Public License V2 (GPL 2) 下发布。
接触
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)
大扫除
删除了异步功能
从女服务员变成了独角兽
从 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)
更新到金字塔 1.7
0.7.7 (2016/01/24)
更新了对最新 Vivliostyle 格式化程序的支持
添加了对 Antennahouse Formatter 的支持
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 支持
金字塔 1.5 支持
0.3.5 (05.10.2013)
在 pdf 和 unoconv API 方法中添加了“cmd_options”,用于为外部转换器指定任意命令行参数
0.3.4 (05.10.2013)
添加了“清理”API
0.3.3 (05.10.2013)
添加了“版本”和“转换器”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)
monkeypatch pyramid_xmlrpc.parse_xmlrpc_request 以绕过其愚蠢的 DOS 请求正文检查
0.1.7 (29.06.2013)
更多测试
修复
更新的文档
0.1.5 (27.06.2013)
测试同步操作
修复
0.1.0 (24.06.2013)
初始发行