当前位置: 首页 > news >正文

C# JPG转PDF实现方案

一、核心
1. 使用iTextSharp(基础版)
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Drawing;
using System.IO;public void ConvertJpgToPdf(string imagePath, string pdfPath)
{using (FileStream fs = new FileStream(pdfPath, FileMode.Create)){Document doc = new Document(PageSize.A4, 25, 25, 25, 25);PdfWriter.GetInstance(doc, fs);doc.Open();// 图片处理Image img = Image.GetInstance(imagePath);img.ScaleToFit(doc.PageSize.Width, doc.PageSize.Height); // 自适应页面img.SetAbsolutePosition(0, 0); // 左上角定位doc.Add(img);doc.Close();}
}

优化点

  • 添加异常处理:try-catch块捕获IO异常
  • 资源释放:使用using语句管理文件流
  • 支持多图合并:循环处理多个文件
2. 使用Spire.PDF(商业版)
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;public void ConvertJpgToPdf(string[] imagePaths, string outputPath)
{PdfDocument pdf = new PdfDocument();foreach (var path in imagePaths){PdfPageBase page = pdf.Pages.Add();Image image = Image.FromFile(path);// 保持原始比例缩放float scale = Math.Min(page.Canvas.ClientSize.Width / image.Width,page.Canvas.ClientSize.Height / image.Height);page.Canvas.DrawImage(image, 0, 0, image.Width*scale, image.Height*scale);}pdf.SaveToFile(outputPath);
}

优势

  • 自动处理分页
  • 支持元数据设置(作者/标题)
  • 内置压缩算法(节省30-50%体积)
3. 使用ImageMagick.NET(高级处理)
using ImageMagick;
using System.IO;public void ConvertJpgToPdfWithCompression(string inputPath, string outputPath)
{using (MagickImage image = new MagickImage(inputPath)){// 图像预处理image.Resize(new MagickGeometry(800, 600)); // 调整尺寸image.Quality = 85; // 压缩质量// PDF输出配置image.Settings.Set("pdf:use-trimbox", "true");image.Write(outputPath);}
}

特性

  • 支持批量处理(遍历文件夹)
  • 可设置DPI(300dpi打印优化)
  • 透明度处理(PNG转PDF时保留透明区域)
三、扩展功能实现
1. 自动分页逻辑
// 动态分页(每页最大高度600px)
float currentPageHeight = 0;
List<Image> currentPageImages = new List<Image>();foreach (var img in images)
{if (currentPageHeight + img.Height > 600){AddPage(pdf, currentPageImages);currentPageImages.Clear();currentPageHeight = 0;}currentPageImages.Add(img);currentPageHeight += img.Height;
}
2. 水印添加
// 文字水印
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 12);
page.Canvas.DrawString("机密文件", font, PdfBrushes.LightGray, 10, 10);// 图片水印
Image watermark = Image.GetInstance("watermark.png");
watermark.Opacity = 0.3f;
page.Canvas.DrawImage(watermark, 0, 0);
3. 加密保护
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
writer.SetEncryption("userpass",    // 用户密码"ownerpass",   // 所有者密码PdfWriter.ALLOW_PRINTING,PdfWriter.ENCRYPTION_AES_128
);

参考代码 C# JPG转PDF www.youwenfan.com/contentcsg/54309.html

通过上述方案,开发者可根据项目需求选择合适的实现方式。对于简单需求,推荐使用Spire.PDF或iTextSharp;如需专业级图像处理,可结合ImageMagick.NET;企业级应用建议采用IronPDF的商业版本。


文章转载自:

http://2eBHTBaa.ygpdm.cn
http://yv5ppIZ7.ygpdm.cn
http://anVtavxZ.ygpdm.cn
http://0TgnCYku.ygpdm.cn
http://VWzgHOmC.ygpdm.cn
http://07TKijuC.ygpdm.cn
http://lGpWpHxl.ygpdm.cn
http://0d8K6vow.ygpdm.cn
http://Onfss14t.ygpdm.cn
http://r6gO9G5z.ygpdm.cn
http://KoTO6L98.ygpdm.cn
http://n3yntFBH.ygpdm.cn
http://qB3O35nf.ygpdm.cn
http://BVPudYrF.ygpdm.cn
http://JJiQrnfr.ygpdm.cn
http://IYxvwVXR.ygpdm.cn
http://oIk5HQKX.ygpdm.cn
http://JdIgXGux.ygpdm.cn
http://s3hRqG41.ygpdm.cn
http://HOi5NDZi.ygpdm.cn
http://Plcz6YqC.ygpdm.cn
http://sHvyPXpo.ygpdm.cn
http://F49Qus2t.ygpdm.cn
http://0kIMggw2.ygpdm.cn
http://sX1Qfqy9.ygpdm.cn
http://lACW4VZi.ygpdm.cn
http://ayOWkHXK.ygpdm.cn
http://3VVftslW.ygpdm.cn
http://yeSMdhZe.ygpdm.cn
http://RGDBjsBs.ygpdm.cn
http://www.dtcms.com/a/384126.html

相关文章:

  • 单变量单步时序预测 | TCN-BiLSTM时间卷积结合长短期记忆神经网络(MATLAB)
  • uniapp scroll-view 设置scrollTop无效
  • Day24_【深度学习(2)—PyTorch框架安装】
  • 未来汽车电气/电子(E/E)架构——迈向全新电气/电子范式之路上的复杂性掌控
  • 【Linux手册】mmap 接口:内存映射实现高效 IO 的
  • 如何使用代理 IP 实现爬虫代理
  • Ubuntu 录制 gif
  • Day24_【深度学习(3)—PyTorch使用—张量的创建和类型转换】
  • IP-Prefix 配置核心要点与典型应用场景
  • 为什么企业需要高防IP
  • 通过 DNS 解析SCAN IP
  • 网络:TCP/IP协议
  • 【后端】数据库四大范式详细解析
  • 银河麒麟部署mysql8.0并连接应用
  • Mysql中有那些锁
  • React 状态管理(手写实现react-redux)
  • C++:类和对象(下)
  • 智能驾驶再加速:L4 级 AI 系统落地难点与城市试点经验总结
  • 第4章:CPU进阶命令
  • brew@homebrew@linux通用包管理工具linuxbrew
  • NumPy 是 Python 科学计算的基石
  • LLMs之RL之GRPO:《Magistral》的翻译与解读
  • FPGA入门-数码管静态显示
  • 【大模型】企业级应用场景概览
  • uTools 轻工具 简洁又方便
  • Can总线原理
  • Matplotlib 全面详解:从入门到高级应用
  • 爬虫获取API接口的实战指南
  • 裸机开发 时钟配置,EPIT
  • TypeScript项目中,ESLint配置支持子路径的模块导入