У меня есть сплиттер PDF, использующий ByteScout.PDFExtractor. Мой код ищет уникальный идентификационный заголовок, который " TP ###### SIGNED AFFIDAVIT "
# может быть любым целым числом от 0 до 9. Я использую регулярные выражения для поиска таких заголовков, как это:
Dim regexPattern = "\*TP[0-9]{6}\* \*SIGNED AFFIDAVIT\*"
Это работает. Дело в том, что он разбивает документ на страницу, поэтому, когда он разбивается, я получаю в своем каталоге следующее:
TP02433 SIGNED AFFIDAVIT 1
TP02433 SIGNED AFFIDAVIT 2
TP02433 SIGNED AFFIDAVIT 3
TP02354 SIGNED AFFIDAVIT 4
TP02354 SIGNED AFFIDAVIT 5
TP02354 SIGNED AFFIDAVIT 6 ...
У меня такой вопрос: что я могу сделать с моим кодом, чтобы, когда он находит, скажем, например, TP02433, он держал эти страницы вместе, пока не нашел следующий TP #?
Есть ли способ найти "* TP [0-9] {6} * * SIGNED AFFIDAVIT *", а затем извлечь все эти документы, держа их вместе, пока не найдет следующий уникальный "* TP [0-9] {6} * * ПОДПИСАННЫЙ АФФИДАВИТ * "?
так, чтобы конец выглядел так:
TP02433 ПОДПИСАННЫЙ АФФИДАВИТ (1 - 3)
TP02354 ПОДПИСАННЫЙ АФФИДАВИТ (4 - 6)
Вот мой код:
Imports System.IO
Imports Bytescout.PDFExtractor
Imports Microsoft.Office.Interop
Imports System.IO.Path
Imports Microsoft.Office.Interop.Excel
Imports System.Text
Imports System.Text.RegularExpressions
Module Module1
Sub Main()
Dim unmerged = Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Tesspdf")
Dim pdfFile As String = "G:\Word\Department Folders\Pre-Suit\Xavier\MPOP.pdf"
Dim pageTypes As New List(Of PageType)
Dim extractor As New TextExtractor()
extractor.WordMatchingMode = WordMatchingMode.ExactMatch
extractor.LoadDocumentFromFile(pdfFile)
Dim pageCount = extractor.GetPageCount()
Dim currentPageTypeName = "UNKNOWN"
Dim PageTypeName = "test"
extractor.RegexSearch = True
Dim regexPattern = "\*TP[0-9]{6}\* \*SIGNED AFFIDAVIT\*"
For i = 0 To pageCount - 1
If extractor.Find(i, regexPattern, False) Then
Do
For Each element As SearchResultElement In extractor.FoundText.Elements
PageTypeName = Regex.Replace(element.Text, "[^A-Za-z0-9\-/#\s]", "")
Next element
Loop While extractor.FindNext()
currentPageTypeName = PageTypeName
End If
Using splitter As New DocumentSplitter() With {.OptimizeSplittedDocuments = True}
Dim pageNumber = i + 1 ' (!) page number in ExtractPage() is 1-based
If Not Directory.Exists(unmerged) Then
Directory.CreateDirectory(unmerged)
End If
Dim outputfile = Combine(unmerged, currentPageTypeName & " " & pageNumber & ".pdf")
splitter.ExtractPage(pdfFile, outputfile, pageNumber)
End Using
Next
extractor.Dispose()
End Sub
End Module