Разделить PDF на отдельные файлы на основе текста, найденного с помощью регулярных выражений - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть сплиттер 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} ПОДПИСАНО AFFIDAVIT"затем извлеките все эти документы, хранящие их вместе, пока не найдет следующий уникальный" TP [0-9] {6} SIGNED AFFIDAVIT"?

так, чтобы конец выглядел так:

TP02433 SIGNED AFFIDAVIT (1 - 3)
TP02354 SIGNED AFFIDAVIT (4 - 6) ?

Вот мой пока рабочий код:

Imports System.IO
Imports Bytescout.PDFExtractor
Imports Microsoft.Office.Interop
Imports System.IO.Path
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 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                

                            PageTypeName = Regex.Replace(extractor.TextFound.Text, "[^A-Za-z0-9\-/#\s]", "")

                    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

Я бы использовал ExtractPageRange, страницы меняются.Поэтому мне было интересно, может ли этот код найти первый "* TP [0-9] {6} * * SIGNED AFFIDAVIT *", извлекающий ВСЕ страницы после этого заголовка, пока он не достигнет следующего "* TP [0-9] {6} * * ПОДПИСАНО AFFIDAVIT * "и делает то же самое, пока документ pdf полностью не разделен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...