最近用到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;
}
}
}
}
使用方法->打开软件
选择目录
合成成功
合并后的文件和日志