本次程序編寫主要爲了將pdf word等文檔轉換爲圖片後設置不一樣的打印排版blog
前提 目標文件夾中的圖片高寬都是一致的圖片
/// <summary> /// 合併圖片 /// </summary> /// <param name="savedictory">文件保存目錄</param> /// <param name="singlePageNumber">單頁排版</param> /// <param name="path">文件列表</param> /// public static void MergedImage(string[] path, SinglePageNumber singlePageNumber,string savedictory) { //獲取目錄路徑列表 var i = path.Length % (int)singlePageNumber > 0 ? (path.Length / (int)singlePageNumber + 1) : path.Length / (int)singlePageNumber; for (int s = 0; s < i; s++) { List<Bitmap> bitmapList = new List<Bitmap>(); List<string> imgPathTake = path.Skip((s - 1) * (int)singlePageNumber).Take((int)singlePageNumber).ToList(); foreach (var pathItem in imgPathTake) bitmapList.Add(new Bitmap(pathItem)); //2=1x2 4=2x2 6=2x3 9=3x3 16=4x4 Bitmap map = null; switch (singlePageNumber) { case SinglePageNumber.two: map = mergeImage(2, 1, bitmapList); break; case SinglePageNumber.four: map = mergeImage(2, 2, bitmapList); break; case SinglePageNumber.six: map = mergeImage(3, 2, bitmapList); break; case SinglePageNumber.nine: map = mergeImage(3, 3, bitmapList); break; case SinglePageNumber.Sixteen: map = mergeImage(4, 4, bitmapList); break; default: break; } map.Save(savedictory + "\\" + s+".png"); } } /// <summary> /// 合併圖片文件 傳入的圖片寬高要一致 /// </summary> /// <param name="wi">一排有幾張</param> /// <param name="hi">一列有幾張</param> /// <param name="mapList"></param> public static Bitmap mergeImage(int wi, int hi, List<Bitmap> mapList) { int width = mapList.First().Width; int height = mapList.First().Height; Bitmap bitmap = new Bitmap(width * wi, height * hi); //x表示圖片在第幾行y表示圖片在第幾列 int mapIndex = 0; for (int y = 1; y <= hi; y++) { for (int x = 1; x <= wi; x++) { if (mapIndex == mapList.Count ) { foreach (var item in mapList) item.Dispose(); return bitmap; } var map = mapList[mapIndex]; mapIndex++; for (int w = 1; w <= width; w++) for (int h = 1; h <= height; h++) { var color = map.GetPixel(w - 1, h - 1); bitmap.SetPixel(((x-1)*width)+w - 1, ((y - 1) * height) + h - 1, color); } } } foreach (var item in mapList) item.Dispose(); return bitmap; }
/// <summary> /// 每版打印幾頁 單頁的不用處理 /// </summary> public enum SinglePageNumber { two = 2, four = 4, six = 6, nine = 9, Sixteen = 16, }
設置圖片排版爲2*3的效果ip
string dictory = @"D:\test\testpdf2convert\"; string[] path = System.IO.Directory.GetFiles(dictory); ImagePrintHp.MergedImage(path, SinglePageNumber.six, dictory);
效果文檔
2*2效果string