C# JPG转PDF实现方案

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();
    }
}

优化点

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);
}

优势

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);
    }
}

特性

三、扩展功能实现

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的商业版本。

专注于matlab/simulink,电子电路,编程