Как: получить документ pdf в виде байтового массива после того, как pdfsplitter выполнил свою работу, используя itext v7 api? - PullRequest
0 голосов
/ 19 сентября 2018

Мне удалось собрать некоторые коды здесь и там на основе VB.net и используя API iText v7.Однако у меня возникают проблемы при попытке вернуть разделенные документы обратно в виде байтового массива.Ваша помощь очень ценится.Спасибо.Извините, я признаю, что я новичок в кодировании.

    Private Sub SplitSub()
        Dim pdfcontents As New List(Of Byte())
        Dim reader As iText.Kernel.Pdf.PdfReader = New iText.Kernel.Pdf.PdfReader("C:\Users\XXX\Desktop\Test\Test.pdf")
        Dim pdfDoc As iText.Kernel.Pdf.PdfDocument = New iText.Kernel.Pdf.PdfDocument(reader)
        Dim splitter As ByteArrayPdfSplitter = New ByteArrayPdfSplitter(pdfDoc)
        Dim splitDocuments As List(Of iText.Kernel.Pdf.PdfDocument) = splitter.SplitBySize(5000000)
        For Each splitDoc In splitDocuments
            Dim bytecontents as Byte()
            '??? How do I retrieve the pdfDocuments as bytes()???
            pdfcontents.Add(bytecontents)
        Next
        pdfDoc.Close()
        reader.Close()
    End Sub


Class ByteArrayPdfSplitter
    Inherits iText.Kernel.Utils.PdfSplitter

    Private currentOutputStream As MemoryStream

    Public Sub New(ByVal pdfDocument As iText.Kernel.Pdf.PdfDocument)
        MyBase.New(pdfDocument)
    End Sub

    Protected Overrides Function GetNextPdfWriter(ByVal documentPageRange As iText.Kernel.Utils.PageRange) As iText.Kernel.Pdf.PdfWriter
        currentOutputStream = New MemoryStream()
        Return New iText.Kernel.Pdf.PdfWriter(currentOutputStream)
    End Function

    Public ReadOnly Property CurrentMemoryStream As MemoryStream
        Get
            Return currentOutputStream
        End Get
    End Property

    Public Class DocumentReadyListener
        Implements iText.Kernel.Utils.PdfSplitter.IDocumentReadyListener
        Private splitter As ByteArrayPdfSplitter

        Public Sub New(ByVal splitter As ByteArrayPdfSplitter)
            Me.splitter = splitter
        End Sub

        Public Sub DocumentReady(ByVal pdfDocument As iText.Kernel.Pdf.PdfDocument, ByVal pageRange As iText.Kernel.Utils.PageRange) Implements iText.Kernel.Utils.PdfSplitter.IDocumentReadyListener.DocumentReady
            pdfDocument.Close()
            Dim contents As Byte() = splitter.CurrentMemoryStream.ToArray()
        End Sub

    End Class
...