首页 > 解决方案 > 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 和我的朋友的建议。

标签: c#pdfsharp

解决方案


您可以按照以下方法进行操作;

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);
            }
        }
    }
}

推荐阅读