最近用到pdf合成,发现各种软件均收费啊,这个技术非常简单,别人写好的库一大把,这里用到了PDFsharp,项目地址Home of PDFsharp and MigraDoc Foundation
软件下载地址
https://download.csdn.net/download/g313105910/88014569
源码下载地址
https://download.csdn.net/download/g313105910/88014573
废话不多说,上WPF代码
<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>
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;}}}
}
使用方法->打开软件
选择目录
合成成功
合并后的文件和日志