C# (WinForms) 使用 iTextSharp 庫將圖片轉換為 PDF

iTextSharp簡介
iTextSharp 是一個開源的 .NET 庫,主要用于創建和操作 PDF 文檔。它是 iText 的 .NET 版本,iText 是一個廣泛使用的 Java 庫。iTextSharp 繼承了 iText 的核心功能并進行了適應 .NET 平臺的調整。

iTextSharp 的主要功能包括:

  • 創建 PDF 文檔:可以生成帶有文本、圖像、表格、矢量圖形等內容的 PDF 文檔。
  • 修改 PDF 文檔:支持從現有 PDF 文件中提取文本、添加或刪除頁面、修改內容等。
  • 數字簽名:支持為 PDF 文件添加數字簽名,以驗證文件的完整性和真實性。
  • 加密與解密:提供對 PDF 文件進行加密保護的功能,支持設置權限(如打印、復制等),并支持解密操作。
  • 表單功能:支持創建 PDF 表單,并允許數據填充、表單提交等操作。
  • 文本抽取:可以從 PDF 文檔中提取文本,支持文字提取和 OCR(光學字符識別)功能(需要外部支持)。
  • 支持多種字體和國際化:支持嵌入字體,能夠處理不同語言字符集(包括中文、日文等)。
  • 高效性能:能夠高效地處理大量 PDF 文件,適用于商業和大型應用程序。

效果圖如下:

目標
本文演示如何使用 C# 和 iTextSharp 將圖片轉換為 PDF 的功能。

使用步驟

首先,我們需要在項目中引用以下兩個 DLL 文件:

  • BouncyCastle.Crypto.dll:提供 iTextSharp 在處理數字簽名、加密、解密等功能時所需的加密支持。
  • itextsharp.dll:用于操作 PDF 文件。

代碼實現

