在dotnet下处理过Office文档的相信对Aspose都不陌生,Aspose下面的三大组件:Aspose.Cells、Aspose.Slides、Aspose.Words可以让我们很方便的操作Office文档,或者将Office导出为PDF。
最近在netcore2.1下使用Aspose操作Office,开发人员在Windows下进行开发时没有任何问题,但将程序部署到Docker中时出现错误,本文主要介绍下解决方法。
环境
- netcore:2.1
- docker:18.03-ce
- CentOS:7.5
- Aspose:18.6
问题1
程序部署到Docker中,执行到下面代码的时候就会报错
Aspose.Cells.PdfSaveOptions xlsSaveOption = new Aspose.Cells.PdfSaveOptions();
xlsSaveOption.SecurityOptions = new Aspose.Cells.Rendering.PdfSecurity.PdfSecurityOptions();
xlsSaveOption.SecurityOptions.ExtractContentPermission = false;
xlsSaveOption.SecurityOptions.PrintPermission = false;
xlsSaveOption.AllColumnsInOnePagePerSheet = true;
wb.Save(pdf, xlsSaveOption); //出错行
错误信息:
The type initializer for ‘Gdip’ threw an exception
解决方法:
1、下载libSkiaSharp.so文件放在程序的根目录;
2、修改Dockerfile文件如下:
FROM microsoft/dotnet:2.1-aspnetcore-runtime
RUN apt-get update;apt-get install libfontconfig1 -y
RUN apt-get install libgdiplus -y
RUN ln -s /usr/lib/libgdiplus.so /lib/x86_64-linux-gnu/libgdiplus.so
RUN apt-get install -y libc6-dev
COPY . /app
WORKDIR /app
EXPOSE 80/tcp
ENTRYPOINT ["dotnet", "WebAPI.dll"]
问题2
将Word导出为PDF后,中文文字不能正常显示,显示为乱码。
解决方法:
此问题的原因是因为Docker容器中没有Windows系统的字体,只需要将Windows系统中的字体文件拷贝到容器的相应目录即可解决。

参考
https://github.com/JanKallman/EPPlus/issues/83 http://jonesie.kiwi/2018/05/16/skiasharp-on-a-linux-container/
评论
评论组件按需加载,不影响文章阅读速度。