主要运行在 Linux 环境,目前使用 libreoffice ,但是有些 Excel 表格列比较多,导出的 PDF 分页了,有没有办法控制导出的样式,比如缩放、横向导出?看了一下 libreoffice 文档好像没有。
其他的工具像 xlrd 、reportlab 都不太好用。
1
gujigujij 2023-09-12 20:56:25 +08:00
libreoffice 打开 View -> Page Break , 然后拖动蓝线设置分页位置
|
3
ohayoo 2023-09-13 12:50:21 +08:00 1
窝草,同一个世界,同一个需求,我老婆也是工作需要把一些服务器的巡检报告发给各个医院,什么从接口拉报告,筛选报告,修改文件名,邮件发送等等 python 都好弄,就这个 excel 导出为 pdf 始终没搞定,最后逼得没办法在 Windows 下用按键精灵了
|
4
MarlonFan 2023-09-13 13:17:46 +08:00 1
之前遇到过类似场景, 后来解决方案是 excel 渲染成 html, 然后 html 转 pdf
|
5
gujigujij 2023-09-13 14:33:33 +08:00 1
之前我是这么做的, 在本地设置好分页把 excel 存成模板, 服务器上操作模板, (注意本地和线上 libreoffice 版本要一致)。 @LeegoYih
|
6
Latin 2023-09-14 11:59:17 +08:00
pandas -> html -> wkhtmltopdf -> pdf
jinja2 -> html -> wkhtmltopdf -> pdf 自己先对源数据预处理 自己写 html 样式 |
7
LeegoYih OP @Latin 有很多不同格式的 Excel ,每个都要写 HTML 有点太累了,后续还有各种非标的格式,看来没有简单的方案😂
|
8
vialon17 2023-09-16 08:49:35 +08:00
可以试试 openpyxl 和 win32 ,走系统的 pdf 打印途径,
顺便可以设置正常 excel 打印的方式。 |
9
LeegoYih OP 目前使用一种很绕的方案:
1. 使用 Luckyexcel 和 Luckysheet 写了个 HTML ,主要用于导入 Excel ,通过 JS 将渲染到 Canvas 上的表格导出为图片。 2. 使用 Selenium 控制无头浏览器本地打开 HTML ,会自动吐出图片文件。 ``` # 打开本地模板页面 driver.get("file://" + os.path.abspath("templates/excel_printer/index.html")) driver.set_download_directory(os.path.abspath(image_dir)) # 上传 Excel 文件 upload_input = driver.find_element(by=By.ID, value="inputFile") upload_input.send_keys(os.path.abspath(excel_path)) ``` 3. 最后用 Python 将图片转化为 PDF 文件。 整个处理过程非常扭曲,且 Luckysheet 有很多 BUG:公式不识别、边框不显示等等。 作者去做付费版本,开源版本没人管了,还是慎用吧。 https://github.com/dream-num/Luckyexcel https://github.com/dream-num/Luckysheet |