.Net C# 免费PDF合成软件

最近用到pdf合成,发现各种软件均收费啊,这个技术非常简单,别人写好的库一大把,这里用到了PDFsharp,项目地址Home of PDFsharp and MigraDoc Foundation

软件下载地址

https://download.csdn.net/download/g313105910/88014569

源码下载地址

https://download.csdn.net/download/g313105910/88014573

废话不多说,上WPF代码

cs 复制代码
<Window x:Class="mergePDF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:mergePDF"
        mc:Ignorable="d"
        Title="PDF合成器,有顺序要求请用数字给文件命名,从小到大排序" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="10*"/>
            <RowDefinition Height="33*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Button Content="合成" HorizontalAlignment="Left" Margin="737,0,0,0" VerticalAlignment="Center" Click="ButtonStart_Click" Height="19" Width="28"/>
        <Button Content="选择目录" HorizontalAlignment="Left" Margin="675,0,0,0" VerticalAlignment="Center" Click="ButtonUrl_Click" Height="19" Width="52"/>
        <TextBox x:Name="Url_Text" HorizontalAlignment="Left" Margin="60,0,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Center" Width="600" Height="17"/>
        <Label Content="Url:" HorizontalAlignment="Left" Margin="25,0,0,0" VerticalAlignment="Center"/>
        <TextBox x:Name="Info_Text" TextWrapping="Wrap" VerticalScrollBarVisibility="Visible"  Text="" Grid.Row="1"/>
    </Grid>
</Window>
cs 复制代码
using FolderBrowserEx;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using System;
using System.Collections.Generic;
using System.IO;
using System.Windows;

namespace mergePDF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void ButtonStart_Click(object sender, RoutedEventArgs e)
        {
            Info_Text.Text = string.Empty;
            CombinePdfFiles(Url_Text.Text);
        }

        public void CombinePdfFiles(string folderPath)
        {
            try
            {
                //读取文件夹中的文件夹
                int fileCount = 0;
                int pageCount = 0;
                PdfDocument outPdfFile = new PdfDocument();
                List<string> fileNameList = new List<string>();
                List<string> fileError = new List<string>();
                fileNameList.Add("开始合并");
                foreach (var filename in Directory.GetFiles(folderPath))
                {
                    if (System.IO.Path.GetExtension(filename) == ".pdf")
                    {
                        try
                        {
                            PdfDocument pdfFile = PdfReader.Open(filename, PdfDocumentOpenMode.Import);
                            fileCount++;
                            pageCount += pdfFile.PageCount;
                            int pageIndex = 0;
                            foreach (var pdfPage in pdfFile.Pages)
                            {
                                outPdfFile.AddPage(pdfPage);
                                pageIndex++;
                                fileNameList.Add(string.Format("文件名:{0}\t\t\t\t第{1}页\t文件共有{2}页", System.IO.Path.GetFileName(filename), pageIndex, pdfFile.PageCount));
                            }
                        }
                        catch (Exception ex)
                        {
                            fileError.Add(System.IO.Path.GetFileName(filename));
                            Info_Text.Text += ex.Message + "\r\n";
                        }
                    }
                }
                string combineResult = "";
                if (fileCount > 0)
                {
                    //导出pdf文件
                    string timeTag = DateTime.Now.ToString("MMdd_HH_mm_ss");
                    SavePdfFile(folderPath + "\\合并", timeTag + ".pdf", outPdfFile);
                    fileNameList.Add(string.Format("共 {0} 个文件,共 {1} 页。", fileCount, pageCount));
                    if (fileError.Count > 0)
                    {
                        fileNameList.Add("合并失败文件:");
                        foreach (string p in fileError)
                        {
                            fileNameList.Add(p);
                        }
                    }
                    SaveTxtFile(folderPath + "\\合并", timeTag + ".txt", fileNameList);
                }
                combineResult = string.Format("合并成功文件数量:{0}", fileCount);
                if (fileError.Count > 0)
                {
                    combineResult += "\r\n";
                    combineResult += string.Format("合并失败文件数量:{0}", fileError.Count);
                }
                foreach(var str in fileNameList)
                {
                    Info_Text.Text += str + "\r\n"; ;
                }
                Info_Text.Text += combineResult + "\r\n"; 
            }
            catch (Exception ex)
            {
                Info_Text.Text+=ex.Message + "\r\n";
            }
            Info_Text.ScrollToEnd();
        }
        private void SavePdfFile(string folderPath, string fileName, PdfDocument pdfFile)
        {
            if (!Directory.Exists(folderPath))
            {
                Directory.CreateDirectory(folderPath);
            }
            pdfFile.Save(folderPath + "\\" + fileName);
        }
        private void SaveTxtFile(string folderPath, string fileName, List<string> content)
        {
            if (!Directory.Exists(folderPath))
            {
                Directory.CreateDirectory(folderPath);
            }
            string fileFullPath = folderPath + "\\" + fileName;
            if (!File.Exists(fileFullPath))
            {
                var newFile = File.CreateText(fileFullPath);
                newFile.Close();
            }
            using (StreamWriter sw = new StreamWriter(fileFullPath, true))
            {
                foreach (string line in content)
                {
                    sw.WriteLine(line);
                }
                sw.Close();
            }
        }

        private void ButtonUrl_Click(object sender, RoutedEventArgs e)
        {
            FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
            folderBrowserDialog.Title = "Select a folder";
            //folderBrowserDialog.InitialFolder = @"C:\";
            folderBrowserDialog.AllowMultiSelect = false;
            if (folderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                Url_Text.Text = folderBrowserDialog.SelectedFolder;
            }
        }
    }
}

使用方法->打开软件

选择目录

合成成功

合并后的文件和日志

相关推荐
开开心心就好7 小时前
发票合并打印工具,多页布局设置实时预览
linux·运维·服务器·windows·pdf·harmonyos·1024程序员节
软件工程小施同学10 小时前
区块链论文速读 CCF A--VLDB 2025 (1) 附pdf下载
pdf·区块链
Java面试题总结2 天前
基于 Java 的 PDF 文本水印实现方案(iText7 示例)
java·python·pdf
傻啦嘿哟2 天前
Python操作PDF页面详解:删除指定页的完整方案
开发语言·python·pdf
m5655bj2 天前
使用 C# 修改 PDF 页面尺寸
java·pdf·c#
geovindu3 天前
python: 简单提取PDF文档内文字
开发语言·python·pdf
m0_694845573 天前
HandBrake 是什么?视频转码工具使用与服务器部署教程
服务器·前端·pdf·开源·github·音视频
yivifu3 天前
使用PyMuPdf删除PDF文档中的水印
pdf·pymupdf·去水印
ComPDFKit3 天前
ComPDF的产品升级:从工具包到PDF服务
pdf
占疏3 天前
pdf文件解析
pdf