我看到的例子,一个组合的pdf文件可以分裂成多个文件,但它有可能分割一个合并的pdf的名称的基础文件。例如,通过合并文件a.pdf、b.pdf和c.pdf来创建组合pdf cp。我希望将合并的pdf cp拆分回它的组件文件a.pdf、b.pdf和c.pdf。我看过pdfsharp,但我没有办法做到。另一家公用事业公司是否符合这一要求?
发布于 2018-01-22 14:52:34
如果您也控制了合并部分(换句话说,如果您自己生成合并的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,您可以在这里找到合并和拆分示例。
最后,也许有一种更明智的方法可以存储所需的信息,但是这也应该是可行的,您可以尝试使用以下方法:
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);https://stackoverflow.com/questions/48345067
复制相似问题