PDF заполнить не слияние правильно - PullRequest
0 голосов
/ 24 сентября 2019

Мы используем веб-сайт asp.net с iTextSharp.dll версии 5.5.13. Мы можем объединить несколько файлов PDF в один, используя поток, и он отлично работает.Однако когда мы используем PDF-файл, созданный в функции «заполнения», новый PDF-файл неправильно объединяется с другими документами.Он сливается без заполненных значений.Однако, если я открою заполненный PDF-файл, он создает заполненные данные, отображает и печатает нормально.

Я попытался объединить новый «заполненный» PDF позднее, но он все равно отображает файл шаблона какхотя заполненные данные отсутствовали.

Ниже код заполняет данные. Dim strFileName As String = Path.GetFileNameWithoutExtension (strSourceFile) Dim strOutPath As String = HttpContext.Current.Server.MapPath ("~ / Apps / Lifetime/ OfficeDocs / Export / ") newFile = strOutPath & strFileName &" "& strRONumber &" .pdf "

    If Not File.Exists(newFile) Then
        Dim pdfReader As PdfReader = New PdfReader(strSourceFile)
        Using pdfStamper As PdfStamper = New PdfStamper(pdfReader, New FileStream(newFile, FileMode.Create))

            Dim pdfFormFields As AcroFields = pdfStamper.AcroFields
            pdfFormFields.SetField("CUSTOMER NAME", strCustomer)
            pdfFormFields.SetField("YR MK MODEL", strVehicle)
            pdfFormFields.SetField("RO#", strRONumber)

            pdfStamper.FormFlattening = False
            pdfStamper.Dispose()
        End Using

    End If

Тогда приведенный ниже код объединяет несколько отправленных в него файлов / путей PDF

Public Shared Sub MergePDFs (файлы ByVal As List (Of String), ByVal filename As String) 'Получает список файлов полного пути и объединяется в один поток памяти' и выводит его в ответ браузера.Dim MemStream как новый System.IO.MemoryStream Dim doc как новый.pdf.PdfWriter.GetInstance (doc, MemStream) doc.Open () Dim cb As iTextSharp.text.pdf.PdfContentByte = writer.DirectContent Dim страница как iTextSharp.text.pdf.PdfImportedPage Dim strError As String

    For Each strfile As String In files
        reader = New iTextSharp.text.pdf.PdfReader(strfile)
        numberOfPages = reader.NumberOfPages
        currentPageNumber = 0
        Do While (currentPageNumber < numberOfPages)
            currentPageNumber += 1
            doc.SetPageSize(reader.GetPageSizeWithRotation(currentPageNumber))
            doc.NewPage()
            page = writer.GetImportedPage(reader, currentPageNumber)
            cb.AddTemplate(page, 0, 0)
        Loop
    Next
    doc.Close()
    doc.Dispose()

    If MemStream Is Nothing Then
        HttpContext.Current.Response.Write("No Data is available for output")
    Else
        HttpContext.Current.Response.Clear()
        HttpContext.Current.Response.ContentType = "application/pdf"
        HttpContext.Current.Response.AppendHeader("Content-Disposition", "inline; filename=" + filename)
        HttpContext.Current.Response.BinaryWrite(MemStream.ToArray)
        HttpContext.Current.Response.OutputStream.Flush()
        HttpContext.Current.Response.OutputStream.Close()
        HttpContext.Current.Response.OutputStream.Dispose()
        MemStream.Close()
        MemStream.Dispose()
    End If
End Sub

Я ожидаю, что «заполненный» PDF в списке файлов сохранит заполненные данные, но это не так.Даже если позже я попытаюсь объединить заполненный файл, он все равно не найдет заполненные данные.Если я распечатаю заполненный файл, он выглядит идеально.

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