欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

[那些年踩过的坑]pdf转换为图片的教程(pdf的Base64字符串转换为图片的base64字符串和不通过第三方来实现pdf转图片的Dome)

程序员文章站 2022-06-21 16:42:15
因为工作需要,要把PDF的64字符串转换为图片的base64保存到数据库,但是看了看国内外,一方面是做这个的比较少,还有就是做这个真的很烦. PDF转图片呢,大概的实现思路方式一般有两种,一种就是重绘,类似于画画,把看到的画到新的画布上;第二种呢,就会识别里面的内容复制到新的画布上,我也不知道我比喻 ......

  因为工作需要,要把pdf的64字符串转换为图片的base64保存到数据库,但是看了看国内外,一方面是做这个的比较少,还有就是做这个真的很烦.

  pdf转图片呢,大概的实现思路方式一般有两种,一种就是重绘,类似于画画,把看到的画到新的画布上;第二种呢,就会识别里面的内容复制到新的画布上,我也不知道我比喻准不准,无所谓了,因为今天不做这个.

  在国内,做这个的发现很少,pdf在中国真的很不流行,没办法,为了完成任务,干呗.

  百度pdf转图片,出来一大堆,但是可以用的真的很少,尤其是教程,很少很少,而且大部分都是通过第三方来实现的,所以就有了spire.pdf、o2s.components等盗版的dll(因为本有有着“提高全民意识,保护知识产权”的21世纪三号青年的觉悟,所有不推荐大家这么做)

下面先贴个代码

  尊重国产品牌,先来演示个国产软件spire.pdf的转换

先引用 spire.pdf   spire.pdf下载地址 : https://www.e-iceblue.com/download/download-pdf-for-net-now.html

string base64 ="";//这里是pdfbase64字符串
byte[] pdfbyte = convert.frombase64string(base64);
pdfdocument pdf = new pdfdocument(pdfbyte);
image img = pdf.saveasimage(0, 400, 400);
bitmap bmp = new bitmap(img);
memorystream strem = new memorystream();
bmp.save(strem, imageformat.png);
byte[] data = new byte[strem.length];
strem.seek(0, seekorigin.begin);
strem.read(data, 0, convert.toint32(strem.length));
var pngbase64 = convert.tobase64string(data);

  在这里我是将pdf转换为png,转换其他格式也是可以的,注意的是pdf.saveasimage(0, 400, 400)函数中,第一个参数是要转换的页数,第二个和第三个是清晰度哇,数字越大,转换效果越好,最大400,其他了,看起来应该不难,应该都能看懂,要是直接pdf文件转图片文件,那就更简单了,直接保存就好,不需要读取base64了

  请大家支持国产,支持原创 官网地址(https://www.e-iceblue.com/)

 

下面这个是o2s.components pdf转图片,外国的,效果没有spire.pdf好

o2s.components.pdfrender4net 程序集文件下载地址(盗版的,没有水印)下载地址:https://pan.baidu.com/s/1wmcmfzbic2e_0vjy66zdfg

贴个代码自己看吧

 

需要引用o2s.components.pdfrender4net;

string base64 ="";//这里是pdfbase64字符串
byte[] pdfbyte = convert.frombase64string(base64);
memorystream stream = new memorystream(pdfbyte);
pdffile pdffile = pdffile.open(stream);
bitmap pageimage = pdffile.getpageimage(0, 2000);
memorystream strem = new memorystream();
pageimage.save(strem, imageformat.png);
byte[] data = new byte[strem.length];
strem.seek(0, seekorigin.begin);
strem.read(data, 0, convert.toint32(strem.length));
string result = convert.tobase64string(data);

通过第三方的转大概就是个这,用其他的也差不多,但是都是收费的,经过若干天的折磨,终于有了个新的方案,领导不想花钱,没办法,自己实现绘图呗

注意,在项目运行的时候需要把gsdll32.dll放在\converttoimage\bin\debug下面哦

由于代码量众多,自己下载观看去吧,都有注释,哈哈哈哈

https://pan.baidu.com/s/1wxsq_tcnvhhp0-jmtaivta