基于C#实现JPG转PDF的具体方案
作者:kaikaile1995
在当今数字化时代,文档处理已成为日常工作和生活中不可或缺的一部分,为了适应各种场景的需求,文档格式之间的转换显得尤为重要,PDF和JPG格式之间的转换是常见的需求之一,本文给大家介绍了基于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 );
通过上述方案,开发者可根据项目需求选择合适的实现方式。对于简单需求,推荐使用Spire.PDF或iTextSharp;如需专业级图像处理,可结合ImageMagick.NET;企业级应用建议采用IronPDF的商业版本。
以上就是C#实现JPG转PDF的具体方案的详细内容,更多关于C# JPG转PDF的资料请关注脚本之家其它相关文章!