c# - C# 和 PDFsharp 按名称合并目录中的 2 个 pdf 文件。有许多
问题描述
嘿,伙计们请多多包涵,因为我对 C# 和 Visual Studio 还很陌生。
我有一堆 PDF 被转储到一个目录中。通常在 300 左右。每个 PDF 看起来像这样
TP031041 TP031041_1 TP031337 TP031337_1 ...等
手动完成的方法是将文件号与其相同的文件号+下划线和1结合起来
TP031041 + TP031041_1 并在它们合并后,保留第一个文件的名称,因此 TP031041 + TP031041_1 = TP031041
编辑:这是经过多次试验和错误后的工作代码:
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
private const string dir = @"C:\Users\Pr0x1mo\Desktop\IMAGES\";
static void Main(string[] args)
{
//files in files folder and named like: TP031041 TP031041 TP031337 TP031337_1
File.SetAttributes(dir, FileAttributes.Normal);
string[] files = Directory.GetFiles(dir, "*.pdf");
IEnumerable<IGrouping<string, string>> groups = files.GroupBy(n => n.Split('.')[0].Split('_')[0]);
//string f = files[0].Split('_')[0];
foreach (var items in groups)
{
Console.WriteLine(items.Key);
PdfDocument outputPDFDocument = new PdfDocument();
foreach (var pdfFile in items)
{
Merge(outputPDFDocument, pdfFile);
}
outputPDFDocument.Save(Path.GetDirectoryName(items.Key) + @"\Merge\" + Path.GetFileNameWithoutExtension(items.Key) + ".pdf");
}
Console.ReadKey();
}
private static void Merge(PdfDocument outputPDFDocument, string pdfFile)
{
PdfDocument inputPDFDocument = PdfReader.Open(pdfFile, PdfDocumentOpenMode.Import);
outputPDFDocument.Version = inputPDFDocument.Version;
foreach (PdfPage page in inputPDFDocument.Pages)
{
outputPDFDocument.AddPage(page);
}
}
}
}
编辑:有效的新代码
所以这是我编辑的新代码,感谢 murat 和我的朋友的建议。
解决方案
您可以按照以下方法进行操作;
using System;
using System.IO;
using System.Linq;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
namespace pdf_merger
{
class Program
{
static void Main(string[] args)
{
//files in files folder and named like: TP031041 TP031041 TP031337 TP031337_1
var files = Directory.GetFiles("files", "*.pdf");
var groups = files.GroupBy(n => n.Split('.')[0].Split('_')[0]);
foreach (var items in groups)
{
Console.WriteLine(items.Key);
PdfDocument outputPDFDocument = new PdfDocument();
foreach (var pdfFile in items)
{
Merge(outputPDFDocument, pdfFile);
}
outputPDFDocument.Save(items.Key.Replace("files", "files/compiled") + ".pdf");
}
Console.ReadKey();
}
private static void Merge(PdfDocument outputPDFDocument, string pdfFile)
{
PdfDocument inputPDFDocument = PdfReader.Open(pdfFile, PdfDocumentOpenMode.Import);
outputPDFDocument.Version = inputPDFDocument.Version;
foreach (PdfPage page in inputPDFDocument.Pages)
{
outputPDFDocument.AddPage(page);
}
}
}
}
推荐阅读
- c++ - 如何从多图中删除特定的重复项?
- tfs - 有序测试的测试结果在 Azure Devops 管道中分组
- list - 如何仅绘制 [x,y] 值列表中每个 x 值的最高 y 值
- python-3.x - boto3在python中有条件地删除
- tsql - 如何将浮点变量定义的天数添加到 SQL 中的日期
- c# - C#:如何安装 System.Web
- python - 除了一个变量坐标,如何创建一个到处都有冒号的 Numpy 索引?
- generics - 可以改变数组
到 IntArray、FloatArray、CharArray ...ECT,在 Kotlin 中自动使用 Generic? - javascript - 确定一个字符串是否是另一个字符串的子集的时间复杂度
- regex - 正则表达式捕获开方括号和右方括号之间的内容