当前位置: 首页 > 工具软件 > Magick.NET > 使用案例 >

.NET 将PDF转成图片之Magick.NET(亲测可用)

谢和颂
2023-12-01

网络上找了一堆博文,实验之后基本上很少能够有用的,很少能提供完整的DemoMethod,故写本篇文章来做记录。

1、新建项目UnitTestProject

2、右击项目==>>管理Nuget程序包==>Magick.NET-Q16-AnyCPU 安装最新版本7.14.5

High-Dynamic Range (HDR) image
注: Q8 Q16HDRI分别表示8位 和16位,AnyCPU、x64、x86 指计算机是32位还是64位系统,选择AnyCPU

3、下载安装ghostscript(根据所在服务器下载对应32还是64位版本)

http://ghostscript.com/download/gsdnld.html

如果不安装ghostscript,magick.net在执行Read函数读取pdf时会报错误.

4、加入以下方法,并添加引用 using ImageMagick;

/// <summary>
/// 将PDF所有页转换为图片并返回图片路径
/// </summary>
/// <param name="pdfPath">pdf文件路径</param>
/// <param name="imgPath">生成图片路径</param>
/// <param name="imgName">图片名称前缀</param>
public List<string> GetPdfAllPageImgs(string pdfPath, string imgPath, string imgName)
{
    var list = new List<string>();
    try
    {
        MagickReadSettings settings = new MagickReadSettings();
        settings.Density = new Density(72, 72); //设置格式
        using (MagickImageCollection images = new MagickImageCollection())
        {
            images.Read(pdfPath, settings);
            int pageCount = images.Count;
            for (int i = 0; i < pageCount; i++)
            {
                IMagickImage image = images[i];
                image.Alpha(AlphaOption.Remove);//遇到电子签章的此属性可以解决黑屏问题
                image.Format = MagickFormat.Jpeg;
                string path = imgPath + $"{imgName}_{i}.jpg";//相对路径   
                image.Write(path);
                list.Add(path);
            }
        }
    }
    catch (Exception ex)
    {
 
    }
    return list;
}

5、在TestMethod方法中调用测试

[TestMethod]
public void TestMethod()
{
    try
    {
        string filepath = @"D:\PDFFF\1565265812212742552810.pdf";
        string imgpath = @"D:/PDFFF/";
       var pathList= PdfHelper.GetPdfAllPageImgs(filepath, imgpath, "imgName");
   }
    catch (Exception ex)
    {
 
    }
}

6、右击TestMethod方法==>调试测试(注意打上断点)

请根据自己需要进行函数改写,本文只是示例,加入文件存储到云、文件检测等等

Demo地址(CSDN好像不可以设置免费下载了。。。有点不清真啊)

https://download.csdn.net/download/uianqian/11926634


图像操作库 Magick.NET

ImageMagick 是一个很强大的图像操作库,支持超过100 种的文件格式。而 Magick.NET 可以让你在 .NET 环境中使用ImageMagick ,而无需在系统中单独安装 ImageMagick

示例代码:

// Read first frame of gif image
using (MagickImage image = new MagickImage("Snakeware.gif"))
{
  // Save frame as jpg
  image.Write("Snakeware.jpg");
}

// Write to stream
MagickReadSettings settings = new MagickReadSettings();
// Tells the xc: reader the image to create should be 800x600
settings.Width = 800;
settings.Height = 600;
 
using (MemoryStream memStream = new MemoryStream())
{
  // Create image that is completely purple and 800x600
  using (MagickImage image = new MagickImage("xc:purple", settings))
  {
    // Sets the output format to png
    image.Format = MagickFormat.Png;
    // Write the image to the memorystream
    image.Write(memStream);
  }
}
 
// Read image from file
using (MagickImage image = new MagickImage("Snakeware.png"))
{
  // Sets the output format to jpeg
  image.Format = MagickFormat.Jpeg;
  // Create byte array that contains a jpeg file
  byte[] data = image.ToByteArray();
}
 类似资料: