最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)PDF合并的項(xiàng)目實(shí)踐

 更新時(shí)間:2024年01月10日 15:18:30   作者:JosieBook  
有時(shí)我們可能會(huì)遇到需要的資料或教程被分成了幾部分存放在多個(gè)PDF文件中,本文主要介紹了C#實(shí)現(xiàn)PDF合并的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下

一、下載iTextSharp.dll

下載iTextSharp.dll

可使用聯(lián)機(jī)方式或者文件下載方式。

在這里插入圖片描述

命名空間引入

代碼開(kāi)始時(shí)引入了一些命名空間,這些命名空間包含了程序運(yùn)行所需的類和方法。

  • System、System.Collections.Generic、System.ComponentModel等是.NET框架的核心命名空間。
  • iTextSharp.text 和 iTextSharp.text.pdf 是用于處理PDF文件的庫(kù)。
  • System.IO 是用于文件和目錄操作的命名空間。
  • Microsoft.Win32 是用于訪問(wèn)Windows注冊(cè)表的命名空間。
  • System.Diagnostics 是用于診斷和調(diào)試的命名空間。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
using Microsoft.Win32;
using System.Diagnostics;

二、界面設(shè)計(jì)

在這里插入圖片描述

三、代碼

全局變量

定義了三個(gè)靜態(tài)字符串變量,用于存儲(chǔ)上次選擇的文件夾路徑、輸入文件夾路徑和輸出文件夾路徑。

// 全局變量
        private static string lastFolderPath = ""; // 記錄上次選擇文件夾的路徑
        private static string inputFolderPath = ""; // 輸入文件夾路徑
        private static string outputFolderPath = ""; // 輸出文件夾路徑

選擇文件夾的按鈕

從Windows注冊(cè)表中讀取上次選擇的文件夾路徑。
顯示一個(gè)文件夾選擇對(duì)話框,讓用戶選擇包含PDF文件的文件夾。
如果用戶選擇了一個(gè)文件夾,將該路徑存儲(chǔ)在inputFolderPath變量中,并創(chuàng)建(如果不存在)一個(gè)名為"Output"的子文件夾作為輸出路徑。
將選擇的路徑顯示在文本框txtPath中。

/// <summary>
        /// 按鈕,選擇文件夾路徑
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSelectPath_Click(object sender, EventArgs e)
        {
            // 讀取上次選擇的文件夾路徑  
            string registryKey = "Software\\PDF合并"; // 用您自己的應(yīng)用程序名稱替換YourAppName  
            if (Registry.CurrentUser.OpenSubKey(registryKey) != null)
            {
                lastFolderPath = Registry.CurrentUser.OpenSubKey(registryKey).GetValue("LastFolder") as string;
            }

            // 創(chuàng)建并顯示一個(gè)選擇文件夾的對(duì)話框  
            FolderBrowserDialog folderDialog = new FolderBrowserDialog();
            folderDialog.Description = "選擇包含PDF文件的文件夾:";
            folderDialog.SelectedPath = lastFolderPath; // 設(shè)置默認(rèn)路徑為用戶上次選擇的文件夾  

            if (folderDialog.ShowDialog() == DialogResult.OK)
            {
                // 獲取用戶選擇的文件夾路徑  
                inputFolderPath = folderDialog.SelectedPath;

                // 創(chuàng)建輸出文件夾路徑(如果它不存在則創(chuàng)建它)  
                outputFolderPath = Path.Combine(inputFolderPath, "Output");

                if (!Directory.Exists(outputFolderPath))
                {
                    Directory.CreateDirectory(outputFolderPath);
                }
            }

            txtPath.Text = inputFolderPath;
        }

確認(rèn)合并的按鈕

簡(jiǎn)而言之,當(dāng)用戶點(diǎn)擊“確認(rèn)合并PDF”按鈕時(shí),此方法首先檢查用戶是否已選擇了一個(gè)路徑。如果沒(méi)有,它會(huì)提示用戶選擇一個(gè)路徑;如果已選擇,它會(huì)調(diào)用一個(gè)方法來(lái)合并PDF文件,并顯示一個(gè)消息告知用戶合并已完成,然后打開(kāi)導(dǎo)出的文件夾供用戶查看。

/// <summary>
        /// 按鈕,確認(rèn)合并PDF
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOK_Click(object sender, EventArgs e)
        {
            if (txtPath.Text == string.Empty)
            {
                MessageBox.Show("請(qǐng)選擇要合并的文件夾路徑!");
            }
            else
            {
                // 調(diào)用合并PDF的方法  
                MergePDFs(inputFolderPath, outputFolderPath, "123");

                MessageBox.Show("合并完成!");

                // 打開(kāi)導(dǎo)出的文件夾路徑  
                Process.Start(outputFolderPath);
            }
        }
  • 合并PDF的處理函數(shù)
    定義方法:public void MergePDFs(string inputFolderPath, string outputFolderPath, string outputPdfName)
    獲取輸入文件夾中所有的PDF文件,并將它們存儲(chǔ)在inputFiles字符串?dāng)?shù)組中。
    創(chuàng)建輸出PDF文件的路徑,使用Path.Combine方法將輸出文件夾路徑和輸出PDF文件名稱組合起來(lái)。
    創(chuàng)建一個(gè)新的文件流stream,并使用FileStream類以寫(xiě)入模式打開(kāi)它,準(zhǔn)備寫(xiě)入輸出PDF文件。
    創(chuàng)建一個(gè)新的Document對(duì)象pdfDoc,表示輸出PDF文件。
    創(chuàng)建一個(gè)新的PdfCopy對(duì)象pdf,用于將內(nèi)容復(fù)制到輸出PDF文件中。
    打開(kāi)輸出PDF文檔以進(jìn)行寫(xiě)入。
    遍歷所有輸入的PDF文件,并使用PdfReader對(duì)象讀取每個(gè)PDF文件。
    對(duì)于每個(gè)輸入的PDF文件,獲取其頁(yè)面數(shù),并使用for循環(huán)遍歷每個(gè)頁(yè)面。
    將每個(gè)輸入PDF文件的頁(yè)面添加到輸出PDF文件中。
    檢查輸出PDF文檔是否為空,如果不為空則關(guān)閉它。
    關(guān)閉文件流。
    創(chuàng)建新輸出PDF文件的完整路徑。
    檢查新輸出文件是否已存在,如果已存在則刪除它。
    將原輸出文件移動(dòng)到新位置并重命名為"AllPDF_Merged.pdf"。
 /// <summary>
        /// 合并多個(gè)PDF文件為一個(gè)PDF文件
        /// </summary>
        /// <param name="inputFolderPath"></param>
        /// <param name="outputFolderPath"></param>
        /// <param name="outputPdfName"></param>
        public void MergePDFs(string inputFolderPath, string outputFolderPath, string outputPdfName)
        {
            // 獲取輸入文件夾中所有的PDF文件  
            string[] inputFiles = Directory.GetFiles(inputFolderPath, "*.pdf");

            // 創(chuàng)建輸出PDF文件路徑  
            string outputPdfPath = Path.Combine(outputFolderPath, outputPdfName);

            // 創(chuàng)建輸出PDF文件  
            using (FileStream stream = new FileStream(outputPdfPath, FileMode.Create))
            {
                Document pdfDoc = new Document();
                PdfCopy pdf = new PdfCopy(pdfDoc, stream);
                pdfDoc.Open();

                foreach (string file in inputFiles)
                {
                    // 讀取每個(gè)PDF文件并將其頁(yè)面添加到輸出PDF中  
                    PdfReader reader = new PdfReader(file);
                    int n = reader.NumberOfPages;
                    for (int i = 1; i <= n; i++)
                    {
                        pdf.AddPage(pdf.GetImportedPage(reader, i));
                    }
                    reader.Close();
                }

                if (pdfDoc != null) pdfDoc.Close();
                stream.Close();
            }

            string newOutputPdfPath = Path.Combine(outputFolderPath, "AllPDF_Merged.pdf");

            // 檢查新輸出文件是否已存在  
            if (File.Exists(newOutputPdfPath))
            {
                // 如果已存在,則刪除舊文件并創(chuàng)建新文件  
                File.Delete(newOutputPdfPath);
            }

            // 重命名輸出PDF文件  
            File.Move(outputPdfPath, newOutputPdfPath);

        }

四、導(dǎo)出結(jié)果

可將一個(gè)文件夾內(nèi)的所有PDF合并成一個(gè)PDF文件導(dǎo)出。

在這里插入圖片描述

五、完整源碼

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
using Microsoft.Win32;
using System.Diagnostics;

