Confluence是一个专业的知识管理与协同软件,我用来记录、管理自己的笔记。同时Confluence还是一个非常复杂的系统,复杂就容易出问题。为了在极端情况下(例如数据库奔溃)还能打开自己的笔记,开发了一个脚本,定时导出Confluence空间为PDF文件。
¶资料查找
在开发之前,一定要找找是否有类似的工具,能达到相同的目的。
¶confluence
confluence自身提供了导出为PDF的功能,并且还提供了python api,可惜只能导出单个页面为PDF文件,不支持导出整个空间。
如果对空间有管理员权限,进入空间管理->内容工具->导出,可以选择导出为HTML、XML或PDF。这个满足需求,可惜没有提供API。在寻找资料时,有帖子说老版本提供了API,但是新版本不支持了。
¶Confluence Command Line Interface
寻找资料时发现了一个非常牛逼的工具,Confluence Command Line Interface,支持非常多的功能,当然也支持导出整个空间为PDF。但是需要配合插件使用,插件需要收费。由于没有找到**插件的方法,所以放弃。
¶方法1:导出所有页面然后合并
考虑到confluence提供了导出单个页面为PDF的API,所以导出所有的页面,然后合并为一个PDF文件,也不是什么难事。脚本的主要思路如下,源码请移步github。
- get_all_spaces() 获取所有空间的key
- get_home_page_of_space() 获取指定空间的homepage id
- get_page_child_by_type() 获取指定页面的一级子页面
- 递归获取页面转化为BytesIO对象,追加到PdfFileMerger对象
- PdfFileMerger写入到文件,使用
space name作为文件名。
需要安装atlassian api和PyPDF2。
1 | pip install atlassian-python-api |
但是这种方法有以下两个缺点:
- PDF的大纲没有层次,父页面的大纲和子页面的大纲处于同一级。
- 在PDF点击目录宏的链接,会跳转到网页,而不是PDF对应的页面。
¶方法2:使用空间管理工具导出
Confluence的空间管理工具可以很好的导出PDF,但是没有API。但是可以利用无头浏览器,模拟人点击网页,达到导出整个空间为pdf的目的。源码请异步github。
需要安装atlassian api、selenium和Chrome webdriver。
1 | pip install atlassian-python-api |
¶自定义PDF样式
confluence支持自定义PDF的样式,包含页眉、页脚、字体、字号等等内容。更加详细的内容可以参考官方文档。
¶设置PDF字体大小
1 | .wiki-content h1 |
¶参考
- https://stackoverflow.com/questions/38770934/how-to-export-to-pdf-a-confluence-page-within-a-script
- https://www.cnblogs.com/xioawu-blog/p/12017973.html
- https://atlassian-python-api.readthedocs.io/
- https://pythonhosted.org/PyPDF2/
- https://confluence.atlassian.com/conf713/customize-exports-to-pdf-1077913092.html
- https://confluence.atlassian.com/confkb/how-do-i-change-the-font-sizes-in-pdf-export-833938097.html