C#PDF转图片,支持批量转,支持PDF文件,BASE64转换为图片文件,BASE64,支持合并PDF为一张图
2022/1/26 17:06:59
本文主要是介绍C#PDF转图片,支持批量转,支持PDF文件,BASE64转换为图片文件,BASE64,支持合并PDF为一张图,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
大家好呀,我是一名Java开发工程师,最近公司项目遇到PDF转图片超时问题,经过排查,PDF文件大概在2-3M左右,使用pdfbox转换大概7-8秒(并且存在转换空白的问题),使用icepdf更长,经测试多天,最终放弃Java开发方式去做。使用C#做个个小的winform工具发现 速度还蛮快,打算用.NET WEBAPI写个接口进行PDF转图片,我把代码给大家,目前百度上没这么全的,给大家闭坑了。
项目引用包如下:
- PdfiumViewer
- ImageResizer.Plugins.PdfiumRenderer.Pdfium.Dll
大家直接在NuGet里面搜索安装即可!下面正式开始:
首先获取PDF文件转图片流:
//此处入参为PDF的base64编码,大家按照自己的需求来选择用哪段 byte[] data = Convert.FromBase64String(pdfToImageDTO.param); Stream stream = new MemoryStream(data); var pdf = PdfDocument.Load(stream); //此处入参为PDF的文件路径,大家按照自己的需求来选择用哪段 //string strpdfPath = txtPDF.Text.ToString(); //var pdf = PdfDocument.Load(strpdfPath); var pdfpage = pdf.PageCount; var pagesizes = pdf.PageSizes; //先转换获取所有图片List List<Image> images = new List<Image>(); for (int i = 1; i <= pdfpage; i++) { Size size = new Size((int)pagesizes[(i - 1)].Width, (int)pagesizes[(i - 1)].Height); //这里的100大家可以调高调低,越高越清晰,相应的转换时间和文件也会变大 Image image = pdf.Render(i - 1, size.Width, size.Height, 100, 100, PdfRenderFlags.CorrectFromDpi); images.Add(image); } //再将图片列表合并并转换成base64(此处调用我封装的工具类,后面会提供代码) return PdfToImageUtil.ImagesMerge(images);
我封装了个工具类PDFTOIMAGEAPI.cs(该工具类主要将图片流拼接成一个图片,并返回Base64编码):
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.IO; namespace PDFTOIMAGEAPI.Utils { public class PdfToImageUtil { /// <summary> /// 图片合并并返回Base64编码 /// </summary> /// <param name="images"></param> /// <returns></returns> public static string ImagesMerge(List<Image> images) { //把合并的图片进行保存为jpg格式 MemoryStream stream = new MemoryStream(); if (images.Count == 0) { return "图片列表为空,无法转换!"; } else if (images.Count > 1) { //最大宽度和高度 int maL = 0, totalH = 0; //循环遍历获取文件的最大宽度与总高度 foreach (Image image in images) { if (image.Width > maL) maL = image.Width; totalH = totalH + image.Height; } if (totalH == 0 || maL == 0) return null; ; using (Bitmap map = new Bitmap(maL, totalH)) //定义画布 { Graphics g = Graphics.FromImage(map);//定义画笔 g.Clear(Color.White);//把画布更改为白色 int y = 0;//y轴坐标 foreach (Image image in images) { g.DrawImage(image, new Point(0, y)); y = y + image.Height;//y的告诉 5是为了让画布有个缝隙 } map.Save(stream, ImageFormat.Jpeg); //如果需要保存成图片文件,可以使用下面这段注释掉的代码 //map.Save("F:\\1.jpg", ImageFormat.Jpeg); } } else { images[0].Save(stream, ImageFormat.Jpeg); } byte[] arr = new byte[stream.Length]; stream.Position = 0; stream.Read(arr, 0, (int)stream.Length); stream.Close(); //这里将arr强转Base64 return Convert.ToBase64String(arr); } } }
这篇关于C#PDF转图片,支持批量转,支持PDF文件,BASE64转换为图片文件,BASE64,支持合并PDF为一张图的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具