namespace PDF合并
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // 全局變量
        private static string lastFolderPath = ""; // 記錄上次選擇文件夾的路徑
        private static string inputFolderPath = ""; // 輸入文件夾路徑
        private static string outputFolderPath = ""; // 輸出文件夾路徑


        /// <summary>
        /// 按鈕,選擇文件夾路徑
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSelectPath_Click(object sender, EventArgs e)
        {
            // 讀取上次選擇的文件夾路徑  
            string registryKey = "Software\\PDF合并"; // 用您自己的應(yīng)用程序名稱替換YourAppName  
            if (Registry.CurrentUser.OpenSubKey(registryKey) != null)
            {
                lastFolderPath = Registry.CurrentUser.OpenSubKey(registryKey).GetValue("LastFolder") as string;
            }

            // 創(chuàng)建并顯示一個(gè)選擇文件夾的對(duì)話框  
            FolderBrowserDialog folderDialog = new FolderBrowserDialog();
            folderDialog.Description = "選擇包含PDF文件的文件夾:";
            folderDialog.SelectedPath = lastFolderPath; // 設(shè)置默認(rèn)路徑為用戶上次選擇的文件夾  

            if (folderDialog.ShowDialog() == DialogResult.OK)
            {
                // 獲取用戶選擇的文件夾路徑  
                inputFolderPath = folderDialog.SelectedPath;

                // 創(chuàng)建輸出文件夾路徑(如果它不存在則創(chuàng)建它)  
                outputFolderPath = Path.Combine(inputFolderPath, "Output");

                if (!Directory.Exists(outputFolderPath))
                {
                    Directory.CreateDirectory(outputFolderPath);
                }
            }

            txtPath.Text = inputFolderPath;
        }

        /// <summary>
        /// 按鈕,確認(rèn)合并PDF
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOK_Click(object sender, EventArgs e)
        {
            if (txtPath.Text == string.Empty)
            {
                MessageBox.Show("請(qǐng)選擇要合并的文件夾路徑!");
            }
            else
            {
                // 調(diào)用合并PDF的方法  
                MergePDFs(inputFolderPath, outputFolderPath, "123");

                MessageBox.Show("合并完成!");

                // 打開(kāi)導(dǎo)出的文件夾路徑  
                Process.Start(outputFolderPath);
            }
        }

        /// <summary>
        /// 合并多個(gè)PDF文件為一個(gè)PDF文件
        /// </summary>
        /// <param name="inputFolderPath"></param>
        /// <param name="outputFolderPath"></param>
        /// <param name="outputPdfName"></param>
        public void MergePDFs(string inputFolderPath, string outputFolderPath, string outputPdfName)
        {
            // 獲取輸入文件夾中所有的PDF文件  
            string[] inputFiles = Directory.GetFiles(inputFolderPath, "*.pdf");

            // 創(chuàng)建輸出PDF文件路徑  
            string outputPdfPath = Path.Combine(outputFolderPath, outputPdfName);

            // 創(chuàng)建輸出PDF文件  
            using (FileStream stream = new FileStream(outputPdfPath, FileMode.Create))
            {
                Document pdfDoc = new Document();
                PdfCopy pdf = new PdfCopy(pdfDoc, stream);
                pdfDoc.Open();

                foreach (string file in inputFiles)
                {
                    // 讀取每個(gè)PDF文件并將其頁(yè)面添加到輸出PDF中  
                    PdfReader reader = new PdfReader(file);
                    int n = reader.NumberOfPages;
                    for (int i = 1; i <= n; i++)
                    {
                        pdf.AddPage(pdf.GetImportedPage(reader, i));
                    }
                    reader.Close();
                }

                if (pdfDoc != null) pdfDoc.Close();
                stream.Close();
            }

            string newOutputPdfPath = Path.Combine(outputFolderPath, "AllPDF_Merged.pdf");

            // 檢查新輸出文件是否已存在  
            if (File.Exists(newOutputPdfPath))
            {
                // 如果已存在,則刪除舊文件并創(chuàng)建新文件  
                File.Delete(newOutputPdfPath);
            }

            // 重命名輸出PDF文件  
            File.Move(outputPdfPath, newOutputPdfPath);

        }

     }
}

