在 alpine 中使用 NPOI

Intro

在 .net 中常使用 NPOI 来做 Excel 的导入导出,NPOI 从 2.4.0 版本开始支持 .netstandard2.0,在 dotnet core 应用也可以用 DotNetCore.NPOI。

对于 .NET Core 应用来说,如果没有特殊的需求,alpine 是最适合容器化的基础 docker 镜像,因为镜像大小比较小,无论是对于打包还是下载都很快。

在我的一个 asp.net core 应用中有一个使用 NPOI 导出 Excel 的功能,我的应用的通过 docker 部署在 k8s 上的,而 docker 镜像是基于 alpine 的,使用到了 NPOI 导出一个 excel

NPOI 的跨平台实现依赖于 System.Drawing.CommonSystem.Drawing.Common 在 Linux 上的实现依赖 libgdiplus,需要安装 libgdiplus 才能正常工作,如果没有 libgdiplus 会遇到类似下面这样的异常

在 Linux 上使用 System.Drawing.Common

  • 在 Ubuntu 上安装 libgdiplus,参考 https://www.hanselman.com/blog/HowDoYouUseSystemDrawingInNETCore.aspx :

sudo apt-get install libgdiplus libc6-dev
  • 在 alpine 上安装 libgdiplus

.netcore 打包 docker 镜像的时候我一般选择 alpine 为基本的镜像,因为镜像本身比较小,下载打包都会很快很方便,于是就要找一下是不是可以在 alpine 上安装 libgdiplus,如果不行的话就只好换镜像了

在 alpine 的 packages 网站上找到了 libgdiplus, https://pkgs.alpinelinux.org/packages?name=libgdiplus&branch=edge

目前仍处于测试阶段,还未正式发布,不过已经可以使用,可以通过下面的命令来在 alpine 上安装

apk add libgdiplus --update-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ --allow-untrusted

More

安装了 libgdiplus 之后,重新部署再导出测试一下,发现还是不行,现在爆的异常如下:

根据异常提示找到异常的源码 https://github.com/tonyqus/npoi/blob/master/main/SS/Util/SheetUtil.cs#L445

看异常提示以及代码应该是没有字体导致的异常,然后就在安装 libgdiplus 之后再安装一下字体,随便找了一个字体安装了,安装的是 terminus-font,装了字体之后再测试,就可以正常导出了~

使用的 Dockerfile ,完整 Dockerfile 见:https://github.com/WeihanLi/ActivityReservation/blob/dev/Dockerfile

FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine
RUN apk add libgdiplus --update-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ --allow-untrusted && \  apk add terminus-font
# ...

Reference

  • https://www.hanselman.com/blog/HowDoYouUseSystemDrawingInNETCore.aspx

  • https://github.com/tonyqus/npoi/wiki/How-to-use-NPOI-on-Linux

  • https://pkgs.alpinelinux.org/packages?name=libgdiplus&branch=edge

  • https://github.com/tonyqus/npoi/blob/master/main/SS/Util/SheetUtil.cs

在 alpine 中使用 NPOI相关推荐

  1. Winform中通过NPOI导出Excel时通过ICellStyle和IDataFormat格式化日期显示格式

    场景 Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载: https://blog.csdn.net/B ...

  2. Winforn中通过NPOI导出Excel时通过XSSFClientAnchor和XSSFPicture添加图片

    场景 Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载: https://blog.csdn.net/B ...

  3. 根据镜像安装oracle插件,docker镜像alpine中安装oracle客户端

    1.背景 有项目需使用python连接oracle数据库,然后查询一些数据进行分析.在安装oracle客户端驱动过程中遇到了一些问题,在此记录下来分享读者. 一点限制: oracle数据库与本应用程序 ...

  4. alpine 编译c语言,Docker alpine中编译和测试Go RocketMQ Client

    为什么要做本次测试 rocketmq的go-client分为两种: native 优点 纯go实现 缺点 缺少功能 稳定性未达生产环境要求 API接口不稳定,随时可能修改 cgo 优点 完善的功能 稳 ...

  5. linux alpine 中telnet转移至busybox-extras

    apk add busybox-extras Alpine镜像中的telnet在3.7版本后被转移至busybox-extras包中,需要使用apk单独安装. 现象 Alpine版本为3.8, 不再有 ...

  6. Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载

    场景 HSSFworkbook,XSSFworkbook,SXSSFworkbook区别 HSSFWorkbook: 是操作Excel2003以前(包括2003)的版本,扩展名是.xls:导出exce ...

  7. Winform中使用NPOI导出Excel时XSSFWorkbook wb = new XSSFWorkbook()报错

    场景 在使用NPOI导出xlsx格式的Excel时提示: NPOI.POIXMLException类型的未经处理的异常在NPOI.OOXML.dll中发生. 注: 博客主页: https://blog ...

  8. Winform中使用NPOI实现Excel导入并赋值给DataTable

    场景 首先打开一个excel文件,然后获取其路径,获取第一行作为DataTable的标题栏. 然后从第二行到最后一行作为显示的数据. 参考Excel的导出 https://blog.csdn.net/ ...

  9. Winform中使用NPOI实现导出Excel并文件另存为

    场景 POI是一套用Java写成的Excel导入导出的库. NPOI就是POI的.NET版本. NPOI官网 https://archive.codeplex.com/?p=npoi NPOI教程 h ...

最新文章

  1. sorl java 建索引_solr 的客户端调用solrj 建索引+分页查询
  2. Fiddler之弱网测试(Web)
  3. vsscode beego 没有提示_轻松搭建基于 Serverless 的 Go 应用(Gin、Beego 举例)
  4. 如何用Excel统计出各科指定分数段的人数?(亲测)
  5. flex 解析json文件_使用 Python 处理 JSON 格式的数据 | Linux 中国
  6. Java面试通关要点汇总集答案(七)——equals 与 == 的区别 List 和 Set 区别
  7. python字符串常用函数-大小写,删除空格,字符串切片
  8. 夏天快到了,教你怎样干掉讨厌的蚊子『转』
  9. 小型金融知识图谱构流程示范
  10. 系统优化设计方案3.20周一例会
  11. matlab中值滤波实现
  12. 如何合并apk和odex文件
  13. SQL Server 2000/2005/2008 系列产品下载地址
  14. 最新Chrome插件开发 api 解析
  15. mysql生成数据字典
  16. The OCD Brain: how animal research helps us understand a devastating condition
  17. 【新能源】新能源之锂电池产业链梳理
  18. python开发PC端桌面应用
  19. 假设一个公司的医疗保健数据库有如下 3 个关系: 职工(职工号,姓名,性别,职务,家庭地址,部门编号) 部门(部门编号,部门名称,办公地址,电话) 保健(保健卡编号,职工号,检查身体日期,健
  20. cleanmymac苹果电脑必备mac系统垃圾清理工具分享

热门文章

  1. minecraft服务器_如何使用Minecraft领域设置简单的无压力Minecraft服务器
  2. Asia Yokohama Regional Contest 2018 G题 What Goes Up Must Come Down(树状数组求逆序对)
  3. (原創) 07/28/1982 少女A (中森明菜)
  4. php异常处理的深入
  5. Linux本地yum源配置以及使用yum源安装gcc编译环境
  6. 记一次TCP连接异常故障解决
  7. VS2010下的多线程窗口
  8. 忍着疼痛奔跑,带着泪光微笑!
  9. Bootstrap在线编辑器简单分享
  10. hdu 1879 继续畅通工程 (最小生成树)