本次程序编写主要为了将pdf word等文档转换为图片后设置不同的打印排版
前提 目标文件夹中的图片高宽都是一致的
/// <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的效果
string dictory = @"D: est estpdf2convert"; string[] path = System.IO.Directory.GetFiles(dictory); ImagePrintHp.MergedImage(path, SinglePageNumber.six, dictory);
效果
2*2效果