将Excel文件转为PDF的几种方案
最近项目中遇到了生成PDF的问题,我们选用了先生成Excel, 再将Excel文件转换成PDF的方式。使用这种方式的好处是可以让客户更方便的制作模板,这在我们的业务场景中很重要。
为了跨平台,我们选用的Excel操作库是LibXL , 需要付费使用。
那么如何将Excel文件转换成PDF就成了我们的子问题。
Windows
如果客户服务器 是Windows, 我们可以直接调用Office 接口来实现。
这样做的前提是需要在使用的电脑安装好Office软件。
下面是一段C#代码示例:
1 | Microsoft.Office.Interop.Excel.Application excelApplication; |
更详细的代码在这里。
在Windows 服务中运行可能遇到的问题
在我们的实际情况中,需要在Windows服务中运行。
经测试,在Windows Server 2016 / Windows 10中会出现调用COM组件的权限问题。
解决方案:
服务以特定账户登录,如下图:
且保证有以下系统目录
C:\Windows\System32\config\systemprofile\Desktop
C:\Windows\SysWOW64\config\systemprofile\Desktop
Linux
使用 GOTENBERG
GOTENBERG
是 一个 开源项目,当前开源协议是 MIT. 它支持将 HTML, Markdown, Office文件转换成 PDF。
下面的测试以 CentOS 7 环境为例。
先拉取docker镜像。
1 | $ docker pull thecodingmachine/gotenberg |
再run一个容器。
1 | $ docker run --name excel2pdf --rm -p 9182:3000 -d thecodingmachine/gotenberg |
一个示例的Python代码:
1 | def excel2pdf(xlsx_path, pdf_path): |
使用 Wine
Wine是在x86、x86-64容许类Unix操作系统在X Window System运行Microsoft Windows程序的软件。
此方案未测试。此处不详述。