首页 > 代码库 > O2S.Components.PDFRender4NET.dll 图片空白BUG问题
O2S.Components.PDFRender4NET.dll 图片空白BUG问题
在用网上的2.0.1.0破解版的时候,会出现莫名的错误,大多数pdf转成图片都是Ok的,但是有部分转出来是空白,因为我这里要涉及大量的pdf转图片,不允许出现错误。
后来经过实验发现是这个版本存在bug。所以只有升级到更高的版本。我现在用的是4.0.2.0
这个版本会有水印存在, 转成il,修改了之后,dll不能使用了,dll签名过,所以没办法。
只有在转出来的图片上进行处理,bitmap处理一下就行了,因为水印是固定的地方,所以用GDI重新画图,去掉水印的那一部分就可以了
1 /// <summary> 2 /// 将PDF文档转换为图片的方法 3 /// </summary> 4 /// <param name="pdfInputPath">PDF文件路径</param> 5 /// <param name="imageOutputPath">图片输出完整路径(包括文件名)</param> 6 /// <param name="startPageNum">从PDF文档的第几页开始转换</param> 7 /// <param name="endPageNum">从PDF文档的第几页开始停止转换</param> 8 /// <param name="imageFormat">设置所需图片格式</param> 9 /// <param name="definition">设置图片的清晰度,数字越大越清晰</param>10 private static void ConvertPdf2Image(string pdfInputPath, string imageOutputPath,11 int startPageNum, int endPageNum, ImageFormat imageFormat, int definition)12 {13 14 PDFFile pdfFile = PDFFile.Open(pdfInputPath);15 16 if (startPageNum <= 0)17 {18 startPageNum = 1;19 }20 21 if (endPageNum > pdfFile.PageCount)22 {23 endPageNum = pdfFile.PageCount;24 }25 26 if (startPageNum > endPageNum)27 {28 int tempPageNum = startPageNum;29 startPageNum = endPageNum;30 endPageNum = startPageNum;31 }32 33 var bitMap = new Bitmap[endPageNum];34 35 for (int i = startPageNum; i <= endPageNum; i++)36 {37 Bitmap pageImage = pdfFile.GetPageImage(i - 1, 56 * definition);
38 Bitmap newPageImage = new Bitmap(pageImage.Width/4 , pageImage.Height/4);39 40 Graphics g = Graphics.FromImage(newPageImage);41 g.InterpolationMode = InterpolationMode.HighQualityBicubic;
//重新画图的时候Y轴减去130,高度也减去130 这样水印就看不到了42 g.DrawImage(pageImage, new Rectangle(0, 0, pageImage.Width/4 , pageImage.Height/4),43 new Rectangle(0, 130, pageImage.Width, pageImage.Height-130), GraphicsUnit.Pixel);44 45 bitMap[i - 1] = newPageImage;46 g.Dispose();47 }48 49 //合并图片50 var mergerImg = MergerImg(bitMap);51 //保存图片52 mergerImg.Save(imageOutputPath, imageFormat);53 pdfFile.Dispose();54 }55 56 /// <summary>57 /// 合并图片58 /// </summary>59 /// <param name="maps"></param>60 /// <returns></returns>61 private static Bitmap MergerImg(params Bitmap[] maps)62 {63 int i = maps.Length;64 65 if (i == 0)66 throw new Exception("图片数不能够为0");67 else if (i == 1)68 return maps[0];69 70 //创建要显示的图片对象,根据参数的个数设置宽度71 Bitmap backgroudImg = new Bitmap(maps[0].Width, i * maps[0].Height);72 Graphics g = Graphics.FromImage(backgroudImg);73 //清除画布,背景设置为白色74 g.Clear(System.Drawing.Color.White);75 for (int j = 0; j < i; j++)76 {77 g.DrawImage(maps[j], 0, j * maps[j].Height, maps[j].Width, maps[j].Height);78 }79 g.Dispose();80 return backgroudImg;81 }
O2S.Components.PDFRender4NET.dll 图片空白BUG问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。