大家好呀,我是一名Java开发工程师,最近公司项目遇到PDF转图片超时问题,经过排查,PDF文件大概在2-3M左右,使用pdfbox转换大概7-8秒(并且存在转换空白的问题),使用icepdf更长,经测试多天,最终放弃Java开发方式去做。使用C#做个个小的winform工具发现 速度还蛮快,打算用.NET WEBAPI写个接口进行PDF转图片,发现速度很快,1-3秒,我把代码给大家,目前百度上没这么全的,给大家闭坑了。

懒得看文章的直接下载Demo自己研究:

使用.NETWEBAPI开发PDF转图片接口Demo-C#文档类资源-CSDN下载

C# 开发PDF转图片文件,支持Base64转换 WinForm项目-C#文档类资源-CSDN下载

项目引用包如下:

  1. PdfiumViewer
  2. 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强转Base64return Convert.ToBase64String(arr);}}
}

C#PDF转图片,支持批量转,支持PDF文件,BASE64转换为图片文件,BASE64,支持合并PDF为一张图相关推荐

  1. php转为图片,php中base64转换为图片的方法

    php中base64转换为图片的方法 发布时间:2020-08-31 09:56:18 来源:亿速云 阅读:100 作者:小新 小编给大家分享一下php中base64转换为图片的方法,相信大部分人都还 ...

  2. BASE64转换为图片格式,并上传图片

    基本的把base64 转成图片 # 将BASE64转换为图片格式## 代码```javapublic static final String JPG = ".jpg";public ...

  3. Java踩坑笔记 —— base64转换为图片后图片显示不全

    Java踩坑笔记 -- base64转换为图片后图片显示不全 前言 解决思路 案例代码 结束语 前言 最近在开发项目中,发现base64转换图片时,出现了图片显示不全,例如如下这样 可以明显看到图片部 ...

  4. PDF文件怎么转换为图片?

    PDF转图片,你还在直接截图保存吗?如果你试过,你就会发现分辨率受到了很大的影响,那PDF文件如何转换成JPG或PNG?今天给大家推荐一款移动端很好用的PDF工具"金闪PDF",可 ...

  5. 图片怎么批量压缩?进来学习一下压缩图片的好方法

    相信小伙伴们在日常工作和生活中经常会用到图片.在使用图片时,我们经常会遇到对图片大小的限制.因此,我们需要压缩图片的大小来减小图片的大小.如果图片太大可能会超出平台限制导致无法上传,或者分享给别人查阅 ...

  6. jszip压缩图片file-saver批量导出空文件夹以及有损图片问题解决

    1.需求: 所有设备的二维码单个下载很麻烦 需要批量导出 2.问题 2.1使用DataURl格式生成zip 按照jszipAPI 官方示例 使用 DataURl导出的是空文件夹 How to writ ...

  7. 将PPT文件内容转换为图片放在Email邮件正文中发送

    通过Email推送统计报告.一般除了要求将PPT报告文件作为附件发给用户,同时希望将报告内容在邮件中直观展示. 一份统计报告中经常包含柱状图.饼图.好看的图表,这些信息要直接在Email中展示比较复杂 ...

  8. 将base64转换为图片

    要将Base64编码的字符串转换为图片,您可以使用编程语言中的Base64解码器和适当的图像处理库.以下是Python的示例代码: import base64 from PIL import Imag ...

  9. C# 将Base64转换为图片并保存到Image数组

    将图片转化为Base64字符串的流程是:首先使用BinaryFormatter将图片文件序列化为二进制数据,然后使用Convert类的ToBase64String方法.将Base64字符串转换为图片的 ...

  10. Base64转换为图片以url路径返回前端

    ** 1,在properties配置项目路径和端口 ip=127.0.0.1 port=8081 2,在resource下创建temp文件夹 3,base64和图片互转工具类**** package ...

最新文章

  1. 如何为python程序设置使用次数_提升Python程序性能的7个习惯
  2. beego api mysql_beego搭建api服务
  3. The target you are trying to run requires an OpenSSL implementation.
  4. CVE-2017-0004相关lsass拒绝服务漏洞杂谈
  5. Package Manager Console 向VS2010安装 EntityFramework
  6. TP5.1类的自动加载
  7. Hibernate视频学习笔记(3)常用映射标签及属性
  8. [LeetCode]15. 3Sum
  9. centos提示找不到netstat 和 ifconfig命令的问题
  10. ajax控件扩展,22.6 扩展控件
  11. 在线编程 - PyPool小站启动记
  12. .Net Compact Framework 高级篇(2)-- 扩展SOAP应用
  13. Product Key Algorithm
  14. php常用字体大小,推荐:PHP编辑器常用的几种字体下载
  15. 计算机中丢失msvcr71.dll 问题解决
  16. 视频剪辑入门技能快速分享
  17. 使用gsds绘制基因结构图_原来可以用R这么画基因结构图
  18. 软件接收机射频信号源matlab程序,射频信号源
  19. 基于Barra多因子模型的组合权重优化
  20. 【数据科学家】如何成为一名数据科学家?

热门文章

  1. 【UML】——构件图
  2. Java多线程下载器(简洁版)
  3. 电路原理图元器件命名规范
  4. cadence SPB17.4 - CIS数据库字段设计细节
  5. 绿松和蓝松_绿松VS蓝松,傻傻分不清的你,可别买假了!
  6. 微机原理与接口技术【2】
  7. WLAN基础知识--认识WLAN基本概念
  8. android 设置各种颜色 android:background=@color/white
  9. 如果串口驱动有问题,怎么调
  10. 修改oracle客户端的编码,Oracle中文字符乱码?设置Oracle客户端字符编码与服务端一致...