基于C#实现JPG转PDF的具体方案

 更新时间:2025年09月19日 10:36:45   作者: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的资料请关注脚本之家其它相关文章!

相关文章

  • C#使用迭代器实现动态文字效果

    C#使用迭代器实现动态文字效果

    这篇文章主要介绍了如何使用C#的Drawing空间和Panel控件实现动态文字效果,通过设置字体参数、创建画布、使用Graphics类的FillRectangle, MeasureString和DrawString方法,以及Panel控件的CreateGraphics方法,实现在Panel上绘制动态文字,需要的朋友可以参考下
    2025-11-11
  • C#如何判断.Net Framework版本是否满足软件运行需要的版本

    C#如何判断.Net Framework版本是否满足软件运行需要的版本

    这篇文章主要介绍了C#如何判断.Net Framework版本是否满足软件运行需要的版本问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • C# 中用 Sqlparameter 的两种用法

    C# 中用 Sqlparameter 的两种用法

    这篇文章主要介绍了C# 中用 Sqlparameter 的几种用法,文中给大家列举了两种用法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • C#实现百度ping推送功能的方法

    C#实现百度ping推送功能的方法

    百度ping是网站优化必做的事情,这样才能主动推送给百度,那么基于代码是如何实现百度推送方法呢?下文小编给大家带来了C#实现百度ping推送功能的方法,非常不错,感兴趣的朋友一起学习吧
    2016-08-08
  • C#窗体-数据库连接及登录功能的实现案例

    C#窗体-数据库连接及登录功能的实现案例

    这篇文章主要介绍了C#窗体-数据库连接及登录功能的实现案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Unity3D创建圆柱体的方法

    Unity3D创建圆柱体的方法

    这篇文章主要为大家详细介绍了Unity3D创建圆柱体的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • WPF中Binding字符串格式化技巧分享

    WPF中Binding字符串格式化技巧分享

    在 WPF 开发中,数据绑定(Binding)是一项核心功能,它允许 UI 元素与数据源紧密关联,下面我们就来深入了解下Binding字符串格式化的技巧吧
    2024-10-10
  • C#中获取程序路径的几种方法及其区别说明

    C#中获取程序路径的几种方法及其区别说明

    这篇文章主要介绍了C#中获取程序路径的几种方法及其区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • c#对xml增删改查操作示例

    c#对xml增删改查操作示例

    本文主要介绍c#对xml增删改查操作的示例,大家参考使用吧
    2014-01-01
  • Unity3D实现飞机大战游戏(2)

    Unity3D实现飞机大战游戏(2)

    这篇文章主要为大家详细介绍了Unity3D实现飞机大战游戏的第二部分,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06

最新评论