C#合并文件夹图片列表 自定义排版顺序

本次程序编写主要为了将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=4x4Bitmap 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效果

 

转载于:https://www.cnblogs.com/ProDoctor/p/7691575.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

硬盘基本知识(一)

总体来说&#xff0c;硬盘结构包括&#xff1a;盘片、磁头、盘片主轴、控制电机、磁头控制器、数据转换器、接口、缓存等几个部份。所有的盘片&#xff08;一般硬盘里有多个盘片&#xff0c;盘片之间平行&#xff09;都固定在一个主轴上。在每个盘片的存储面上都有一个磁头&…

MySQL - 存储过程

一、概述 存储过程可以理解为一段 SQL 语句的集合&#xff08;相当于 PHP 中的一个函数方法&#xff0c;去实现业务逻辑&#xff09;&#xff0c;它们被事先编译好并且存储在数据库中。 调用存储过程与直接执行 SQL 语句的效果是相同的&#xff0c;但是存储过程的一个好处是处理…

白话聊应用架构

产业互联网时代&#xff0c;数字化转型&#xff08;数字化演化历史&#xff09;已成为一种趋势&#xff0c;各行各业都投入到数字化转型的浪潮中来。节后有个客户项目参与者问我架构方面的事情&#xff0c;我想来想去对于非IT人来说&#xff0c;可能应用架构是最容易理解&#…

python大数_python处理大数字的方法

本文实例讲述了python处理大数字的方法。分享给大家供大家参考。具体实现方法如下&#xff1a;def getFactorial(n):"""returns the factorial of n"""if n 0:return 1else:k n * getFactorial(n-1)return kfor k in range(1, 70):print "…

数据库分库分表、读写分离的原理和实现,以及使用场景

2019独角兽企业重金招聘Python工程师标准>>> 为什么要分库分表和读写分离&#xff1f; 类似淘宝网这样的网站&#xff0c;海量数据的存储和访问成为了系统设计的瓶颈问题&#xff0c;日益增长的业务数据&#xff0c;无疑对数据库造成了相当大的负载&#xff0c;同时…

谈谈一些有趣的CSS题目(十六)-- 奇妙的 background-clip: text

开本系列&#xff0c;谈谈一些有趣的 CSS 题目&#xff0c;题目类型天马行空&#xff0c;想到什么说什么&#xff0c;不仅为了拓宽一下解决问题的思路&#xff0c;更涉及一些容易忽视的 CSS 细节。 解题不考虑兼容性&#xff0c;题目天马行空&#xff0c;想到什么说什么&#x…

第五周软件工程作业-每周例行报告

一、PSP T名称C内容ST开始时间ED结束时间中断时间/min实际时间/minScrum会议第一次Scrum会议10月13日11:3010月13日12:10040第二次Scrum会议10月14日15:3010月14日15:55025第三次Scrum会议10月15日13:3010月15日14:05035第四次Scrum会议10月16日11:3010月16日13:00090第五次Scr…

MySQL - 触发器

一、概述 Mysql 允许通过触发器、存储过程、函数的形式来存储代码。 触发器可以让你在执行 Insert、Update、Delete的时候&#xff0c;执行一些特定的操作。可以在Mysql中指定是在Sql语句执行之前触发还是执行后触发。 二、使用触发器需要注意的点 对每一个表的每一个事件&a…

Docker Desktop 可以直接启用Kubernetes 1.25 了

作为目前事实上的容器编排系统标准&#xff0c;K8s 无疑是现代云原生应用的基石&#xff0c;很多同学入门可能直接就被卡到第一关&#xff0c;从哪去弄个 K8s 的环境&#xff0c; Docker Desktop 自带了Kubernetes 服务&#xff0c;但是在过往的经验中就是用梯子也安装不了&…

截取url的host_java正则表达式获取url的host示例

