使用Select.HtmlToPdf.NetCore

时间:2018-08-29 05:19:14

标签: docker .net-core

我正在使用Select.HtmlToPdf.NetCore(18.3.0)在Dotnetcore 2.1中将HTML转换为pdf。它可以在本地环境中完美运行,但是当与Docker托管时,会抛出错误消息,

  

{“ fileName”:“ System.TypeInitializationException:类型初始值设定项   因为“吉普”引发了异常。 ---> System.DllNotFoundException:   无法加载共享库'libdl'或其依赖项之一。在   为了帮助诊断加载问题,请考虑设置LD_DEBUG   环境变量:liblibdl:无法打开共享对象文件:否   这样的文件或目录\ n位于Interop.Libdl.dlopen(String fileName,   Int32标志)\ n位于   System.Drawing.SafeNativeMethods.Gdip.LoadNativeLibrary()\ n在   System.Drawing.SafeNativeMethods.Gdip..cctor()\ n-内部结束   异常堆栈跟踪--- \ n在   System.Drawing.SafeNativeMethods.Gdip.GdipNewPrivateFontCollection(IntPtr&   fontCollection)\ n在SelectPdf.Lib。ᡜ.. ctor()\ n在   SelectPdf.Lib。៞..ctor()处的SelectPdf.Lib。៞..ctor()\ n(ᡏA_0,᠝A_1)\ n
  在SelectPdf.HtmlToPdf。ᜁ(字符串A_0,字符串A_1,字符串A_2,字符串   A_3,布尔值A_4)\ n在SelectPdf.HtmlToPdf.ConvertHtmlString(String   htmlString)

我尝试通过在Dockerfile中添加这些行集来进行尝试,但是仍然存在相同的错误。

FROM microsoft / dotnet:2.1-aspnetcore-runtime AS base
运行apt-get更新
运行apt-get install -y apt-utils
运行apt-get install -y libgdiplus
运行ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
WORKDIR / app
曝光80

4 个答案:

答案 0 :(得分:4)

这对我有用。 我正在使用System.Drawing.Common 4.7.0运行Debian服务器

RUN apt-get update \
&& apt-get install -y --allow-unauthenticated \
    libc6-dev \
    libgdiplus \
    libx11-dev \
 && rm -rf /var/lib/apt/lists/*

答案 1 :(得分:1)

使用iTextSharp 5.5.13.1我也面临着同样的问题,而我解决的方法是在Dockerfile中结合@Frederik Carlier的解决方案:

RUN apt-get update && apt-get -y install libxml2 libgdiplus libc6-dev

在那之后,我重新启动了Rancher Container和Rancher User Stack,它工作正常。

(使用的运行时:FROM microsoft / dotnet:2.2-aspnetcore-runtime)

答案 2 :(得分:0)

您需要在Docker容器中安装libc6-dev。您可以通过运行以下命令来安装libc6-dev:

RUN apt-get install -y libc6-dev

让我知道怎么回事。

答案 3 :(得分:0)

我知道这是一个老问题,但是最近我遇到了这个问题,我想与我分享解决方案。
Select.HtmlToPdf.NetCore在Linux上不起作用
只是不要。如果您已经用html生成了字符串,我建议您找到此nuget: Haukcode.DinkToPdf
要查找一些教程,只需使用Google DinkToPdf 。 Haukcode刚刚更新,并且对docker更友好。
一些dockerfile的东西:
FROM microsoft/aspnetcore:2.0.0 as Base RUN apt-get update RUN apt-get install -y apt-utils RUN apt-get install -y libgdiplus RUN apt-get install -y libc6-dev RUN ln -s /usr/lib/libgdiplus.so/usr/lib/gdiplus.dll ... 我希望它可以帮助某人:)