standard pdfwriter net library getinstance vb.net pdf itextsharp

pdfwriter - VB.Net Combina mĂșltiples archivos PDF en uno y exporta



itextsharp text (2)

Algunos pueden tener que hacer un cambio en el código en " writer = PdfWriter.GetInstance(pdfDoc, New FileStream(outputPath, FileMode.OpenOrCreate)) " ya que iTextSharp puede no ser compatible.

Cambiar a:

Dim fs As IO.FileStream = New IO.FileStream(outputPath, IO.FileMode.Create) writer = iTextSharp.text.pdf.PdfWriter.GetInstance(pdfDoc, fs)

Tengo que combinar varios PDF en un solo PDF.

Estoy usando la biblioteca iText.sharp, y recolecté el código convertido e intenté usarlo (desde aquí ) El código real está en C # y lo convertí a VB.NET.

Private Function MergeFiles(ByVal sourceFiles As List(Of Byte())) As Byte() Dim mergedPdf As Byte() = Nothing Using ms As New MemoryStream() Using document As New Document() Using copy As New PdfCopy(document, ms) document.Open() For i As Integer = 0 To sourceFiles.Count - 1 Dim reader As New PdfReader(sourceFiles(i)) '' loop over the pages in that document Dim n As Integer = reader.NumberOfPages Dim page As Integer = 0 While page < n page = page + 1 copy.AddPage(copy.GetImportedPage(reader, page)) End While Next End Using End Using mergedPdf = ms.ToArray() End Using End Function

Ahora recibo el siguiente error:

Un artículo con la misma clave ya ha sido agregado.

Hice algunas depuraciones y seguí el problema hasta las siguientes líneas:

copy.AddPage(copy.GetImportedPage(reader, copy.AddPage(copy.GetImportedPage(reader, page)))

¿Por qué está ocurriendo este error?


Tengo una consola que supervisa las carpetas individuales en una carpeta designada y luego necesita combinar todos los archivos PDF de esa carpeta en un único archivo PDF. Paso una serie de rutas de archivos como cadenas y el archivo de salida me gustaría.

Esta es la función que uso.

Public Shared Function MergePdfFiles(ByVal pdfFiles() As String, ByVal outputPath As String) As Boolean Dim result As Boolean = False Dim pdfCount As Integer = 0 ''total input pdf file count Dim f As Integer = 0 ''pointer to current input pdf file Dim fileName As String Dim reader As iTextSharp.text.pdf.PdfReader = Nothing Dim pageCount As Integer = 0 Dim pdfDoc As iTextSharp.text.Document = Nothing ''the output pdf document Dim writer As PdfWriter = Nothing Dim cb As PdfContentByte = Nothing Dim page As PdfImportedPage = Nothing Dim rotation As Integer = 0 Try pdfCount = pdfFiles.Length If pdfCount > 1 Then ''Open the 1st item in the array PDFFiles fileName = pdfFiles(f) reader = New iTextSharp.text.pdf.PdfReader(fileName) ''Get page count pageCount = reader.NumberOfPages pdfDoc = New iTextSharp.text.Document(reader.GetPageSizeWithRotation(1), 18, 18, 18, 18) writer = PdfWriter.GetInstance(pdfDoc, New FileStream(outputPath, FileMode.OpenOrCreate)) With pdfDoc .Open() End With ''Instantiate a PdfContentByte object cb = writer.DirectContent ''Now loop thru the input pdfs While f < pdfCount ''Declare a page counter variable Dim i As Integer = 0 ''Loop thru the current input pdf''s pages starting at page 1 While i < pageCount i += 1 ''Get the input page size pdfDoc.SetPageSize(reader.GetPageSizeWithRotation(i)) ''Create a new page on the output document pdfDoc.NewPage() ''If it is the 1st page, we add bookmarks to the page ''Now we get the imported page page = writer.GetImportedPage(reader, i) ''Read the imported page''s rotation rotation = reader.GetPageRotation(i) ''Then add the imported page to the PdfContentByte object as a template based on the page''s rotation If rotation = 90 Then cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(i).Height) ElseIf rotation = 270 Then cb.AddTemplate(page, 0, 1.0F, -1.0F, 0, reader.GetPageSizeWithRotation(i).Width + 60, -30) Else cb.AddTemplate(page, 1.0F, 0, 0, 1.0F, 0, 0) End If End While ''Increment f and read the next input pdf file f += 1 If f < pdfCount Then fileName = pdfFiles(f) reader = New iTextSharp.text.pdf.PdfReader(fileName) pageCount = reader.NumberOfPages End If End While ''When all done, we close the document so that the pdfwriter object can write it to the output file pdfDoc.Close() result = True End If Catch ex As Exception Return False End Try Return result End Function