分享是一种美德, 感谢网上分享代码的朋友

项目中需要将 PDF 转成图片,在网上找了很多方法,这里对几种方法做个总结

1. spire.pdf

这个是我正在用的, 需要库 Spire.License.dll 和 Spire.Pdf.dll, 这个库网上有不带水印的破解版,但是破解库在web上加载会报错,只能用正版带水印。 转换目前看起来还行,800多页能正常生成,缺陷是有水印,不过我以找到去掉水印的方法。

非常感谢这位朋友分享的去水印方法:https://blog.csdn.net/weixin_44296167/article/details/100011329?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param

去掉水印方法:

在调用转换方法前,先修改License中的注册码 , 这个方法完全有效

 SpireHelper SH = new SpireHelper();SH.ActivateMemoryPatching();// 转换图片PDFConvertPic pdf = new PDFConvertPic();int picNum = pdf.PDFtoImg(pdfFileName, DPI, bigName, smallName);

修改注册码

public static class SpireHelper{public static void ActivateMemoryPatching(){Assembly[] arr = AppDomain.CurrentDomain.GetAssemblies();foreach (Assembly assembly in arr){if (assembly.FullName.StartsWith("Spire.License"))ActivateForAssembly(assembly);}AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(ActivateOnLoad);}private static void ActivateOnLoad(object sender, AssemblyLoadEventArgs e){string Name = e.LoadedAssembly.FullName;if (Name.IndexOf("Spire.License") != -1)ActivateForAssembly(e.LoadedAssembly);}private static void ActivateForAssembly(Assembly assembly){bool isFound = false;Type[] arrType = null;try{arrType = assembly.GetTypes();}catch (ReflectionTypeLoadException err){arrType = err.Types;}MethodInfo miLicensed = typeof(SpireHelper).GetMethod("InvokeMe", BindingFlags.NonPublic | BindingFlags.Static);MethodInfo miEvaluation = null;foreach (Type type in arrType){if (isFound) break;if (type == null) continue;MethodInfo[] arrMInfo = type.GetMethods(BindingFlags.NonPublic | BindingFlags.Static);foreach (MethodInfo info in arrMInfo){if (isFound) break;try{string strMethod = info.ToString();if ((strMethod.StartsWith("Byte[]")) && (strMethod.IndexOf("(System.String)") > 0)){miEvaluation = info;MemoryPatching(miEvaluation, miLicensed);isFound = true;break;}}catch{throw new InvalidOperationException("MemoryPatching for " + assembly.FullName + " failed !");}}}string LData = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9InllcyI/Pgo8TGljZW5zZSBLZXk9ImNyOERaN1hKMkR5MUs2UUJBTkRPSVRLdlpjTzZkelVod2lsSHBnVlluQ3k0cXlHV2V6TFZubFJGeFAxNU1mSWZnUmdNWm1XaEdOQWRFNFRqZWZnQ1ovbFR2b1BkSXRIbDZXdDVBNWk1TVhFbnFkQnVPMUthRnovRFFzYUdWTGhzdjlySG1ybnRxSElFRGxJeGRxYUpNcGtLb0Frd1A3d1N6T01KMVkrbUNmVTVVRmV6REwvTjd1enJ4M0Y0d2I1SGErd0E2VFQ5VFJ3SzAzejlFS01aRmwzU1lSL3o0YVU3TE0wZFNYWTlqU0ZKZ2dqZlZzRFVLaUJyVm5td1ljaXVyOUVrYmw5Q3RaWTAzdG1yZm01QlplKzZnaHRFTm4wb2gzMzh0WlJleWpjcjc0QWs3MWhnWWtuTE9CQzE1VllmalhzcXVBVW13MlI2TWNWMlBPT2JyY1RSYlhBZ3pvUWJPeWQ4U2JFWmN3aE43NktQd1dzUVFTMUowdGlZSFVLeE9tMnQ0ZkJWMGhQVmhhOUI4Y0swNHFKUVp0MDBaMWNKRGEwd2I4VWx6RWs5QkhVVzJlbk9mVDE0UnlIQ2krWUdlbVBLY2RDUXJoMXpyWVRGN0ltb0x4N3h1NGV2RFRZc2xzV0JrbFFJb3g4NnJWckVVa1N0dXErQUNTWS9xVTM5L1Zhd3Y5S0FmUjVUZUVicGt3RGhTYjBOQkFqVDhBeXRsRFZkR2ZpZzBxS0czVllpVHBYRnc1cHRMVmgrYmtkK2RnN3Z4dHZyNDVaVVdKZXlyekdOR0g3YUZZZDZwLzJNRy9YSlRsR3ovU05RbzJDUExraU83SlhuOU5HZXhaN3BIbTBkZ3pNWmJHRVhxVmR2bG04MTJhL1hMMVNxeEdVWStvNVpsVUM3WTV4Z2dhRCtGZVA5enpoeUpxSUVwcDk3My9ScTRteG1wQWZMcVNzTzJSeHlTcStpdjFDc3AwQ3JvMDc4OEhybDFteWt4dVQweWRSWVpDNkRTeDhNMi9MWTNkOXNud3U3NkFmYjVDOVF1ZE9Zc0wzREh2aGZncmNVSWUvcUhmVFo5QWF6Y3pUanlyM2RPQkFjczBLZk12Y0xVUzRSeHZDdW1NNDVyNDJnMXJ3UGluN2JBcmYvZnNMTzZtS3g0WWRoSURNWlF6V3RjbkhFSTF5TXJ6aU9pdXhMdE8xalRBV25uU2VLVDJ0cXI3Tm42Qmg5TURHNjZZK2lJaW4xV05TUCtMdDFYdXRkajNKTyt4b1FNUVB5ZFpoZkJYZXpVMEhRMnd0eEdwdzRNczRTMTVJbFg1TEdXR3dXeUdYTWNjVWd3b1RDeFRGYmgyZFo0Vkg3OVZHTEVFR1JRWEZrNTRBdlFLdFBpdUcxY0w4RFo3WEoyRHkxSzZUUWVORE9YeFl2NFNveitCMHNBS0VwTVRrNCtTYWpYNksrSjlUOFhZVXRTOE8wWWZGUFZqZkhIYTZORWQyODdVcUlqMnJnQlF1bjVDV3hCczFHUm5BYmd1Z3MyL2ZQakcwZmdQemdSYzR5Q3ZObFg4V2pKUnloc3U5VFRKTjd1R3NOdnprU2IyZWlyQmhEaG1vQ0Jqa0wyYnMzT3I2d2pnNnBUNVpmNGhEdDF0STBJNXo1aytxQXVSZnRhd1lmamhXYmpMS0xKOTlUVk1kRDZaTCtTenNtQkNWN05lYm96V0RUTWgrRnJPT292R09ZbUk1bWp4Smd1MVRXNnI1V0JUK2oxSjBFNmJIb2tEMWo0Wm1DWUQreVBPUW1PMm1yUTNGdC9jVmZwQWlJdzliRkgwZ1FIbXQ4QnNuZnQ2MVV3c1h6cSs2akNvY1hOOUMvRXZPblhTczZuVlNGSkVBL3l1QmNIazZxOWdqanBnRG1NTEcrNlpxR1VjRWMzZEp2THpuK3pNT0p3TDI4WUQxN3BLSXBUNnd6WFBFVFJwWS9qNHhoMkQvaFhJRVNHcTk1eTVmZE9MNmx1QT09IiBWZXJzaW9uPSI5LjkiPgogICAgPFR5cGU+UnVudGltZTwvVHlwZT4KICAgIDxVc2VybmFtZT5Vc2VyTmFtZTwvVXNlcm5hbWU+CiAgICA8RW1haWw+ZU1haWxAaG9zdC5jb208L0VtYWlsPgogICAgPE9yZ2FuaXphdGlvbj5Pcmdhbml6YXRpb248L09yZ2FuaXphdGlvbj4KICAgIDxMaWNlbnNlZERhdGU+MjAxNi0wMS0wMVQxMjowMDowMFo8L0xpY2Vuc2VkRGF0ZT4KICAgIDxFeHBpcmVkRGF0ZT4yMDk5LTEyLTMxVDEyOjAwOjAwWjwvRXhwaXJlZERhdGU+CiAgICA8UHJvZHVjdHM+CiAgICAgICAgPFByb2R1Y3Q+CiAgICAgICAgICAgIDxOYW1lPlNwaXJlLk9mZmljZSBQbGF0aW51bTwvTmFtZT4KICAgICAgICAgICAgPFZlcnNpb24+OS45OTwvVmVyc2lvbj4KICAgICAgICAgICAgPFN1YnNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxOdW1iZXJPZlBlcm1pdHRlZERldmVsb3Blcj45OTk5OTwvTnVtYmVyT2ZQZXJtaXR0ZWREZXZlbG9wZXI+CiAgICAgICAgICAgICAgICA8TnVtYmVyT2ZQZXJtaXR0ZWRTaXRlPjk5OTk5PC9OdW1iZXJPZlBlcm1pdHRlZFNpdGU+CiAgICAgICAgICAgIDwvU3Vic2NyaXB0aW9uPgogICAgICAgIDwvUHJvZHVjdD4KICAgIDwvUHJvZHVjdHM+CiAgICA8SXNzdWVyPgogICAgICAgIDxOYW1lPklzc3VlcjwvTmFtZT4KICAgICAgICA8RW1haWw+aXNzdWVyQGlzc3Vlci5jb208L0VtYWlsPgogICAgICAgIDxVcmw+aHR0cDovL3d3dy5pc3N1ZXIuY29tPC9Vcmw+CiAgICA8L0lzc3Vlcj4KPC9MaWNlbnNlPg==";//Spire.License.LicenseProvider.SetLicenseKey(LData);Type type2 = assembly.GetType("Spire.License.LicenseProvider");MethodInfo mi = type2.GetMethod("SetLicenseKey", new Type[] { typeof(String) });mi.Invoke(Activator.CreateInstance(type2, null), new String[] { LData });}private static byte[] InvokeMe(String string_0){return Convert.FromBase64String("PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9InllcyI/Pgo8TGljZW5zZSBLZXk9IngiIFZlcnNpb249IjkuOSI+CiAgICA8VHlwZT5SdW50aW1lPC9UeXBlPgogICAgPFVzZXJuYW1lPlVzZXJOYW1lPC9Vc2VybmFtZT4KICAgIDxFbWFpbD5lTWFpbEBob3N0LmNvbTwvRW1haWw+CiAgICA8T3JnYW5pemF0aW9uPk9yZ2FuaXphdGlvbjwvT3JnYW5pemF0aW9uPgogICAgPExpY2Vuc2VkRGF0ZT4yMDE2LTAxLTAxVDEyOjAwOjAwWjwvTGljZW5zZWREYXRlPgogICAgPEV4cGlyZWREYXRlPjIwOTktMTItMzFUMTI6MDA6MDBaPC9FeHBpcmVkRGF0ZT4KICAgIDxQcm9kdWN0cz4KICAgICAgICA8UHJvZHVjdD4KICAgICAgICAgICAgPE5hbWU+U3BpcmUuT2ZmaWNlIFBsYXRpbnVtPC9OYW1lPgogICAgICAgICAgICA8VmVyc2lvbj45Ljk5PC9WZXJzaW9uPgogICAgICAgICAgICA8U3Vic2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE51bWJlck9mUGVybWl0dGVkRGV2ZWxvcGVyPjk5OTk5PC9OdW1iZXJPZlBlcm1pdHRlZERldmVsb3Blcj4KICAgICAgICAgICAgICAgIDxOdW1iZXJPZlBlcm1pdHRlZFNpdGU+OTk5OTk8L051bWJlck9mUGVybWl0dGVkU2l0ZT4KICAgICAgICAgICAgPC9TdWJzY3JpcHRpb24+CiAgICAgICAgPC9Qcm9kdWN0PgogICAgPC9Qcm9kdWN0cz4KICAgIDxJc3N1ZXI+CiAgICAgICAgPE5hbWU+SXNzdWVyPC9OYW1lPgogICAgICAgIDxFbWFpbD5pc3N1ZXJAaXNzdWVyLmNvbTwvRW1haWw+CiAgICAgICAgPFVybD5odHRwOi8vd3d3Lmlzc3Vlci5jb208L1VybD4KICAgIDwvSXNzdWVyPgo8L0xpY2Vuc2U+Cg==");}private static unsafe void MemoryPatching(MethodBase miEvaluation, MethodBase miLicensed){IntPtr IntPtrEval = GetMemoryAddress(miEvaluation);IntPtr IntPtrLicensed = GetMemoryAddress(miLicensed);if (IntPtr.Size == 8)*((long*)IntPtrEval.ToPointer()) = *((long*)IntPtrLicensed.ToPointer());else*((int*)IntPtrEval.ToPointer()) = *((int*)IntPtrLicensed.ToPointer());}private static unsafe IntPtr GetMemoryAddress(MethodBase mb){RuntimeHelpers.PrepareMethod(mb.MethodHandle);if ((Environment.Version.Major >= 4) || ((Environment.Version.Major == 2) && (Environment.Version.MinorRevision >= 3053))){return new IntPtr(((int*)mb.MethodHandle.Value.ToPointer() + 2));}UInt64* location = (UInt64*)(mb.MethodHandle.Value.ToPointer());int index = (int)(((*location) >> 32) & 0xFF);if (IntPtr.Size == 8){ulong* classStart = (ulong*)mb.DeclaringType.TypeHandle.Value.ToPointer();ulong* address = classStart + index + 10;return new IntPtr(address);}else{uint* classStart = (uint*)mb.DeclaringType.TypeHandle.Value.ToPointer();uint* address = classStart + index + 10;return new IntPtr(address);}}}

2. O2S.Components.PDFRender4NET

这个库转换会乱码, 特别是目录,没法用,不知道是不是库的问题(我换了两个不同时间的库都一样)

3. pdfiumviewer

这个库在web上无法使用, 总是提示库无法加载,winform上使用一切正常

这个需要两个库  PdfiumViewer 和 ImageResizer.Plugins.PdfiumRenderer.Pdfium.Dll ,可用 vs 软件中 : 工具 -》Nuget 包管理器 -》管理解决方案的管理器 Nuget 包管理器 -》 浏览 中搜索安装。

具体使用看这个链接: http://www.dfcsoft.com/View.aspx?id=b6edeafd43b74fc78bb99d52b70d006a

4. acrobat

这个报的希望最大,但是很失望, 无论桌面和web 都要安装 Adobe Acrobat Professional 这个软件,使用时候添加引用:Microsoft.CSharp.dll,Acrobat.dll 和Microsoft.VisualBasic.dll,以及 system.wendows.forms ,装完最好重启下电脑。 这个的坑就在于它是将pdf的内容添加到了剪贴板 , 而且web使用剪贴板就要启动一个单线程。 我在使用时因为剪贴板被同时使用生成图片会丢失,而且在web上使用是有多线程同时转换的问题,所以放弃这个方法。不过转换速度确实快,毕竟是正版。

说明:

Clipboard 类只能在设置为单线程单元 (STA) 模式的线程中使用

// 单线程
ThreadStart ts = delegate { GrabImage(bigPicName, picDPI, smallPicName); };
Thread g_AutoScanGrabImage = new Thread(ts);
g_AutoScanGrabImage.SetApartmentState(ApartmentState.STA); // 这句加上就可以了
g_AutoScanGrabImage.Start();

c# web PDF 转图片总结相关推荐

