我一直致力于VB.NET项目,使用SQL数据库和许多输入PDF模板动态创建PDF格式的报告包。简而言之,由于Business Objects创建输入文件的方式,允许输入已编译的PDF报告而不是单个报告模板页面会更有效。但是,为了使其工作,我们需要使用BOBJ创建的书签将输入的PDF文件拆分为多个部分。我们不确定每个书签的范围内有多少页,但需要一致的分割文件命名约定,以便该过程的下一部分可以选择正确的模板并将它们合并到所需的组合中。
使用名为PDFSHARP的.Net库设计并运行此过程的第二部分。我已经使用他们网站上的示例编写了一些代码,这些代码将输入PDF文件分成输入文件的每页一个部分,但是不明白如何使用书签将其拆分。
如果我能理解如何解析PDF并读取包含起始页和结束页面以及书签名称的书签的元数据,那么我想我可以完成它。
输入PDF格式的示例如下: https://drive.google.com/open?id=0B0GZGW6CFCI-UWY2WGRvV0dQSWZSNnNOWlp4R21zbFVPZDBn
有5个书签(TID01,TID02 ......)和6个页面。部分TID04将有两页输出。
我需要的文件名格式为“ExamplePDF_TID01.pdf”
非常感谢任何前进的帮助。 - 看一下该项目的维基,它似乎不再活跃,而其他人过去曾问过这个问题,但我找不到任何答案。
按页面分割的代码:
Sub Splitfiles()
Dim inputdir As String = "O:\Transformation\Standardisation\Input PDFs"
Dim outputdir As String = "O:\Transformation\Standardisation\Input PDFs\output\"
'inputdir = folder path containing input files
Dim fileEntries As String() = Directory.GetFiles(inputdir)
Dim filename As String
Dim pdfpage As PdfPage
Dim ccid As String
Dim pageid As Integer
Dim outputfilename As String
For Each filename In fileEntries
Dim importdoc As PdfDocument = PdfReader.Open(filename, PdfSharp.Pdf.IO.PdfDocumentOpenMode.Import)
Dim count As Integer = importdoc.PageCount
Dim x = 0
Do Until x = count
Dim outputdoc As PdfDocument = New PdfDocument
pdfpage = importdoc.Pages(x)
outputdoc.AddPage(pdfpage)
ccid = Strings.Right(filename, Len(filename) - Len(inputdir)) 'expand this to find CC ID
ccid = Strings.Left(ccid, Len(ccid) - 4)
pageid = x
outputfilename = outputdir & ccid & "_" & pageid & ".pdf"
outputdoc.Save(outputfilename)
x = x + 1
Loop
Next
End Sub
我开始按书签分割但无法完成的代码:
Sub SplitPDFByBookmark()
Dim inputfile As String = "O:\Transformation\Standardisation\Input PDFs\Business Sub Area Report - Project Management - FY16_FP02 - 17062016_0709.PDF"
Dim outputdir As String = "O:\Transformation\Standardisation\Input PDFs\output\"
'inputdir = folder path containing input files
'Dim fileEntries As String() = Directory.GetFiles(inputdir)
Dim filename As String
Dim pdfpage As PdfPage
Dim ccid As String
Dim pageid As Integer
Dim outputfilename As String
filename = inputfile
'For Each filename In fileEntries
Dim importdoc As PdfDocument = PdfReader.Open(filename, PdfSharp.Pdf.IO.PdfDocumentOpenMode.Import)
Dim count As Integer = importdoc.PageCount
Dim x = 0
For Each bookmark In importdoc.Outlines
Dim outputdoc As PdfDocument = New PdfDocument
pdfpage = importdoc.Pages(importdoc.Outlines.)
outputdoc.AddPage(pdfpage)
pageid = x
outputfilename = outputdir & "OutputFile_" & pageid & ".pdf"
outputdoc.Save(outputfilename)
x = x + 1
Next
'Next
End Sub
提前感谢您的帮助!