Dotnet Core:在 Linux 上使用 PDFium 将 Pdf 转换为图像获取 DllNotFoundException
Dotnet Core: use PDFium to convert Pdf to Image on Linux get DllNotFoundException
我尝试使用 pdfium 将 pdf 转换为图像 linux。但出现此错误:
Unhandled exception. System.DllNotFoundException: Unable to load shared library 'pdfium.dll' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libpdfium.dll: cannot open shared object file: No such file or directory
at PdfiumViewer.NativeMethods.Imports.FPDF_AddRef()
at PdfiumViewer.NativeMethods.FPDF_AddRef()
at PdfiumViewer.PdfLibrary..ctor()
at PdfiumViewer.PdfLibrary.EnsureLoaded()
at PdfiumViewer.PdfFile..ctor(Stream stream, String password)
at PdfiumViewer.PdfDocument..ctor(Stream stream, String password)
at PdfiumViewer.PdfDocument.Load(Stream stream, String password)
at PdfiumViewer.PdfDocument.Load(String path, String password)
at PdfiumViewer.PdfDocument.Load(String path)
at PDFiumOnLinux.Program.Main(String[] args) in /src/Program.cs:line 10
这是我的源代码:
using PdfiumViewer;
using System.Drawing.Imaging;
namespace PDFiumOnLinux
{
class Program
{
static void Main(string[] args)
{
using (var pdfDocument = PdfDocument.Load(@"Test.pdf"))
{
var bitmapImage = pdfDocument.Render(0, 300, 300, true);
bitmapImage.Save(@"Test.jpg", ImageFormat.Jpeg);
}
}
}
}
这是csporj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="PdfiumViewer" Version="2.13.0" />
<PackageReference Include="PDFiumCore" Version="4503.0.0" />
<PackageReference Include="System.Drawing.Common" Version="5.0.2" />
</ItemGroup>
</Project>
这里是 docker-compose 文件:
version: "3.9"
services:
app:
image: mcr.microsoft.com/dotnet/sdk:3.1.409-buster
volumes:
- .:/src
working_dir: /src
entrypoint: bash -c "dotnet build PDFiumOnLinux.csproj && dotnet bin/Debug/netcoreapp3.1/PDFiumOnLinux.dll"
该程序可以 运行 使用此命令:
docker-compose run --rm app
我尝试了其他库,例如 'PDFium.LinuxV2' 或 'PDFium.Linux.x64' 而不是 'PDFiumCore',但没有做出任何改变。
我错误地认为 PdfiumCore 是 PdfiumViewer 的二进制提供程序包。但它是一个独立的包,因为它使用更新的 Pdfium 版本(这似乎是使用 pdfium 的关键点)我决定使用它。 (我还测试了 https://github.com/GowenGit/docnet,它工作正常,但它使用的是旧版本的 PDFium)
所以使用 https://github.com/Dtronix/DtronixPdf/(这是 PdfiumCore 的线程安全实现)并清理它以从中制作 PDF 到图像转换器并在 Windows 和 Linux 上测试它。
这是最终代码:https://github.com/hmdhasani/DtronixPdf/blob/master/src/DtronixPdfBenchmark/Program.cs
我尝试使用 pdfium 将 pdf 转换为图像 linux。但出现此错误:
Unhandled exception. System.DllNotFoundException: Unable to load shared library 'pdfium.dll' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libpdfium.dll: cannot open shared object file: No such file or directory
at PdfiumViewer.NativeMethods.Imports.FPDF_AddRef()
at PdfiumViewer.NativeMethods.FPDF_AddRef()
at PdfiumViewer.PdfLibrary..ctor()
at PdfiumViewer.PdfLibrary.EnsureLoaded()
at PdfiumViewer.PdfFile..ctor(Stream stream, String password)
at PdfiumViewer.PdfDocument..ctor(Stream stream, String password)
at PdfiumViewer.PdfDocument.Load(Stream stream, String password)
at PdfiumViewer.PdfDocument.Load(String path, String password)
at PdfiumViewer.PdfDocument.Load(String path)
at PDFiumOnLinux.Program.Main(String[] args) in /src/Program.cs:line 10
这是我的源代码:
using PdfiumViewer;
using System.Drawing.Imaging;
namespace PDFiumOnLinux
{
class Program
{
static void Main(string[] args)
{
using (var pdfDocument = PdfDocument.Load(@"Test.pdf"))
{
var bitmapImage = pdfDocument.Render(0, 300, 300, true);
bitmapImage.Save(@"Test.jpg", ImageFormat.Jpeg);
}
}
}
}
这是csporj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="PdfiumViewer" Version="2.13.0" />
<PackageReference Include="PDFiumCore" Version="4503.0.0" />
<PackageReference Include="System.Drawing.Common" Version="5.0.2" />
</ItemGroup>
</Project>
这里是 docker-compose 文件:
version: "3.9"
services:
app:
image: mcr.microsoft.com/dotnet/sdk:3.1.409-buster
volumes:
- .:/src
working_dir: /src
entrypoint: bash -c "dotnet build PDFiumOnLinux.csproj && dotnet bin/Debug/netcoreapp3.1/PDFiumOnLinux.dll"
该程序可以 运行 使用此命令:
docker-compose run --rm app
我尝试了其他库,例如 'PDFium.LinuxV2' 或 'PDFium.Linux.x64' 而不是 'PDFiumCore',但没有做出任何改变。
我错误地认为 PdfiumCore 是 PdfiumViewer 的二进制提供程序包。但它是一个独立的包,因为它使用更新的 Pdfium 版本(这似乎是使用 pdfium 的关键点)我决定使用它。 (我还测试了 https://github.com/GowenGit/docnet,它工作正常,但它使用的是旧版本的 PDFium)
所以使用 https://github.com/Dtronix/DtronixPdf/(这是 PdfiumCore 的线程安全实现)并清理它以从中制作 PDF 到图像转换器并在 Windows 和 Linux 上测试它。 这是最终代码:https://github.com/hmdhasani/DtronixPdf/blob/master/src/DtronixPdfBenchmark/Program.cs