大家好呀,我是一名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. 工厂模式、策略者模式、责任链模式综合应用
  2. 太热了,谈机房空调散散热
  3. 第十三章:Python の 网络编程进阶(二)
  4. iphone最新款手机_苹果罕见“跌停”!遭遇6年来最惨淡一夜,2019年全球股市第一颗雷引爆...
  5. linux7设备的挂载,centos7磁盘分区与挂载解析
  6. 在Hadoop集群上,搭建HBase集群
  7. 安装sqlserver2008,重新启动计算机不通过的解决办法
  8. python中mysql更新字段中传参问题
  9. java中关于length的真确理解~~~~有补充的请跟帖~~~
  10. Java基础---API概述---常用类(Object类/String类)---equals和==
  11. lofter 爬虫_Lofter德赫标签日榜 | 200703
  12. 【UVA12304】2D Geometry 110 in 1!(外接圆/内切圆/切点等圆相关问题的模版题)
  13. 做竞品分析常常借用的信息分析工具和网站
  14. Vue3 Fragment(碎片化节点)
  15. twitter数据爬取
  16. 剑指 Offer 53 - II. 0~n-1中缺失的数字
  17. DataV-数据-api方式
  18. 自主证件采集录入系统-嵌入式护照阅读器
  19. 瓦伦达心态——再谈工作中的专注和心态
  20. 万字讲解Apollo,全网Apollo资料整理和学习

热门文章

  1. 关于VMWare15安装MacOS10.12教程
  2. 引起计算机故障的因素有哪些,电脑显卡原因引起的电脑故障的解决办法有哪些...
  3. 通信工程师证书到底有啥用?
  4. 深入理解服务器CPU三大体系结构--SMP、NUMA、MPP
  5. Redhat联网及配置网络yum
  6. ci框架配置操作redis
  7. python系列26:numpy稀疏矩阵笔记
  8. 【渗透测试】Cobalt Strike 插件 CrossC2(v3.0.2) 安装使用
  9. python快捷键注册
  10. 常用金属材料 钢管材料