java正则表达式获取url的host示例 复制代码 代码如下: public static String getHost(String url){if(url==null||url.trim().equals("")){return ""; } String host = ""; Pattern p = Pattern.compile("(?<=//|)((\\w)+\\.)+\\w+&qu…

MySQL - 视图

一、概述 Mysql 5.0 版本后开始引入视图。视图本身是一个虚拟表&#xff0c;不存放任何数据。在使用 sql 语句访问视图的时候&#xff0c;他返回的数据都是在查询过程中从其他表动态生成的。 二、使用视图   1、创建视图 CREATE VIEW comic_view as SELECT comic_id,name,pe…

Linux环境下压缩与解压命令大全

tar命令 解包&#xff1a;tar zxvf FileName.tar 打包&#xff1a;tar czvf FileName.tar DirName gz命令 解压1&#xff1a;gunzip FileName.gz 解压2&#xff1a;gzip -d FileName.gz 压缩&#xff1a;gzip FileName .tar.gz 和 .tgz 解压&#xff1a;tar zxvf FileName.tar.…

Centos 磁盘管理及配额管理

实验内容&#xff1a;一.添加两块硬盘&#xff0c;使用LVM做成VG01组&#xff0c;在该VG中新建两个LV。二.将这两个LV格式化为ext4/xfs&#xff0c;开机自动挂载到系统mnt1,mnt2目录下。三.lv02开启磁盘配额功能&#xff0c;用来进行用户与组分配额的实验。四.在系统里添加用户…

OnionArch - 采用DDD+CQRS+.Net 7.0实现的洋葱架构

博主最近失业在家&#xff0c;找工作之余&#xff0c;看了一些关于洋葱&#xff08;整洁&#xff09;架构的资料和项目&#xff0c;有感而发&#xff0c;自己动手写了个洋葱架构解决方案&#xff0c;起名叫OnionArch。基于最新的.Net 7.0 RC1, 数据库采用PostgreSQL, 目前实现了…

spark写出分布式的训练算法_利用 Spark 和 scikit-learn 将你的模型训练加快 100 倍...

在 Ibotta&#xff0c;我们训练了许多机器学习模型。这些模型为我们的推荐系统、搜索引擎、定价优化引擎、数据质量等提供动力。它们在与我们的移动应用程序交互时为数百万用户做出预测。当我们使用 Spark 进行数据处理时&#xff0c;我们首选的机器学习框架是 scikit-learn。随…

理解LinkedHashMap

1. LinkedHashMap概述&#xff1a;LinkedHashMap是HashMap的一个子类&#xff0c;它保留插入的顺序&#xff0c;如果需要输出的顺序和输入时的相同&#xff0c;那么就选用LinkedHashMap。LinkedHashMap是Map接口的哈希表和链接列表实现&#xff0c;具有可预知的迭代顺序。此实现…

MySQL - 锁

一、什么是锁 锁是数据库系统区别于文件系统的一个关键特性。锁机制用于管理对共享资源的并发访问。 二、MySQL 不同存储引擎支持的锁机制 存储引擎支持的锁类型Myisam表锁Innodb行锁、表锁Memory表锁BDB页锁、表锁表锁&#xff1a;直接锁住的是一个表&#xff0c;开销小&…

数据库时区那些事儿 - MySQL的时区处理

原文地址 当JVM时区和数据库时区不一致的时候&#xff0c;会发生什么&#xff1f;这个问题也许你从来没有注意过&#xff0c;但是当把Java程序容器化的时候&#xff0c;问题就浮现出来了&#xff0c;因为目前几乎所有的Docker Image的时区都是UTC。本文探究了MySQL及其JDBC驱动…

java_函数的重载

函数的重载&#xff08;Overload&#xff09;概念&#xff1a;在同一个类中&#xff0c;允许存在一个以上的同名函数&#xff0c;只要他们的参数个数或者参数类型不同即可。函数功能一样&#xff0c;仅仅是参与运算的未知内同不同时&#xff0c;可以定义多函数&#xff0c;却使…

全新升级的AOP框架Dora.Interception[2]: 基于约定的拦截器定义方式

Dora.Interception&#xff08;github地址&#xff0c;觉得不错不妨给一颗星&#xff09;有别于其他AOP框架的最大的一个特点就是采用针对“约定”的拦截器定义方式。如果我们为拦截器定义了一个接口或者基类&#xff0c;那么拦截方法将失去任意注册依赖服务的灵活性。除此之外…