本次程序编写主要为了将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:\test\testpdf2convert\";
            string[] path = System.IO.Directory.GetFiles(dictory);
            ImagePrintHp.MergedImage(path, SinglePageNumber.six, dictory);

  效果

2*2效果

 

posted on 2017-10-19 11:33  xuelei被占用了  阅读(851)  评论(0编辑  收藏  举报