  1. C# web实现word 转Html、office转Html、pdf转图片 在线预览文件

    改篇 pdf 预览再本机没问题,发布再iis中 不行 ,(使用剪贴板的问题..excel和word 可以,) pdf解决:请看我的博文 ----最终解决篇 详细配置及代码 word 转Html 1 / ...

  2. .net pdf转图片_在客户端实现PDF转图片

    今天在寻找合适的Python下PDF转图片的解决方案时,意外发现pdf.js( Mozilla贡献的一个基于 web 标准的通用 pdf 解析和渲染库.)也可以实现PDF转图片,并且是在客户端就可以实 ...

  3. 7个值得拥有收藏的免费在线 PDF转图片转换器

    PDF 格式在文档演示和交换中无处不在.但是PDF转图片的必要性也在于很多情况.这里我想提几点. 收件人可能没有打开您发送的 PDF 的应用程序,但可以使用系统提供的程序查看图像. 图像在浏览器中的显 ...

  4. Java 实现PDF转图片,去除PDF水印,图片转PDF

    1.依赖jar包 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian& ...

  5. java读取pdf三维图片_java 读取PDF文件生成图片形式

    引入所需maven依赖 org.icepdf.os icepdf-core 6.2.2 javax.media jai_core JAVA代码工具类package com.util; import c ...

