首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将合并的pdf分解成单独的文件

将合并的pdf分解成单独的文件
EN

Stack Overflow用户
提问于 2018-01-19 16:04:23
回答 1查看 446关注 0票数 0

我看到的例子,一个组合的pdf文件可以分裂成多个文件,但它有可能分割一个合并的pdf的名称的基础文件。例如,通过合并文件a.pdf、b.pdf和c.pdf来创建组合pdf cp。我希望将合并的pdf cp拆分回它的组件文件a.pdf、b.pdf和c.pdf。我看过pdfsharp,但我没有办法做到。另一家公用事业公司是否符合这一要求?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-22 14:52:34

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

例如,您可以使用书签来存储这些信息。

如下所示:

代码语言:javascript
复制
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);
    }
}

这样你就可以检索到这些信息了。

如下所示:

代码语言:javascript
复制
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();
    }
}

注意,代码使用GemBox.Pdf,您可以在这里找到合并拆分示例。

最后,也许有一种更明智的方法可以存储所需的信息,但是这也应该是可行的,您可以尝试使用以下方法:

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48345067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档