在用網上的2.0.1.0破解版的時候,會出現莫名的錯誤,大多數pdf轉成圖片都是Ok的,可是有部分轉出來是空白,由於我這裏要涉及大量的pdf轉圖片,不容許出現錯誤。spa
後來通過實驗發現是這個版本存在bug。因此只有升級到更高的版本。我如今用的是4.0.2.0code
這個版本會有水印存在, 轉成il,修改了以後,dll不能使用了,dll簽名過,因此沒辦法。orm
只有在轉出來的圖片上進行處理,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了 目前來看運行的比較穩定
下載地址