using System;
using System.IO;
using System.Windows.Forms;
using iTextSharp.text;
using iTextSharp.text.pdf;namespace pdfzhuan
{public partial class Form1 : Form{public Form1(){InitializeComponent();}// 選擇文件按鈕,打開文件對話框并選擇圖片文件private void button1_Click(object sender, EventArgs e){OpenFileDialog ofd = new OpenFileDialog{InitialDirectory = Application.StartupPath, // 設置打開對話框的初始目錄Title = "請選擇要打開的文件", // 設置對話框標題Multiselect = true, // 允許多選文件Filter = "圖片文件|*.jpg|所有文件|*.*", // 設置文件過濾器FilterIndex = 2, // 設置默認過濾器索引RestoreDirectory = false // 不記憶最后打開的目錄};if (ofd.ShowDialog() == DialogResult.OK){string filePath = ofd.FileName; // 獲取文件路徑string fileName = ofd.SafeFileName; // 獲取文件名(不包括路徑)string pdfFile = filePath.Replace(".jpg", ".pdf"); // 設置轉換后的 PDF 文件路徑textBox1.Text = filePath; // 顯示圖片路徑textBox2.Text = pdfFile; // 顯示 PDF 輸出路徑}}/// <summary>/// 將圖片轉換為 PDF/// </summary>/// <param name="jpgfile">圖片文件路徑</param>/// <param name="pdf">生成的 PDF 文件路徑</param>/// <returns></returns>public static bool ConvertJPG2PDF(string jpgfile, string pdf){try{// 創建一個 A4 尺寸的 PDF 文檔var document = new Document(PageSize.A4, 25, 25, 25, 25);using (var stream = new FileStream(pdf, FileMode.Create, FileAccess.Write, FileShare.None)){// 獲取 PDF 寫入實例PdfWriter.GetInstance(document, stream);document.Open(); // 打開文檔// 加載圖片using (var imageStream = new FileStream(jpgfile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)){var image = Image.GetInstance(imageStream);// 圖片如果過大,則縮放以適應頁面if (image.Height > PageSize.A4.Height - 25 || image.Width > PageSize.A4.Width - 25){image.ScaleToFit(PageSize.A4.Width - 25, PageSize.A4.Height - 25);}image.Alignment = Image.ALIGN_MIDDLE; // 設置圖片居中document.Add(image); // 將圖片添加到 PDF 文檔中}document.Close(); // 關閉文檔}MessageBox.Show("PDF 轉換成功!");return true;}catch (Exception ex){MessageBox.Show($"轉換失敗: {ex.Message}");return false;}}// 點擊轉換按鈕,執行轉換操作private void button3_Click(object sender, EventArgs e){if (string.IsNullOrEmpty(textBox1.Text)){MessageBox.Show("請選擇要轉換的圖片!");return;}string jpgFile = textBox1.Text;string pdfFile = textBox2.Text;// 執行圖片轉換為 PDFConvertJPG2PDF(jpgFile, pdfFile);}// 點擊選擇文件夾按鈕,設置輸出 PDF 文件的路徑private void button2_Click(object sender, EventArgs e){if (string.IsNullOrEmpty(textBox1.Text)){MessageBox.Show("請選擇要轉換的圖片!");return;}FolderBrowserDialog folderDialog = new FolderBrowserDialog{Description = "請選擇圖片所在文件夾"};if (folderDialog.ShowDialog() == DialogResult.OK){string filename = DateTime.Now.ToString("yyyyMMddHHmm"); // 生成文件名textBox2.Text = Path.Combine(folderDialog.SelectedPath, $"{filename}.pdf"); // 設置輸出路徑}}}
}

代碼解析

  1. 選擇圖片文件:通過 OpenFileDialog 控件打開文件對話框,用戶可以選擇?.jpg 格式的圖片。選擇后,圖片路徑和對應的 PDF 輸出路徑會顯示在文本框中。

  2. 圖片轉 PDF:通過 iTextSharp 庫,創建一個 A4 尺寸的 PDF 文檔。通過 iTextSharp.text.Image.GetInstance() 方法加載圖片,如果圖片尺寸超過 A4 頁面,則自動縮放以適應頁面大小。最后,圖片被添加到 PDF 中并保存。

  3. 設置輸出 PDF 文件路徑:用戶可以通過 FolderBrowserDialog 選擇輸出文件夾,并設置 PDF 文件名。

總結

本文介紹了如何使用 iTextSharp 庫在 C# WinForms 應用中將圖片轉換為 PDF。通過簡單的用戶界面和文件操作,用戶可以方便地將 JPG 圖片轉化為 PDF 格式。這一功能對于批量生成文檔、報告或其他圖像處理場景非常有用。

源碼地址:https://download.csdn.net/download/weixin_44643352/90085127?spm=1001.2014.3001.5503

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62326.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62326.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62326.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu防火墻設置(四)——iptables語法與防火墻基礎配置

前面介紹的ufw和firewall-config均為iptables的前端&#xff0c; 分別適合個人用戶和服務器網絡管理 下面介紹底層——ipables iptables是一個強大的工具&#xff0c;用于配置Linux系統的防火墻。以下是一些基本的使用方法和示例&#xff0c;幫助您入門&#xff1a; 基本語法 …

【中間件開發】Redis基礎命令詳解及概念介紹

文章目錄 前言一、Redis相關命令詳解及原理1.1 string、set、zset、list、hash1.1.1 string1.1.2 list1.1.3 hash1.1.4 set1.1.5 zset 1.2 分布式鎖的實現1.3 lua腳本解決ACID原子性1.4 Redis事務的ACID性質分析 二、Redis協議與異步方式2.1 Redis協議解析2.1.1 redis pipeline…

力扣每日一題 - 999. 可以被一步捕獲的棋子數

題目 還需要你前往力扣官網查看詳細的題目要求 地址 1.給定一個 8 x 8 的棋盤&#xff0c;只有一個 白色的車&#xff0c;用字符 R 表示。棋盤上還可能存在白色的象 B 以及黑色的卒 p。空方塊用字符 . 表示。2.車可以按水平或豎直方向&#xff08;上&#xff0c;下&#xff0c;…

[UVM]在UVM環境中加入C++內存模塊

摘要&#xff1a;要在UVM環境中實現一個內存模塊并存入數據&#xff0c;您可以遵循以下步驟。這里會涉及C的內存建模和UVM的SystemVerilog部分的接口。在高層次上&#xff0c;我們將描述如何在C中實現內存模型并通過UVM的DPI接口訪問它。 一、C內存模型 首先&#xff0c;在C中…

學習記錄,正則表達式, 隱式轉換

正則表達式 \\&#xff1a;表示正則表達式 W: 表示一個非字&#xff08;不是一個字&#xff0c;例如&#xff1a;空格&#xff0c;逗號&#xff0c;句號&#xff09; W: 多個非字 基本組成部分 1.字符字面量&#xff1a; 普通字符&#xff1a;在正則表達式中&#xff0c;大…

Selenium是廣泛使用的模擬瀏覽器運行的庫

簡介 Selenium是廣泛使用的模擬瀏覽器運行的庫&#xff0c;它是一個用于Web應用程序測試的工具。 Selenium測試直接運行在瀏覽器中&#xff0c;就像真正的用戶在操作一樣&#xff0c;并且支持大多數現代 Web 瀏覽器。 環境 安裝 pip install selenium下載Chrome驅動 系統環境…

網絡練級寶典-> UDP傳輸層協議

目錄 傳輸層 端口號 端口號和進程的關系 UDP協議 UDP協議格式 UDP數據封裝&#xff1a; UDP數據分用&#xff1a; 面向數據報 UDP的緩沖區 UDP的缺點 基于UDP的應用層協議 傳輸層 端口號 我們知道端口號對應的其實就是一個進程的pid&#xff0c;在操作系統中二者的…

Redis原理—1.Redis數據結構

大綱 1.Redis的數據結構 2.Redis的SDS 3.Redis的鏈表 4.Redis的字典 5.Redis的跳躍表 6.Redis的整數集合 7.Redis的壓縮列表 8.Redis的對象 9.Redis對象的幾個關鍵屬性 10.Redis的單線程為什么這么快 11.Redis的典型應用場景和說明 12.Redis的相關命令說明 1.Redis…

【Vue3中Router使用】

Vue3中Router使用 1. 安裝vue-router組件2. 建兩個測試頁面2.1 測試頁面Home.vue2.2 測試頁面Category.vue 3. 創建路由對象4. 在入口main.js中引入router把App.vue改成路由頁面5. 測試5.1 關閉檢查解決ESlint報錯5.2 改文件名解決ESlint檢查報錯測試WebHashHistory 和WebHisto…

python拆分Excel文件

按Sheet拆分Excel 或 按照某一列的不同值拆分Excel。文檔樣式如下&#xff1a; 結果&#xff1a;紅色是按照Sheet名拆出的&#xff0c;藍色和橙色是某個Sheet按照某列的不同值拆分的。 代碼&#xff1a; # -*- coding: utf-8 -*- """ 拆分excel文件——按照…

交易所 Level-2 歷史行情數據自動化導入攻略

用戶部署完 DolphinDB 后&#xff0c;需要將歷史股票數據批量導入數據庫&#xff0c;再進行數據查詢、計算和分析等操作。DolphinDB 開發了 ExchData 模塊&#xff0c;主要用于滬深交易所 Level-2 行情原始數據的自動化導入&#xff0c;目前已支持的數據源包括&#xff1a; 滬…

開源ISP介紹(2)————嵌入式Vitis搭建

Vivado搭建參考前一節Vivado基于IP核的視頻處理框架搭建&#xff1a; 開源ISP介紹&#xff08;1&#xff09;——開源ISP的Vivado框架搭建-CSDN博客 導出Hardware 在vivado中導出Hardware文件&#xff0c;成功綜合—實現—生成比特流后導出硬件.xsa文件。&#xff08;注意導…

Node.js JWT認證教程

Node.js JWT認證教程 1. 項目介紹 JSON Web Token (JWT) 是一種安全的跨域身份驗證解決方案&#xff0c;在現代Web應用中廣泛使用。本教程將詳細講解如何在Node.js中實現JWT認證。 2. 項目準備 2.1 初始化項目 # 創建項目目錄 mkdir nodejs-jwt-auth cd nodejs-jwt-auth# …

109.【C語言】數據結構之二叉樹層序遍歷

目錄 1.知識回顧 2.代碼實現 準備工作 LevelOrder函數 代碼框架 關鍵代碼 3.執行結果 1.知識回顧 層序遍歷參見106.【C語言】數據結構之二叉樹的三種遞歸遍歷方式文章 截取的部分內容 定義:按層的方式遍歷(,設n為樹的深度,h1-->h2-->h3-->...-->hn) 以下面…

Ruby On Rails 筆記2——表的基本知識

Active Record Basics — Ruby on Rails Guides Active Record Migrations — Ruby on Rails Guides 原文鏈接自取 1.Active Record是什么&#xff1f; Active Record是MVC模式中M的一部分&#xff0c;是負責展示數據和業務邏輯的一層&#xff0c;可以幫助你創建和使用Ruby…

安裝部署PowerDNS--實現內網DNS解析

PDNS是PowerDNS的縮寫&#xff0c;是一個開源的DNS服務器軟件。PowerDNS具有高性能、靈活性和可擴展性&#xff0c;可用于搭建各種規模的DNS解析服務。它支持多種后端數據庫&#xff08;如MySQL、PostgreSQL等&#xff09;&#xff0c;提供高度定制化的配置選項&#xff0c;并具…

13.在 Vue 3 中使用OpenLayers加載鷹眼控件示例教程

在 WebGIS 開發中&#xff0c;鷹眼控件 是一個常用的功能&#xff0c;它可以為用戶提供當前地圖位置的概覽&#xff0c;幫助更好地定位和導航。在本文中&#xff0c;我們將基于 Vue 3 的 Composition API 和 OpenLayers&#xff0c;創建一個簡單的鷹眼控件示例。 效果預覽 在最…

Elasticsearch 單節點安全配置與用戶認證

Elasticsearch 單節點安全配置與用戶認證 安全掃描時發現了一個高危漏洞&#xff1a;Elasticsearch 未授權訪問 。在使用 Elasticsearch 構建搜索引擎或處理大規模數據時&#xff0c;需要啟用基本的安全功能來防止未經授權的訪問。本文將通過簡單的配置步驟&#xff0c;為單節…

使用C#基于ADO.NET編寫MySQL的程序

MySQL 是一個領先的開源數據庫管理系統。它是一個多用戶、多線程的數據庫管理系統。MySQL 在網絡上特別流行。MySQL 數據庫可在大多數重要的操作系統平臺上使用。它可在 BSD Unix、Linux、Windows 或 Mac OS 上運行。MySQL 有兩個版本&#xff1a;MySQL 服務器系統和 MySQL 嵌入…

計算機視覺與各個學科融合:探索新方向

目錄 引言計算機視覺與其他學科的結合 與醫學的結合與機械工程的結合與土木工程的結合與藝術與人文的結合發文的好處博雅知航的輔導服務 引言 計算機視覺作為人工智能領域的重要分支&#xff0c;正迅速發展并滲透到多個學科。通過與其他領域的結合&#xff0c;計算機視覺不僅…