将合并的pdf拆分为单个文件

将合并的pdf拆分为单个文件,pdf,pdfsharp,Pdf,Pdfsharp,我看到了一些示例,其中一个组合的pdf文件可以拆分为多个文件,但是否可以按基础文件的名称拆分组合的pdf。例如,组合pdf cp是通过组合文件a.pdf、b.pdf和c.pdf创建的。我想将组合的pdf cp拆分回其组件文件a.pdf、b.pdf和c.pdf。我已经看过pdfsharp了,但是我没有找到一种方法。另一个实用程序是否符合要求?如果您也控制合并部分(换句话说,如果您自己生成合并的PDF),那么可能有一种方法。您可以将该信息、原始PDF文件的范围和名称存储在生成的组合PDF文件中的某个

我看到了一些示例,其中一个组合的pdf文件可以拆分为多个文件,但是否可以按基础文件的名称拆分组合的pdf。例如,组合pdf cp是通过组合文件a.pdf、b.pdf和c.pdf创建的。我想将组合的pdf cp拆分回其组件文件a.pdf、b.pdf和c.pdf。我已经看过pdfsharp了,但是我没有找到一种方法。另一个实用程序是否符合要求?

如果您也控制合并部分(换句话说,如果您自己生成合并的PDF),那么可能有一种方法。您可以将该信息、原始PDF文件的范围和名称存储在生成的组合PDF文件中的某个位置

例如,您可以使用书签来存储此信息。
如下所示:

private static void MergePdfs(string[] files, string outputFile)
{
    using (PdfDocument document = new PdfDocument())
    {
        foreach (string file in files)
            using (PdfDocument sourceDocument = PdfDocument.Load(file))
                foreach (PdfPage sourcePage in sourceDocument.Pages)
                {
                    PdfPage clonedPage = document.Pages.AddClone(sourcePage);
                    PdfOutline outline = document.Outlines.AddLast(Path.GetFileName(file));
                    outline.SetDestination(clonedPage, PdfDestinationViewType.FitPage);
                }

        document.Save(outputFile);
    }
}
private static void SplitPdfs(string inputFile, string outputFolder)
{
    using (PdfDocument document = PdfDocument.Load(inputFile))
    {
        PdfOutline outline = document.Outlines.First;
        PdfDocument destination = null;
        string file = null;
        int index = 0;

        do
        {
            if (file != outline.Title)
            {
                if(destination != null)
                {
                    destination.Save(Path.Combine(outputFolder, file));
                    destination.Close();
                }

                file = outline.Title;
                destination = new PdfDocument();
            }

            destination.Pages.AddClone(document.Pages[index++]);
            outline = outline.Next;
        }
        while (outline != null);

        destination.Save(Path.Combine(outputFolder, file));
        destination.Close();
    }
}
string[] pdfs = { "Sample1.pdf", "Sample2.pdf", "Sample3.pdf" };
string resultFile = "Result.pdf";

MergePdfs(pdfs, resultFile);

string resultFolder = Path.Combine(Path.GetDirectoryName(resultFile),
    Path.GetFileNameWithoutExtension(resultFile));
Directory.CreateDirectory(resultFolder);

SplitPdfs(resultFile, resultFolder);
然后您将能够检索该信息。
如下所示:

private static void MergePdfs(string[] files, string outputFile)
{
    using (PdfDocument document = new PdfDocument())
    {
        foreach (string file in files)
            using (PdfDocument sourceDocument = PdfDocument.Load(file))
                foreach (PdfPage sourcePage in sourceDocument.Pages)
                {
                    PdfPage clonedPage = document.Pages.AddClone(sourcePage);
                    PdfOutline outline = document.Outlines.AddLast(Path.GetFileName(file));
                    outline.SetDestination(clonedPage, PdfDestinationViewType.FitPage);
                }

        document.Save(outputFile);
    }
}
private static void SplitPdfs(string inputFile, string outputFolder)
{
    using (PdfDocument document = PdfDocument.Load(inputFile))
    {
        PdfOutline outline = document.Outlines.First;
        PdfDocument destination = null;
        string file = null;
        int index = 0;

        do
        {
            if (file != outline.Title)
            {
                if(destination != null)
                {
                    destination.Save(Path.Combine(outputFolder, file));
                    destination.Close();
                }

                file = outline.Title;
                destination = new PdfDocument();
            }

            destination.Pages.AddClone(document.Pages[index++]);
            outline = outline.Next;
        }
        while (outline != null);

        destination.Save(Path.Combine(outputFolder, file));
        destination.Close();
    }
}
string[] pdfs = { "Sample1.pdf", "Sample2.pdf", "Sample3.pdf" };
string resultFile = "Result.pdf";

MergePdfs(pdfs, resultFile);

string resultFolder = Path.Combine(Path.GetDirectoryName(resultFile),
    Path.GetFileNameWithoutExtension(resultFile));
Directory.CreateDirectory(resultFolder);

SplitPdfs(resultFile, resultFolder);
注意,代码使用了,您可以在这里找到和示例。
最后,可能有一种更聪明的方法来存储必要的信息,但这也应该可以,您可以尝试以下方法:

private static void MergePdfs(string[] files, string outputFile)
{
    using (PdfDocument document = new PdfDocument())
    {
        foreach (string file in files)
            using (PdfDocument sourceDocument = PdfDocument.Load(file))
                foreach (PdfPage sourcePage in sourceDocument.Pages)
                {
                    PdfPage clonedPage = document.Pages.AddClone(sourcePage);
                    PdfOutline outline = document.Outlines.AddLast(Path.GetFileName(file));
                    outline.SetDestination(clonedPage, PdfDestinationViewType.FitPage);
                }

        document.Save(outputFile);
    }
}
private static void SplitPdfs(string inputFile, string outputFolder)
{
    using (PdfDocument document = PdfDocument.Load(inputFile))
    {
        PdfOutline outline = document.Outlines.First;
        PdfDocument destination = null;
        string file = null;
        int index = 0;

        do
        {
            if (file != outline.Title)
            {
                if(destination != null)
                {
                    destination.Save(Path.Combine(outputFolder, file));
                    destination.Close();
                }

                file = outline.Title;
                destination = new PdfDocument();
            }

            destination.Pages.AddClone(document.Pages[index++]);
            outline = outline.Next;
        }
        while (outline != null);

        destination.Save(Path.Combine(outputFolder, file));
        destination.Close();
    }
}
string[] pdfs = { "Sample1.pdf", "Sample2.pdf", "Sample3.pdf" };
string resultFile = "Result.pdf";

MergePdfs(pdfs, resultFile);

string resultFolder = Path.Combine(Path.GetDirectoryName(resultFile),
    Path.GetFileNameWithoutExtension(resultFile));
Directory.CreateDirectory(resultFolder);

SplitPdfs(resultFile, resultFolder);

在合并文件中没有标准的方式存储原始文件的名称和页面范围。这太糟糕了。尼克松·波辛——我喜欢你的回答,但不幸的是,我们不能控制合并部分。如果我需要的话,我会记住你的解决方案。非常感谢。