itextsharp искать в PDF-файлах и извлекать найденные страницы в другой PDF-файл - PullRequest
0 голосов
/ 16 июня 2020

Может ли кто-нибудь показать мне, как извлекать страницы на основе номеров страниц, найденных в поиске, и создавать новый PDF-файл для печати? Я имею в виду, что я буду искать pdf, используя vb. net, и страницы, на которых есть мой ответ, будут извлечены в другой pdf, и в конце поиска он распечатает новый pdf. Что я делал до сих пор, так это то, что я выполнил поиск, и он возвращает номер страницы для правильных результатов, но я не знаю отсюда, что делать, см. Ниже:

Public Shared Function SearchTextFromPdf(ByVal sourcePdf As String, ByVal searchPhrase As String, Optional ByVal caseSensitive As Boolean = False) As List(Of Integer)
    Dim fBrowse As New OpenFileDialog
    With fBrowse

        .Filter = "PDF Files(*.pdf)|*.pdf|All Files(*.*)|*.*"
        .Title = "Choose Pdf"
    End With
    If fBrowse.ShowDialog() = Windows.Forms.DialogResult.OK Then

        sourcePdf = fBrowse.FileName
    Else
        Exit Function

    End If

    Dim foundList As New List(Of Integer)
    Dim raf As iTextSharp.text.pdf.RandomAccessFileOrArray = Nothing
    Dim reader As iTextSharp.text.pdf.PdfReader = Nothing
    Try
        raf = New iTextSharp.text.pdf.RandomAccessFileOrArray(sourcePdf)
        reader = New iTextSharp.text.pdf.PdfReader(raf, Nothing)
        If caseSensitive = False Then
            searchPhrase = searchPhrase.ToLower()
        End If
        For i As Integer = 1 To reader.NumberOfPages()
            Dim pageText As String = iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(reader, i)
            If caseSensitive = False Then
                pageText = pageText.ToLower()
            End If
            If pageText.Contains(searchPhrase) Then
                MsgBox(i)
                foundList.Add(i)

            End If
        Next
        reader.Close()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
    Return foundList
End Function

1 Ответ

0 голосов
/ 19 июня 2020

Вы можете использовать следующий код:

Imports iTextSharp.text.pdf.parser
Imports iTextSharp.text.pdf
Imports iTextSharp.text
Imports System.IO

Public Class Form1
    Dim sourceFile As String = "D:\source.pdf"
    Dim resultFile As String = "D:\result.pdf"
    Dim arrayOfPages As Integer() = {1, 5, 7, 9}

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ExtractPages(sourceFile, arrayOfPages)
End Sub

Public Sub ExtractPages(sourcePdfFile As String, pagesForExtracting As Integer())

    Dim reader As New PdfReader(sourcePdfFile)
    Dim document As New Document(reader.GetPageSize(1))
    Dim pdfCopy As New PdfCopy(document, New FileStream(resultFile, FileMode.Create))

    Try
        document.Open()

        For Each pageNumber As Integer In pagesForExtracting
            Dim importedPage As PdfImportedPage = pdfCopy.GetImportedPage(reader, pageNumber)
            pdfCopy.AddPage(importedPage)
        Next

        Dim text As String = PdfTextExtractor.GetTextFromPage(reader, 1, New iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy())
        document.Close()
        reader.Close()
    Catch ex As Exception
        Throw ex
    End Try
End Sub

End Class

Если pdfCopy выдает исключение нулевой ссылки - вы должны игнорировать это исключение, выбрав «Продолжить» в Visual Studio IDE

...