Мы используем веб-сайт 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 в списке файлов сохранит заполненные данные, но это не так.Даже если позже я попытаюсь объединить заполненный файл, он все равно не найдет заполненные данные.Если я распечатаю заполненный файл, он выглядит идеально.