C#使用iTextSharp将多张图片转一个PDF

NuGet安装最新版iTextSharp
图片大小(mm) = 图片像素 * 25.4 / 图片分辨率
PDF大小(mm) = 图片大小(mm) * 2.83462677

/// <summary>
/// 将多张图片合成到一个PDF内,完美填充页,页大小(mm)为图片大小(mm)
/// </summary>
/// <param name="输出目录">最终的PDF输出目录</param>
/// <param name="图片路径">图片的路径集合</param>
public static void PDF生成(string 输出目录, List<string> 图片路径) {
    //获取PDF页的实际长宽(mm)
    float[] xy = new float[2];
    using (FileStream fs = new FileStream(图片路径[0], FileMode.Open)) {
        System.Drawing.Image img = System.Drawing.Image.FromStream(fs);
        int w = img.Width;
        int h = img.Height;
        float w_dpi = img.HorizontalResolution;//水平分辨率
        float h_dpi = img.VerticalResolution;//垂直分辨率
        xy[0] = (float)(w * 25.4 / w_dpi * 2.83462677);//PDF实际宽度(mm)要乘2.83462677
        xy[1] = (float)(h * 25.4 / h_dpi * 2.83462677);
    }
    //创建页属性对象,Rectangle:设置长宽,最后4个0设置左右上下边距
    iTextSharp.text.Document document = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(0, 0, xy[0], xy[1]), 0, 0, 0, 0);
    using (FileStream fs = new FileStream(输出目录, FileMode.Create)) {
        iTextSharp.text.pdf.PdfWriter.GetInstance(document, fs);//将页设置与PDF输出流合并
        document.Open();//打开PDF
        //插入图片,一个图片占满一页
        for (int i = 0; i < 图片路径.Count; i++) {
            string imgPath = 图片路径[i];
            using (FileStream imgFs = new FileStream(imgPath, FileMode.Open)) {
                iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(imgFs);//从流读取图片
                //img.Alignment = Element.ALIGN_CENTER;//图片居中
                //img.SetAbsolutePosition(0, 0);//设置图片位置,PDF原点是左下角
                img.ScaleAbsolute(xy[0], xy[1]);//设置图片大小
                document.NewPage();//创建新页,并指向新页
                document.Add(img);//往新页中添加图片
                imgFs.Close();//重要,防止内存溢出,必要时可调用GC强制等待清理
            }
        }
        document.Dispose();//关闭PDF
    }
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值