Winnovative скрывает текст TextElements в PDF-файлах

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

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

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

Свойства двух Document а также PDFPage объекты идентичны, в том числе TransparencyEnabled имущество. Это явление присутствует в PDF-файлах всех видов документов, отсканированных разными людьми с течением времени. И дело не только в этом заголовке TextElement, но TextElement повсюду в 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

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

0 ответов

Другие вопросы по тегам