将合并的 pdf 拆分成单独的文件
Split a combined pdf into its individual files
我看到可以将合并的 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();
}
}
请注意,代码使用 GemBox.Pdf, you can find here the merge and the split 个示例。
最后,可能有一种更聪明的方法来存储必要的信息,但尽管如此,这应该也能正常工作,您可以尝试以下方法:
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);
我看到可以将合并的 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();
}
}
请注意,代码使用 GemBox.Pdf, you can find here the merge and the split 个示例。
最后,可能有一种更聪明的方法来存储必要的信息,但尽管如此,这应该也能正常工作,您可以尝试以下方法:
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);