在 alpine 中使用 NPOI

作者: 天天向上卡索 | 来源:发表于2019-08-02 13:30 被阅读1次

在 alpine 中使用 NPOI

Intro

在 .net 中常使用 NPOI 来做 Excel 的导入导出,NPOI 从 2.4.0 版本开始支持 .netstandard2.0,对于.net 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

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

libgdiplus for alpine

目前仍处于测试阶段,还未正式发布,不过已经可以使用,可以通过下面的命令来在 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

相关文章

  • 在 alpine 中使用 NPOI

    在 alpine 中使用 NPOI Intro 在 .net 中常使用 NPOI 来做 Excel 的导入导出,N...

  • EPPlus 和NPOI简单的Demo对比

    在之前的文章中简单的使用了下NPOI,NPOI的基本使用, 相对来说,并没有EPPLus好用。首先, EPPlus...

  • MVC使用File中导出文件

    之前写过使用NPOI做导出功能:asp.net 使用NPOI对数据导出excel 在MVC中如果想导出文件方法更简...

  • NPOI 生成Excel

    记录使用NPOI生成Excel的通用方法 NPOI安装,使用Nuget: 使用泛型方法,反射两种方式实现生成Exc...

  • .Net Core+NPOI快速导入导出Excel

    Excel导入导出在开发中是非常常见的,对Excel操作,NPOI使用的是最常用的,但单单用NPOI,要写得代码还...

  • NPOI的基本使用

    在NPOI初识中简了解了下NPOI的简介和优势,接下来看一下如果下载使用。新建一个小的Demo,如下: 第一步,新...

  • alpine构建django镜像

    基本镜像 alpine 使用 alpine 为基础镜像构建 requirements.txt 内容 使用pip安装...

  • <Golang Tips> Issue总结

    golang应用使用alpine打包Issue总结: Alpine linux doesn't have nssw...

  • NPOI使用手册1

    转自链接 目录 1.认识NPOI 2.使用NPOI生成xls文件 2.1创建基本内容 2.1.1创建Workboo...

  • Docker(alpine中文乱码问题)

    一、前言 在使用了centeros作为系统后,发现alpine体积确实小一点,所以就上手alpine作为系统。下载...

网友评论

    本文标题:在 alpine 中使用 NPOI

    本文链接:https://www.haomeiwen.com/subject/oeporctx.html