  6. 【初识python 3】PPT PDF 转图片优化告一段落

    序言 不想起标题,将就看吧 ^ _ ^ 看此片文章之前请先阅读 [初识python 1]Python PPT PDF 转成图片 [初识python 2]对服务端发送PDF EXCEL文件URL转成图片 ...

  7. python PDF 转 图片

    python PDF 转 图片 fitz库 代码 import fitz import time import re import os def pdf2image(pdf_path): '''# 从 ...

  8. C# 给PDF添加图片背景

    C# 给PDF添加图片背景 今天要实现的是给PDF文件添加图片背景这个功能.PDF是近年来最流行的文件之一,无论是办公还是日常生活中都经常会用到,很多时候,PDF文件的背景色都是白色,看多了难免觉得累 ...

  9. openOffice word转pdf,pdf转图片优化版

    之前写了一个版本的,不过代码繁琐而且不好用,效率有些问题.尤其pdf转图片速度太慢.下面是优化版本的代码. spriing_boot 版本信息:2.0.1.RELEASE 1.配置信息: packag ...

最新文章

  1. 【SeeMusic】音符方块颜色设置 ( 单一颜色设置 | 多彩音符设置 | 定时变色设置 | 渐变颜色 | 分轨道提示 )
  2. 集合竞价如何买入_集合竞价的那些事:开盘涨停,这样做你也能抢到!
  3. javascript一句话技巧
  4. oracle:实现滑动平均效果
  5. ssm 新建拦截器_拦截器在springboot项目和ssm架构项目的应用
  6. MCU——TC04B触摸按键芯片驱动
  7. sql server的数据同步
  8. shell 后台运行程序并写pid文件
  9. 信息安全管理体系--文件的等级划分
  10. git如何拉去开发的 最新代码_git拉取代码到本地
  11. linux中iso源码解压_linux下解压iso镜像文件方法
  12. flask爱家租房项目开发(十二)
  13. Hadoop的学习笔记(Hive|pig|zookeeper|hbase)
  14. 战意显示与服务器断开连接,战意服务器地址
  15. 美团商品平台化之路—关于架构原则的思考
  16. python中data是什么意思_C++中cv::Mat中的data属性对应在python中是什么
  17. FFmpeg 源码之分配与释放 AVPacket 常用函数
  18. java内部类规则_Java内部类规则
  19. 二战总结(信息与通信工程)
  20. 小啊呜产品读书笔记001:《邱岳的产品手记-01》 阅读计划内容简介

热门文章

  1. nz-zorro的icon图标如何进行大小和样式调整
  2. Json 序列化以及反序列化的三种方式(二)
  3. php简单的写一个班级信息表格
  4. HIVE面试题原理详解 统计用户连续交易的总额、连续登陆天数、连续登陆开始和结束时间、间隔天数
  5. Linux基本应用篇
  6. CMake Error at CMakeLists.txt:4 (find_package): By not providing “FindParaView.cmake“ in CMAKE_MOD
  7. 小姑娘创业卖干果,开店当天就做到46万多营业额,引流的绝招!
  8. 转发 Mac 键盘上的按键操作
  9. c# char unsigned_char和unsigned char--数据类型区别
  10. c语言中printk用法,printk和printf的区别