Winnovative скрывает текст TextElements в PDF-файлах - PullRequest
0 голосов
/ 26 февраля 2019

В нашей организации есть группа, которая сканирует документы и преобразует их в PDF-файлы.Затем они связывают эти PDF-файлы с записью «события» и сохраняют их в базе данных.По требованию мое приложение, которое использует Winnovative HTML to PDF v9.0.0.0, должно извлечь PDF-файлы, связанные с событием, разместить заголовок на первой странице каждого из них и сохранить их в файловой системе.Этот заголовок имеет вид TextElement.

. В некоторых PDF-файлах заголовок отображается красиво.На других заголовок не появляется .Однако при просмотре PDF заголовок может быть «выделен» курсором, а его текст успешно скопирован, так что заголовок действительно присутствует и правильно расположен.(См. Зеленую стрелку на вставленном изображении.)

Output Examples

Я обнаружил два файла PDF, которые были отсканированы одним и тем же человеком с интервалом в 30 минут и связаны сто же событие в базе данных.На одном отображается заголовок;с другой стороны, это не так.Чтобы провести расследование, я установил BackColor из TextElement в Crimson.Text появляется и не появляется, как раньше, но TextElement всегда выглядит ярко-красным.

Свойства двух объектов Document и PDFPage идентичны, включая свойство TransparencyEnabled.Это явление присутствует в PDF-файлах всех видов документов, отсканированных разными людьми с течением времени.И это не только этот заголовок TextElement, но и TextElement s повсюду в PDF (например, страница X из Y, водяные знаки).В данном PDF, если Text одного виден, Text всего виден, и наоборот.

Я не могу найти образец или объяснение. Что может быть причиной того, что некоторые PDF-файлы "скрывают" Textтолько * Text) всех TextElement с, которые я надеваю на них, в то время как другие этого не делают?

Private Sub AddTitleToFirstPage(ByRef pdf As Document)
    Dim headerSystemFont As New Font("Arial", 10)
    Dim headerFont As PdfFont = pdf.Fonts.Add(headerSystemFont)
    Dim headerTextElement As New TextElement(65, 20, "My Page Title", headerFont)

    headerTextElement.TextAlign = HorizontalTextAlign.Center
    headerTextElement.ForeColor = Color.DarkBlue
    headerTextElement.BackColor = Color.Crimson

    pdf.Pages(0).AddElement(headerTextElement)
End Sub

Friend Function UpdatePdfDoc(pdfBytes As Byte()) As Byte()
    Dim bytes As Byte()

    Using docStream As New MemoryStream(pdfBytes, 0, pdfBytes.Length)
        Dim returnDoc As Document = New Document(docStream)
        returnDoc.LicenseKey = WinnovativeLicenceKey

        AddTitleToFirstPage(returnDoc)

        bytes = returnDoc.Save()
        docStream.Close()
    End Using

    Return bytes
End Function

Friend Function GetEventObjectPdfSource(scannedDocIds As List(Of String)) As Object
    Dim scannedDocObjectPdfSourceList As New List(Of Byte())()

    For Each scannedDocId As String In scannedDocIds
        Dim scannedDocObjectPdfSource As Byte() = GetScannedDocBlobById(scannedDocId)
        scannedDocObjectPdfSource = UpdatePdfDoc(scannedDocObjectPdfSource)
        scannedDocObjectPdfSourceList.Add(scannedDocObjectPdfSource)
    Next

    Return scannedDocObjectPdfSourceList
End Function

Friend Function GetEventObjectPdf(eventId As String) As String
    Dim pdfFileName As String = GetPDFFileName(eventId)
    Dim scannedDocIds As List(Of String) = GetScannedDocumentsForEvent(eventId)
    Dim objectPdfSourceList As List(Of Byte()) = CType(GetEventObjectPdfSource1(scannedDocIds), List(Of Byte()))

    For Each objectPdfSource As Byte() In objectPdfSourceList
        Using docStream As New MemoryStream(objectPdfSource, 0, objectPdfSource.Length)
            Dim masterDoc As New Document(docStream)
            masterDoc.LicenseKey = WinnovativeLicenceKey

            Do While masterDoc.Bookmarks.Count > 0
                masterDoc.Bookmarks.Remove(0)
            Loop

            Try
                masterDoc.AutoCloseAppendedDocs = True
                masterDoc.Save(pdfFileName)
            Catch ex As Threading.ThreadAbortException
                Threading.Thread.ResetAbort()
            Finally
                masterDoc.DetachStream()
                masterDoc.Close()
            End Try

            docStream.Close()
        End Using
    Next

    Return pdfFileName
End Function

Пожалуйста, прости неуклюжий код.Я не писал это.Я просто унаследовал это.

...