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
}
}
————————————————

原文链接:https://blog.csdn.net/qq_42690327/article/details/126597220

posted @   過朢  阅读(332)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示