到此這篇關(guān)于C#實(shí)現(xiàn)PDF合并的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)C# PDF合并內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 淺析C#中不同格式請(qǐng)求的區(qū)別

    淺析C#中不同格式請(qǐng)求的區(qū)別

    form-data?請(qǐng)求和?x-www-form-urlencoded?請(qǐng)求是兩種常見(jiàn)的?HTTP?請(qǐng)求體格式,這篇文章主要為大家詳細(xì)介紹了二者的區(qū)別與應(yīng)用,希望對(duì)大家有所幫助
    2023-08-08
  • 在Winform動(dòng)態(tài)啟動(dòng)、控制臺(tái)命令行的方法

    在Winform動(dòng)態(tài)啟動(dòng)、控制臺(tái)命令行的方法

    winForm 程序輸出類型為 windows 程序(不是命令行程序)在運(yùn)行時(shí)想輸入一些信息編譯開(kāi)發(fā)調(diào)試,如何實(shí)現(xiàn)這一功能
    2013-02-02
  • C#代碼實(shí)現(xiàn)在Excel中創(chuàng)建雷達(dá)圖

    C#代碼實(shí)現(xiàn)在Excel中創(chuàng)建雷達(dá)圖

    本文演示了如何在?C#?中創(chuàng)建填充型雷達(dá)圖,通過(guò)設(shè)置數(shù)據(jù)、樣式與圖表屬性,實(shí)現(xiàn)多維數(shù)據(jù)的可視化展示,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2026-05-05
  • C#實(shí)現(xiàn)的SQL備份與還原功能示例

    C#實(shí)現(xiàn)的SQL備份與還原功能示例

    這篇文章主要介紹了C#實(shí)現(xiàn)的SQL備份與還原功能,結(jié)合具體實(shí)例形式分析了C#操作數(shù)據(jù)庫(kù)實(shí)現(xiàn)SQL備份與還原相關(guān)的控件、SQL連接、文件等操作技巧,需要的朋友可以參考下
    2017-06-06
  • 重溫C# clr 筆記總結(jié)

    重溫C# clr 筆記總結(jié)

    本篇文章是對(duì)以前學(xué)習(xí)C# clr做的一些筆記,現(xiàn)在拿出來(lái)和大家分享下,希望需要的朋友能參考一下
    2013-05-05
  • WPF通過(guò)線程使用ProcessBar的方法詳解

    WPF通過(guò)線程使用ProcessBar的方法詳解

    這篇文章主要給大家介紹了關(guān)于WPF通過(guò)線程使用ProcessBar的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用WPF具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • C#難點(diǎn)逐個(gè)擊破(2):out返回參數(shù)

    C#難點(diǎn)逐個(gè)擊破(2):out返回參數(shù)

    之前提到ref是將原方法中的參數(shù)影響的結(jié)果返回到調(diào)用它的方法中,out與ref類似,相比之下,ref傳遞參數(shù)的地址,out是返回值。
    2010-02-02
  • C#文件讀寫(xiě)操作詳細(xì)操作指南

    C#文件讀寫(xiě)操作詳細(xì)操作指南

    這篇文章主要給大家介紹了關(guān)于C#文件讀寫(xiě)操作詳細(xì)操作指南,在后端開(kāi)發(fā)中使用C#語(yǔ)言進(jìn)行文件操作是一個(gè)常見(jiàn)的任務(wù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • Silverlight實(shí)現(xiàn)星星閃爍動(dòng)畫(huà)

    Silverlight實(shí)現(xiàn)星星閃爍動(dòng)畫(huà)

    這篇文章主要為大家詳細(xì)介紹了Silverlight實(shí)現(xiàn)星星閃爍動(dòng)畫(huà),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • C#使用Lazy實(shí)現(xiàn)延遲加載的方法示例

    C#使用Lazy實(shí)現(xiàn)延遲加載的方法示例

    在C#中,Lazy< T> 類是一個(gè)非常有用的工具,它可以用于延遲加載值,在本文中,我們將詳細(xì)介紹 Lazy< T> 的實(shí)現(xiàn)機(jī)制和用法,并提供一些示例來(lái)展示它的優(yōu)勢(shì),文中通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-06-06

最新評(píng)論

庐江县| 布尔津县| 大埔县| 柳州市| 株洲市| 溧水县| 大新县| 湘阴县| 永城市| 嘉黎县| 桦川县| 平远县| 徐汇区| 礼泉县| 濉溪县| 阜新| 嘉义县| 大名县| 大冶市| 阳江市| 金山区| 宁远县| 波密县| 淳安县| 双江| 慈溪市| 南汇区| 海安县| 青岛市| 寿阳县| 张家界市| 舞阳县| 周口市| 建水县| 遂宁市| 犍为县| 肇源县| 嘉祥县| 海口市| 平舆县| 上杭县|