首页 > 编程语言 >C# iTextSharp,将多张图片合并生成PDF文件

C# iTextSharp,将多张图片合并生成PDF文件

时间:2023-05-05 14:34:50浏览次数:42  
标签:25 openFile C# image PdfPageSize iTextSharp var PDF document

1、添加引用

首先添加NuGet引用

 

2、界面实现及按钮事件

        /// <summary>
        /// 根据图片生成PDF
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_CreatePDF_ByPic_Click(object sender, EventArgs e)
        {
            var res = JPGConvertPDF($"C:\\Users\\lwk123456\\Desktop\\图片\\{ DateTime.Now.ToString("yyyy-MM-dd")}\\{Guid.NewGuid()}.pdf");
            MessageBox.Show(res.ToString());
        }

 

 3、具体方法

/// <summary>
/// 图片转PDF文档(将图片集成到PDF文件中)
/// </summary>
/// <param name="pdfpath">转换后的pdf路径</param>
/// <returns>true转换成功,false失败</returns>
public static bool JPGConvertPDF(string pdfPath)
{
    try
    {
        //调用文件选择框
        OpenFileDialog openFile = new OpenFileDialog();
        openFile.Multiselect = true;//等于true表示可以选择多个文件
        openFile.DefaultExt = "*.jpg";
        openFile.Filter = "图片|*.jpg";
        if (openFile.ShowDialog() == DialogResult.OK)
        {
            #region 文件夹目录处理
            string path = System.IO.Path.GetDirectoryName(pdfPath);
            if (!System.IO.Directory.Exists(path))
            {
                System.IO.Directory.CreateDirectory(path);
            }
            #endregion
            //尺寸为A4纸大小
            var PdfPageSize = iTextSharp.text.PageSize.A4;
            //Document为对象为页面对象,类似HTML页面
            var document = new iTextSharp.text.Document(PdfPageSize, 4, 25, 25, 25, 25);
            //创建并打开PDF
            var stream = new FileStream(pdfPath, FileMode.Create, FileAccess.Write, FileShare.None);
            //将Document对象写入PDF文件
            iTextSharp.text.pdf.PdfWriter.GetInstance(document, stream);
            document.Open();
            if (openFile.FileNames != null && openFile.FileNames.Any())
            {
                foreach (string file in openFile.FileNames)
                {
                    //打开图片
                    var imageStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                    var image = iTextSharp.text.Image.GetInstance(imageStream);
                    float height = document.Top - document.TopMargin;
                    //设置图片宽高缩放
                    var imageWidth = image.Width > document.Right ? document.Right : image.Width;
                    var imageHeight = image.Height > height ? height : image.Height;
                    image.ScaleToFit(imageWidth, imageHeight);
                    //图片高>A4纸高-25
                    if (image.Height > PdfPageSize.Height - 25)
                    {
                        image.ScaleToFit(PdfPageSize.Width - 25, PdfPageSize.Height - 25);
                    }
                    //图片宽>A4纸宽-25
                    else if (image.Width > PdfPageSize.Width - 25)
                    {
                        image.ScaleToFit(PdfPageSize.Width - 25, PdfPageSize.Height - 25);
                    }
                    image.Alignment = iTextSharp.text.Image.ALIGN_MIDDLE;
                    document.Add(image);
                    imageStream.Dispose();
                }
            }
            document.Close();
            document.Dispose();
            stream.Dispose();
        }
        return true;
    }
    catch (Exception ex)
    {
        return false;
    }
}

 

标签:25,openFile,C#,image,PdfPageSize,iTextSharp,var,PDF,document
From: https://www.cnblogs.com/lwk9527/p/17374049.html

相关文章

  • 6-4 【CPP0026】以点类Point及平面图形类Plane为基础设计三角形类Triangle
    6-4【CPP0026】以点类Point及平面图形类Plane为基础设计三角形类Triangle分数 10作者 C++多态编程单位 石家庄铁道大学以平面图形类Plane为基类公有派生三角形类Triangle,main(void)函数完成对其的测试。Point类结构说明: Point类的数据成员包括:①私有......
  • 在.NetCore中 DDD中基于mediatr实现领域事件并结合EFCore进行二次封装
    [源代码地址https://github.com/junkai-li/NetCoreKevin]基于NET6搭建跨平台WebApi架构支持单点登录、多缓存、自动任务、分布式、多租户、日志、授权和鉴权、网关注册与发现、CAP集成事件、领域事件、docker部署**首要要理解什么是领域事件?**领域事件是指发生在特定领域中的......
  • 【C++之类构造函数和析构函数】
    【C++之类构造函数和析构函数】类的构造函数:1.类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。2.构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回void。3.构造函数可用于为某些成员变量设置初始值。类的析构函数:1.类的析构函......
  • npm命令报错:error Unexpected token '.'; error A complete log of this run can be fo
    如果你的npm报错是这样的errorUnexpectedtoken'.'errorAcompletelogofthisruncanbefoundin:并且你你尝试过了网上各种方法不得行。那么会不会是管控版本vnm的问题呢?弄了一早上不得行;最后尝试了下nvm版本。得出结论:nvm1.1.7这个版本有问题。请升级到nvm1.1.10......
  • Asia Dhaka Regional Contest C (阶乘分解)
    原题点这前置知识点:阶乘分解可看这篇博客题意:给出\(n\),问\(n!\)的因子的因子的个数和。思路:学会上面的阶乘分解之后,我们能一眼看出来这道题也一定跟它有关系,所以我们按照惯例先对\(n!\)进行质因数分解。n!=\({p_1}^{a_1}\times\)\({p_2}^{a_2}\)\(\times\)\({p......
  • HTML5中的document.visibilityState
    在HTML5中,文档对象(即document对象)具有一个visibilityState属性,该属性表示当前文档对象的可见性状态。visibilityState可能的取值有以下三种:-visible:表示文档当前处于激活状态,即当前选项卡处于前台或当前窗口处于屏幕最上层。-hidden:表示文档当前处于非激活状态,......
  • 在Ubuntu18.04安装Freeswitch1.10
    在Ubuntu18.04安装Freeswitch1.10一、版本选择二、Ubuntu的安装1、修改Ubuntu镜像(1)进入配置的目录,并进行配置文件备份(2)打开和修改源三、Freeswitch安装1、添加第三方源2、添加第三方源3、安装部分依赖包4、配置使用gawk5、编译安装程序依赖包(1)安装cmake(2)安装libks(3)安装signalwire-......
  • OpenProject:Ubuntu18.04下安装配置(docker方式)
    年前刚跳槽,发现很久没有更新文章啦。最近几年转到了技术管理岗,中小公司的技术管理,免不了做一些PM的活。以前用微软的Project(虽然盗版但真的好用),现在公司不允许使用盗版,只能找找开源的,于是发现了OpenProject。官方提供了几种安装方式:1.Package2.Docker3.UCS4.Other1.尝试下......
  • chatgpt代写---五一回家人太多了
    五一小长假,让很多人终于有机会回家探亲。但是,对于我们这样的人来说,出门旅游或回家探亲,确实面临着一个非常困扰的问题:人太多了!以南京为例,今年的五一假期,回家探亲的人数可谓是爆棚。不论是在车站还是在机场,都人满为患。到处都是人头攒动,交通堵塞,难免会让人产生一些怨念。事实上,中......
  • centos os初始设置
    echo"192.168.14.141mysql1">>/etc/hostsecho"exportLANG=en_US">>~/.bash_profile资源限制参数cat>>/etc/security/limits.conf<<EOF*softnproc65535*hardnproc65535*softnofile65535*softnofile655......