zoukankan      html  css  js  c++  java
  • 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 }


    我已经更新到4.7.4.0了 目前来看运行的比较稳定
     下载地址 
  • 相关阅读:
    春季学期第十二周作业
    2019春第三次课程设计实验报告
    春季学期第十一周作业
    春季学期第十周作业
    春季学期第九周作业
    第五周总结 & 实验报告(三)
    第四周总结 & 实验报告(二)
    实验报告(一)&第三周总结
    第二周小结
    2019春总结
  • 原文地址:https://www.cnblogs.com/Daan_z/p/3974721.html
Copyright © 2011-2022 走看看