基于C#實(shí)現(xiàn)JPG轉(zhuǎn)PDF的具體方案
一、核心
1. 使用iTextSharp(基礎(chǔ)版)
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); // 自適應(yīng)頁面
img.SetAbsolutePosition(0, 0); // 左上角定位
doc.Add(img);
doc.Close();
}
}
優(yōu)化點(diǎn):
- 添加異常處理:
try-catch塊捕獲IO異常 - 資源釋放:使用
using語句管理文件流 - 支持多圖合并:循環(huán)處理多個(gè)文件
2. 使用Spire.PDF(商業(yè)版)
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);
}
優(yōu)勢(shì):
- 自動(dòng)處理分頁
- 支持元數(shù)據(jù)設(shè)置(作者/標(biāo)題)
- 內(nèi)置壓縮算法(節(jié)省30-50%體積)
3. 使用ImageMagick.NET(高級(jí)處理)
using ImageMagick;
using System.IO;
public void ConvertJpgToPdfWithCompression(string inputPath, string outputPath)
{
using (MagickImage image = new MagickImage(inputPath))
{
// 圖像預(yù)處理
image.Resize(new MagickGeometry(800, 600)); // 調(diào)整尺寸
image.Quality = 85; // 壓縮質(zhì)量
// PDF輸出配置
image.Settings.Set("pdf:use-trimbox", "true");
image.Write(outputPath);
}
}
特性:
- 支持批量處理(遍歷文件夾)
- 可設(shè)置DPI(300dpi打印優(yōu)化)
- 透明度處理(PNG轉(zhuǎn)PDF時(shí)保留透明區(qū)域)
二、擴(kuò)展功能實(shí)現(xiàn)
1. 自動(dòng)分頁邏輯
// 動(dòng)態(tài)分頁(每頁最大高度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("機(jī)密文件", font, PdfBrushes.LightGray, 10, 10);
// 圖片水印
Image watermark = Image.GetInstance("watermark.png");
watermark.Opacity = 0.3f;
page.Canvas.DrawImage(watermark, 0, 0);
3. 加密保護(hù)
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
writer.SetEncryption(
"userpass", // 用戶密碼
"ownerpass", // 所有者密碼
PdfWriter.ALLOW_PRINTING,
PdfWriter.ENCRYPTION_AES_128
);
通過上述方案,開發(fā)者可根據(jù)項(xiàng)目需求選擇合適的實(shí)現(xiàn)方式。對(duì)于簡單需求,推薦使用Spire.PDF或iTextSharp;如需專業(yè)級(jí)圖像處理,可結(jié)合ImageMagick.NET;企業(yè)級(jí)應(yīng)用建議采用IronPDF的商業(yè)版本。
以上就是C#實(shí)現(xiàn)JPG轉(zhuǎn)PDF的具體方案的詳細(xì)內(nèi)容,更多關(guān)于C# JPG轉(zhuǎn)PDF的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
淺析C# web訪問mysql數(shù)據(jù)庫-整理歸納總結(jié)
本篇文章是對(duì)C#中的web訪問mysql數(shù)據(jù)庫的一些知識(shí)點(diǎn)進(jìn)行了整理歸納總結(jié),需要的朋友可以參考下2013-07-07
WinForm項(xiàng)目開發(fā)中Excel用法實(shí)例解析
這篇文章主要介紹了WinForm項(xiàng)目開發(fā)中Excel用法,非常實(shí)用,需要的朋友可以參考下2014-08-08
C#使用正則表達(dá)式隱藏手機(jī)號(hào)中間四位為*
這篇文章主要介紹了C#使用正則表達(dá)式隱藏手機(jī)號(hào)中間四位為*的相關(guān)資料,需要的朋友可以參考下2017-06-06

