首页 > 编程语言 >c# 多张图片合成pdf

c# 多张图片合成pdf

时间:2022-09-28 16:57:29浏览次数:49  
标签:img filePath c# 合成 args -- xy new pdf

使用方法: 1.找到exe所在的路径url,解决方案名称为ImagesToPDF 在命令行中输入 url/ImagesToPDF.exe 导出PDF路径 图片1路径 图片2路径 ... 2.

右键点击【项目】--》【属性】,弹出配置界面。选择【调试】--》【启动选项】--》【命令行参数】文本框中输入任意的参数,多个之间用空格分隔,按F5可直接看到结果

 

 

 3.通过在程序的快捷方式中增加参数【推荐】 程序编译后,创建快捷方式程序。右键点击【ImagesToPDF.exe】--》【创建快捷方式】

右键点击【ImagesToPDF.exe 快捷方式】--》【属性】--》【快捷方式】--》【目标】,在文本框的最后输入任意参数,多个之间用空格分开

 

 

 双击双击【ImagesToPDF.exe 快捷方式】  
 1 static void Main(string[] args)
 2         {
 3             var outputurl = "";
 4             List<string> filePath = new List<string>();
 5             if (args != null)
 6             {
 7                 Console.WriteLine("参数长度" + args.Length);
 8                 for (int i = 0; i < args.Length; i++)
 9                 {
10                     Console.Write("第" + (i + 1) + "个参数是");
11                     Console.WriteLine(args[i]);
12                     if (i == 0)
13                     {
14                         outputurl = args[i];
15                     }
16                     else
17                     {
18                         filePath.Add(args[i]);
19                     }
20 
21                 }
22 
23             }
24             Console.ReadLine();
25             ToPDF(outputurl, filePath);
26         }
27 
28         public static void ToPDF(string outputurl, List<string> filePath)
29         {
30             float[] xy = new float[2];
31             using (FileStream fs = new FileStream(filePath[0], FileMode.Open))
32             {
33                 System.Drawing.Image img = System.Drawing.Image.FromStream(fs);
34 
35                 int w = img.Width;
36                 int h = img.Height;
37                 float w_dpi = img.HorizontalResolution;
38                 float h_dpi = img.VerticalResolution;
39                 xy[0] = (float)(w * 25.4 / w_dpi * 2.83462677);
40                 xy[1] = (float)(h * 25.4 / h_dpi * 2.83462677);
41             }
42             iTextSharp.text.Document document = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(0, 0, xy[0], xy[1]), 0, 0, 0, 0);
43             using (FileStream fs = new FileStream(outputurl, FileMode.Create))
44             {
45                 iTextSharp.text.pdf.PdfWriter.GetInstance(document, fs);
46                 document.Open();
47                 for (int i = 0; i < filePath.Count; i++)
48                 {
49                     string imgPath = filePath[i];
50                     using (FileStream imgFs = new FileStream(imgPath, FileMode.Open))
51                     {
52                         iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(imgFs);
53                         img.ScaleAbsolute(xy[0], xy[1]);
54                         document.NewPage();
55                         document.Add(img);
56                         imgFs.Close();
57                     }
58                 }
59                 document.Dispose();
60             }
61         }
View Code

 

标签:img,filePath,c#,合成,args,--,xy,new,pdf
From: https://www.cnblogs.com/crystal-bubble/p/16738676.html

相关文章

  • Oracle部署,关于日志文件系统选择(硬盘格式化、挂载)
    之前部署过好多Oracle服务,采用的日志文件系统一直是ext3。但是我观察到很多人在格式化/挂载数据盘时,采用的日志文件系统类型有ext3、ext4、xfs等,这不禁让我发出疑问,哪个类......
  • 实验2:Open vSwitch虚拟交换机实践
    实验2:OpenvSwitch虚拟交换机实践一、实验目的能够对OpenvSwitch进行基本操作;能够通过命令行终端使用OVS命令操作OpenvSwitch交换机,管理流表;能够通过Mininet的Pyth......
  • shell之flock
    1、flock最大的用途就是实现对crontab任务的串行化;为了防止crontab任务出现多实例的情况,导致系统内存被耗尽。在crontab任务中,有可能出现某个任务的执行时间超过了......
  • springboot整合seata1.5.2+nacos2.1.1(未完成)
    一、前言Seata出现前,大部分公司使用的都是TCC或者MQ(RocketMq)等来解决分布式事务的问题,TCC代码编写复杂,每个业务均需要实现三个入口,侵入性强,RocketMQ保证的是最终一致......
  • 自定义toString()方法检测对象类型时的返回值[object x](JS)
    如果想通过 Object.prototype.toString()方法来检测对象类型,则需要以 Function.prototype.call() 或者 Function.prototype.apply() 的形式来调用toString()方法。......
  • [2core]中间件和过滤器
    概述 最近在尝试做将asp.netwebapi项目转移为asp.netcorewebapi项目的技术试验,今天开始测试认证授权、资源控制、Action与Result控制、以及异常控制的技术变化与请求......
  • @Autowired和@Resource到底什么区别,你明白了吗?
    大家做Java开发的,肯定对于Spring是非常熟悉的,而且面试的时候,也相信大家能够非常轻易的知道这个所有的关于Spring的面试题,比如Spring的注入什么的。也肯定会被问到@......
  • C++问题汇总——长期更新
    避免使用vector<bool>,尽量使用bitset或者deque<bool>因为vector<bool>不是容器,底层是bool值按bit存储STLlist容器数据结构上看是带空头的双向循环链表容器迭代......
  • PAT (Basic Level) Practice 1003 我要通过
            最近主要在浙大PATOJ平台刷题,本篇主要分析1003题的求解思路和Python实现。1题目介绍1.题目背景        读入的字符串满足下列条件,系统就输......
  • 通过Thread Pool Executor类解析线程池执行任务的核心流程
    摘要:ThreadPoolExecutor是Java线程池中最核心的类之一,它能够保证线程池按照正常的业务逻辑执行任务,并通过原子方式更新线程池每个阶段的状态。本文分享自华为云社区《​​【......