可以使用 DocNET: https://github.com/GowenGit/docnet
直接 Nuget:
Install-Package Docnet.Core
然后:
public static bool Pdf2Image(string inputPath, string outputFolder) { bool result = false; try { using (var docReader = DocLib.Instance.GetDocReader(inputPath, new PageDimensions(1080, 1920))) { //open pdf file int num = docReader.GetPageCount(); for (int pageNumber = 0; pageNumber < num; pageNumber++) { using (var pageReader = docReader.GetPageReader(pageNumber)) { //var rawBytes = pageReader.GetImage(); var rawBytes = pageReader.GetImage(new NaiveTransparencyRemover(255, 255, 255)); var width = pageReader.GetPageWidth(); var height = pageReader.GetPageHeight(); //var characters = pageReader.GetCharacters(); //using bitmap to create a png image using (var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb)) { AddBytes(bmp, rawBytes); //DrawRectangles(bmp, characters); using (var stream = new MemoryStream()) { //saving and exporting bmp.Save(stream, ImageFormat.Png); System.IO.File.WriteAllBytes(Path.Combine(outputFolder, $"Page_{pageNumber + 1}.png"), stream.ToArray()); }; }; }; } }; Console.WriteLine("All pages converted to images."); result = true; } catch (Exception e) { Console.WriteLine($"error:{e}"); } return result; } private static void AddBytes(Bitmap bmp, byte[] rawBytes) { var rect = new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height); var bmpData = bmp.LockBits(rect, ImageLockMode.WriteOnly, bmp.PixelFormat); var pNative = bmpData.Scan0; Marshal.Copy(rawBytes, 0, pNative, rawBytes.Length); bmp.UnlockBits(bmpData); }
然后上控制器调用下看看效果:
public IActionResult Index() { bool result = PdfHelper.Pdf2Image("E:\\pdf\\compressed.tracemonkey-pldi-09.pdf", "E:\\pdf\\images\\"); return Content(result.ToString()); }
查看效果: