Imports System.IO Imports TSpdf.Kernel.Font Imports System.Security.Cryptography.X509Certificates Imports System.Security.Cryptography Imports TSpdf.Kernel.Pdf Imports TSpdf.Kernel.Utils Imports TSpdf.Forms Imports TSpdf.Signatures Imports System.Text Imports TSpdf.Kernel.Pdf.Action Imports TSpdf.Kernel.Pdf.Navigation Imports TSpdf.Kernel.Pdf.Canvas Imports TSpdf.Kernel.Geom Imports TSpdf.Layout.Element Imports TSpdf.IO.Font.Constants Imports System.Diagnostics.Contracts Imports System.Text.RegularExpressions Imports Microsoft.VisualBasic.Devices Imports Org.BouncyCastle.Asn1 Imports Org.BouncyCastle.Pkcs Imports TSpdf.Commons.Bouncycastle.Cert Imports TSpdf.Commons.Bouncycastle.Crypto Imports TSpdf.Bouncycastle.Crypto Imports TSpdf.Bouncycastle.Cert Imports Org.BouncyCastle.Asn1.X509 Imports Org.BouncyCastle.X509 Imports Org.BouncyCastle.Crypto.Tls Imports TSpdf Imports TSpdf.Kernel.Pdf.Canvas.Parser Imports TSpdf.Kernel.Pdf.Canvas.Parser.Listener Public Class pdf Public Shared Sub Aplanar(Origen As String) Dim PdfDocument = New PdfDocument(New PdfReader(Origen)) Dim form = PdfAcroForm.GetAcroForm(PdfDocument, False) If form IsNot Nothing Then form.FlattenFields() PdfDocument.Close() End Sub Public Shared Sub Aplanar(Origen As String, Destino As String) Dim PdfDocument = New PdfDocument(New PdfReader(Origen), New PdfWriter(Destino)) Dim form = PdfAcroForm.GetAcroForm(PdfDocument, False) If form IsNot Nothing Then form.FlattenFields() PdfDocument.Close() End Sub Public Shared Function ObtieneFicheroAleatorio(ByVal Extension As String) As String Dim sFichero As String = System.IO.Path.GetTempPath & System.IO.Path.GetRandomFileName & "." & Extension Do While System.IO.File.Exists(sFichero) 'Try ' IO.File.Delete(sFichero) 'Catch ex As Exception sFichero = System.IO.Path.GetTempPath & "\" & System.IO.Path.GetRandomFileName & "." & Extension ' End Try Loop Return sFichero End Function Public Shared Sub UnePdfs(Pdfs()() As Byte, outputPdf As String, Optional UnirTags As Boolean = True, Optional UnirMarcadores As Boolean = True, Optional MarcadoresInicioFichero() As String = Nothing, Optional Aplanar As Boolean = True) Dim lista = Pdfs.Select(Function(x) New MemoryStream(x)).ToArray UnePdfs(lista, outputPdf, UnirTags, UnirMarcadores, MarcadoresInicioFichero, Aplanar) End Sub Public Shared Sub UnePdfs(Pdfs() As String, st As Stream, Optional UnirTags As Boolean = True, Optional UnirMarcadores As Boolean = True, Optional MarcadoresInicioFichero() As String = Nothing, Optional Aplanar As Boolean = True) Try Dim pdfw As New PdfWriter(st) Dim pdfDoc As PdfDocument = New PdfDocument(pdfw) Dim merger As PdfMerger = New PdfMerger(pdfDoc, UnirTags, UnirMarcadores) Dim i As Integer = 0 Dim NumeroPaginasTotal As Integer = 1 Dim rootoutline As PdfOutline = Nothing Dim pagini(Pdfs.Count - 1) As Integer For Each pdf In Pdfs i += 1 Dim pdfr As New PdfReader(pdf) pdfr.SetUnethicalReading(True) Dim ms As New MemoryStream Dim pdfwtmp As New PdfWriter(ms) Dim srcDoc As PdfDocument If MarcadoresInicioFichero IsNot Nothing AndAlso UnirMarcadores Then srcDoc = New PdfDocument(pdfr, pdfwtmp) MueveMarcadorARaiz(srcDoc, MarcadoresInicioFichero(i - 1)) srcDoc.Close() pdfr = New PdfReader(New MemoryStream(ms.ToArray)) srcDoc = New PdfDocument(pdfr) Else srcDoc = New PdfDocument(pdfr) End If Dim np = srcDoc.GetNumberOfPages pagini(i - 1) = np If Aplanar Then Dim form = PdfAcroForm.GetAcroForm(srcDoc, False) If form IsNot Nothing Then form.FlattenFields() End If merger.SetCloseSourceDocuments(i = Pdfs.Count).Merge(srcDoc, 1, np) srcDoc.Close() Next If MarcadoresInicioFichero IsNot Nothing AndAlso UnirMarcadores = False Then pdfDoc.InitializeOutlines() rootoutline = pdfDoc.GetOutlines(False) For i = 0 To pagini.Length - 1 Dim oul As PdfOutline = rootoutline.AddOutline(MarcadoresInicioFichero(i)) oul.AddDestination(PdfExplicitDestination.CreateFit(pdfDoc.GetPage(NumeroPaginasTotal))) NumeroPaginasTotal += pagini(i) Next End If pdfDoc.Close() pdfw.Close() merger.Close() Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Sub Public Shared Sub UnePdfs(Pdfs() As String, outputPdf As String, Optional UnirTags As Boolean = True, Optional UnirMarcadores As Boolean = True, Optional MarcadoresInicioFichero() As String = Nothing, Optional Aplanar As Boolean = True) Try Dim pdfw As New PdfWriter(outputPdf) Dim pdfDoc As PdfDocument = New PdfDocument(pdfw) Dim merger As PdfMerger = New PdfMerger(pdfDoc, UnirTags, UnirMarcadores) Dim i As Integer = 0 Dim NumeroPaginasTotal As Integer = 1 Dim rootoutline As PdfOutline = Nothing Dim pagini(Pdfs.Count - 1) As Integer For Each pdf In Pdfs i += 1 Dim pdfr As New PdfReader(pdf) pdfr.SetUnethicalReading(True) Dim ms As New MemoryStream Dim pdfwtmp As New PdfWriter(ms) Dim srcDoc As PdfDocument If MarcadoresInicioFichero IsNot Nothing AndAlso UnirMarcadores Then srcDoc = New PdfDocument(pdfr, pdfwtmp) MueveMarcadorARaiz(srcDoc, MarcadoresInicioFichero(i - 1)) srcDoc.Close() pdfr = New PdfReader(New MemoryStream(ms.ToArray)) srcDoc = New PdfDocument(pdfr) Else srcDoc = New PdfDocument(pdfr) End If Dim np = srcDoc.GetNumberOfPages pagini(i - 1) = np If Aplanar Then Dim form = PdfAcroForm.GetAcroForm(srcDoc, False) If form IsNot Nothing Then form.FlattenFields() End If merger.SetCloseSourceDocuments(i = Pdfs.Count).Merge(srcDoc, 1, np) srcDoc.Close() Next If MarcadoresInicioFichero IsNot Nothing AndAlso UnirMarcadores = False Then pdfDoc.InitializeOutlines() rootoutline = pdfDoc.GetOutlines(False) For i = 0 To pagini.Length - 1 Dim oul As PdfOutline = rootoutline.AddOutline(MarcadoresInicioFichero(i)) oul.AddDestination(PdfExplicitDestination.CreateFit(pdfDoc.GetPage(NumeroPaginasTotal))) NumeroPaginasTotal += pagini(i) Next End If pdfDoc.Close() pdfw.Close() merger.Close() Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Sub Public Shared Sub UnePdfs(Pdfs() As Stream, outputPdf As String, Optional UnirTags As Boolean = True, Optional UnirMarcadores As Boolean = True, Optional MarcadoresInicioFichero() As String = Nothing, Optional Aplanar As Boolean = True) Try Dim pdfw As New PdfWriter(outputPdf) Dim pdfDoc As PdfDocument = New PdfDocument(pdfw) Dim merger As PdfMerger = New PdfMerger(pdfDoc, UnirTags, UnirMarcadores) Dim i As Integer = 0 Dim NumeroPaginasTotal As Integer = 1 Dim rootoutline As PdfOutline = Nothing Dim pagini(Pdfs.Count - 1) As Integer For Each pdf In Pdfs i += 1 Dim pdfr As New PdfReader(pdf) pdfr.SetUnethicalReading(True) Dim ms As New MemoryStream Dim pdfwtmp As New PdfWriter(ms) Dim srcDoc As PdfDocument If MarcadoresInicioFichero IsNot Nothing AndAlso UnirMarcadores Then srcDoc = New PdfDocument(pdfr, pdfwtmp) MueveMarcadorARaiz(srcDoc, MarcadoresInicioFichero(i - 1)) srcDoc.Close() pdfr = New PdfReader(New MemoryStream(ms.ToArray)) srcDoc = New PdfDocument(pdfr) Else srcDoc = New PdfDocument(pdfr) End If Dim np = srcDoc.GetNumberOfPages pagini(i - 1) = np If Aplanar Then Dim form = PdfAcroForm.GetAcroForm(srcDoc, False) If form IsNot Nothing Then form.FlattenFields() End If merger.SetCloseSourceDocuments(i = Pdfs.Count).Merge(srcDoc, 1, np) srcDoc.Close() Next If MarcadoresInicioFichero IsNot Nothing AndAlso UnirMarcadores = False Then pdfDoc.InitializeOutlines() rootoutline = pdfDoc.GetOutlines(False) For i = 0 To pagini.Length - 1 Dim oul As PdfOutline = rootoutline.AddOutline(MarcadoresInicioFichero(i)) oul.AddDestination(PdfExplicitDestination.CreateFit(pdfDoc.GetPage(NumeroPaginasTotal))) NumeroPaginasTotal += pagini(i) Next End If pdfDoc.Close() pdfw.Close() merger.Close() Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Sub Public Shared Function UnePdfs(Pdfs()() As Byte, Optional UnirTags As Boolean = True, Optional UnirMarcadores As Boolean = True, Optional MarcadoresInicioFichero() As String = Nothing, Optional Aplanar As Boolean = True) As Byte() Dim lista = Pdfs.Select(Function(x) New MemoryStream(x)).ToArray Return UnePdfs(lista, UnirTags, UnirMarcadores, MarcadoresInicioFichero, Aplanar) End Function Public Shared Function UnePdfs(Pdfs() As Stream, Optional UnirTags As Boolean = True, Optional UnirMarcadores As Boolean = True, Optional MarcadoresInicioFichero() As String = Nothing, Optional Aplanar As Boolean = True) As Byte() Try Dim msw As New MemoryStream Dim pdfw As New PdfWriter(msw) Dim pdfDoc As PdfDocument = New PdfDocument(pdfw) Dim merger As PdfMerger = New PdfMerger(pdfDoc, UnirTags, UnirMarcadores) Dim i As Integer = 0 Dim NumeroPaginasTotal As Integer = 1 Dim rootoutline As PdfOutline = Nothing Dim pagini(Pdfs.Count - 1) As Integer For Each pdf In Pdfs i += 1 Dim pdfr As New PdfReader(pdf) pdfr.SetUnethicalReading(True) Dim ms As New MemoryStream Dim pdfwtmp As New PdfWriter(ms) Dim srcDoc As PdfDocument If MarcadoresInicioFichero IsNot Nothing AndAlso UnirMarcadores Then srcDoc = New PdfDocument(pdfr, pdfwtmp) MueveMarcadorARaiz(srcDoc, MarcadoresInicioFichero(i - 1)) srcDoc.Close() pdfr = New PdfReader(New MemoryStream(ms.ToArray)) srcDoc = New PdfDocument(pdfr) Else srcDoc = New PdfDocument(pdfr) End If Dim np = srcDoc.GetNumberOfPages pagini(i - 1) = np If Aplanar Then Dim form = PdfAcroForm.GetAcroForm(srcDoc, False) If form IsNot Nothing Then form.FlattenFields() End If merger.SetCloseSourceDocuments(i = Pdfs.Count).Merge(srcDoc, 1, np) srcDoc.Close() Next If MarcadoresInicioFichero IsNot Nothing AndAlso UnirMarcadores = False Then pdfDoc.InitializeOutlines() rootoutline = pdfDoc.GetOutlines(False) For i = 0 To pagini.Length - 1 Dim oul As PdfOutline = rootoutline.AddOutline(MarcadoresInicioFichero(i)) oul.AddDestination(PdfExplicitDestination.CreateFit(pdfDoc.GetPage(NumeroPaginasTotal))) NumeroPaginasTotal += pagini(i) Next End If pdfDoc.Close() pdfw.Close() merger.Close() Return msw.ToArray Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Function Public Shared Sub UnePdfs(Pdfs() As Stream, Destino As Stream, Optional UnirTags As Boolean = True, Optional UnirMarcadores As Boolean = True, Optional MarcadoresInicioFichero() As String = Nothing, Optional Aplanar As Boolean = True) Try Dim pdfw As New PdfWriter(Destino) Dim pdfDoc As PdfDocument = New PdfDocument(pdfw) Dim merger As PdfMerger = New PdfMerger(pdfDoc, UnirTags, UnirMarcadores) Dim i As Integer = 0 Dim NumeroPaginasTotal As Integer = 1 Dim rootoutline As PdfOutline = Nothing Dim pagini(Pdfs.Count - 1) As Integer For Each pdf In Pdfs i += 1 Dim pdfr As New PdfReader(pdf) pdfr.SetUnethicalReading(True) Dim ms As New MemoryStream Dim pdfwtmp As New PdfWriter(ms) Dim srcDoc As PdfDocument If MarcadoresInicioFichero IsNot Nothing AndAlso UnirMarcadores Then srcDoc = New PdfDocument(pdfr, pdfwtmp) MueveMarcadorARaiz(srcDoc, MarcadoresInicioFichero(i - 1)) srcDoc.Close() pdfr = New PdfReader(New MemoryStream(ms.ToArray)) srcDoc = New PdfDocument(pdfr) Else srcDoc = New PdfDocument(pdfr) End If Dim np = srcDoc.GetNumberOfPages pagini(i - 1) = np If Aplanar Then Dim form = PdfAcroForm.GetAcroForm(srcDoc, False) If form IsNot Nothing Then form.FlattenFields() End If merger.SetCloseSourceDocuments(i = Pdfs.Count).Merge(srcDoc, 1, np) srcDoc.Close() Next If MarcadoresInicioFichero IsNot Nothing AndAlso UnirMarcadores = False Then pdfDoc.InitializeOutlines() rootoutline = pdfDoc.GetOutlines(False) For i = 0 To pagini.Length - 1 Dim oul As PdfOutline = rootoutline.AddOutline(MarcadoresInicioFichero(i)) oul.AddDestination(PdfExplicitDestination.CreateFit(pdfDoc.GetPage(NumeroPaginasTotal))) NumeroPaginasTotal += pagini(i) Next End If pdfDoc.Close() pdfw.Close() merger.Close() Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Sub Public Shared Function UnePdfs(Pdfs() As String, Optional UnirTags As Boolean = True, Optional UnirMarcadores As Boolean = True, Optional MarcadoresInicioFichero() As String = Nothing, Optional Aplanar As Boolean = True) As Byte() Try Dim msw As New MemoryStream Dim pdfw As New PdfWriter(msw) Dim pdfDoc As PdfDocument = New PdfDocument(pdfw) Dim merger As PdfMerger = New PdfMerger(pdfDoc, UnirTags, UnirMarcadores) Dim i As Integer = 0 Dim NumeroPaginasTotal As Integer = 1 Dim rootoutline As PdfOutline = Nothing Dim pagini(Pdfs.Count - 1) As Integer For Each pdf In Pdfs i += 1 Dim pdfr As New PdfReader(pdf) pdfr.SetUnethicalReading(True) Dim ms As New MemoryStream Dim pdfwtmp As New PdfWriter(ms) Dim srcDoc As PdfDocument If MarcadoresInicioFichero IsNot Nothing AndAlso UnirMarcadores Then srcDoc = New PdfDocument(pdfr, pdfwtmp) MueveMarcadorARaiz(srcDoc, MarcadoresInicioFichero(i - 1)) srcDoc.Close() pdfr = New PdfReader(New MemoryStream(ms.ToArray)) srcDoc = New PdfDocument(pdfr) Else srcDoc = New PdfDocument(pdfr) End If Dim np = srcDoc.GetNumberOfPages pagini(i - 1) = np If Aplanar Then Dim form = PdfAcroForm.GetAcroForm(srcDoc, False) If form IsNot Nothing Then form.FlattenFields() End If merger.SetCloseSourceDocuments(i = Pdfs.Count).Merge(srcDoc, 1, np) srcDoc.Close() Next If MarcadoresInicioFichero IsNot Nothing AndAlso UnirMarcadores = False Then pdfDoc.InitializeOutlines() rootoutline = pdfDoc.GetOutlines(False) For i = 0 To pagini.Length - 1 Dim oul As PdfOutline = rootoutline.AddOutline(MarcadoresInicioFichero(i)) oul.AddDestination(PdfExplicitDestination.CreateFit(pdfDoc.GetPage(NumeroPaginasTotal))) NumeroPaginasTotal += pagini(i) Next End If pdfDoc.Close() pdfw.Close() merger.Close() Return msw.ToArray Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Function Private Shared Sub MueveMarcadorARaiz(ByVal pdfDocument As PdfDocument, ByVal EtiquetaMarcadorRaiz As String) pdfDocument.InitializeOutlines() Try Dim pp = pdfDocument.GetFirstPage() Dim rootOutline As PdfOutline = pdfDocument.GetOutlines(False) Dim subOutline As PdfOutline = rootOutline.AddOutline(EtiquetaMarcadorRaiz) Dim dest As PdfDestination = PdfExplicitDestination.CreateFit(pp) subOutline.AddDestination(dest) Dim pdfOutlineChildren As List(Of PdfOutline) = rootOutline.GetAllChildren().ToList If pdfOutlineChildren.Count = 1 Then Return End If Dim i As Integer = 0 Dim p As PdfOutline For Each p In pdfOutlineChildren If Not p.Equals(subOutline) Then Dim nd = p.GetDestination If nd Is Nothing Then nd = dest dest = nd Corrigeoutl(p, dest) subOutline.AddOutline(p) End If Next rootOutline.GetAllChildren().Clear() rootOutline.AddOutline(subOutline) subOutline.AddDestination(PdfExplicitDestination.CreateFit(pdfDocument.GetFirstPage())) Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Sub Private Shared Sub CreaMarcadorInicioFichero(ByVal pdfDocument As PdfDocument, ByVal EtiquetaMarcadorRaiz As String) pdfDocument.InitializeOutlines() Try Dim pp = pdfDocument.GetFirstPage() Dim rootOutline As PdfOutline = pdfDocument.GetOutlines(False) Dim subOutline As PdfOutline = rootOutline.AddOutline(EtiquetaMarcadorRaiz) Dim dest As PdfDestination = PdfExplicitDestination.CreateFit(pp) subOutline.AddDestination(dest) Dim pdfOutlineChildren As List(Of PdfOutline) = rootOutline.GetAllChildren().ToList If pdfOutlineChildren.Count = 1 Then Return End If Dim i As Integer = 0 Dim p As PdfOutline For Each p In pdfOutlineChildren If Not p.Equals(subOutline) Then Dim nd = p.GetDestination If nd Is Nothing Then nd = dest dest = nd Corrigeoutl(p, dest) subOutline.AddOutline(p) End If Next rootOutline.GetAllChildren().Clear() rootOutline.AddOutline(subOutline) subOutline.AddDestination(PdfExplicitDestination.CreateFit(pdfDocument.GetFirstPage())) Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Sub Private Shared Sub Corrigeoutl(p As PdfOutline, ByRef ultimoDestino As PdfDestination) If p.GetDestination Is Nothing Then p.AddDestination(ultimoDestino) End If Dim hijos = p.GetAllChildren For Each h In hijos If h.GetDestination Is Nothing OrElse h.GetDestination.GetPdfObject Is Nothing Then h.AddDestination(ultimoDestino) End If ultimoDestino = h.GetDestination Corrigeoutl(h, ultimoDestino) Next End Sub Public Shared Function ObtieneNumeroPaginasPDF(PDF As String) As Integer Dim pdfr As New PdfReader(PDF) Dim NP = New PdfDocument(pdfr).GetNumberOfPages pdfr.Close() Return NP End Function Public Shared Sub ConvierteAPDFX(PdfOrigen As String, PdfDestino As String) Dim wp As WriterProperties = New WriterProperties() wp.SetPdfVersion(PdfVersion.PDF_1_3) Dim pdfDoc As PdfDocument = New PdfDocument(New PdfReader(PdfOrigen), New PdfWriter(PdfDestino, wp)) pdfDoc.Close() End Sub Public Shared Sub RotarPdf(ByVal PdfOrigen As String, ByVal PdfDestino As String, Grados As Integer) Dim pdfDoc As PdfDocument = New PdfDocument(New PdfReader(PdfOrigen), New PdfWriter(PdfDestino)) For p As Integer = 1 To pdfDoc.GetNumberOfPages() Dim page As PdfPage = pdfDoc.GetPage(p) Dim rotate As Integer = page.GetRotation() If rotate = 0 Then page.SetRotation(Grados) Else page.SetRotation((rotate + Grados) Mod 360) End If Next pdfDoc.Close() End Sub Public Shared Sub RecortaPDF(ByVal PdfOrigen As String, PdfRecortado As String, PaginaInicio As Integer, PaginaFin As Integer) Dim pdfDoc As PdfDocument = New PdfDocument(New PdfWriter(PdfRecortado)) Dim merger As PdfMerger = New PdfMerger(pdfDoc, False, False) Dim srcDoc As PdfDocument = New PdfDocument(New PdfReader(PdfOrigen)) Dim np = srcDoc.GetNumberOfPages merger.SetCloseSourceDocuments(True).Merge(srcDoc, PaginaInicio, PaginaFin) pdfDoc.Close() End Sub Public Shared Sub RellenaFormularioPDF(PdfOrigen As String, PdfDestino As String, Valores As Hashtable, Optional Aplanar As Boolean = True) Try Dim fs As New FileStream(PdfDestino, FileMode.CreateNew, FileAccess.Write) RellenaFormularioPDF(PdfOrigen, fs, Valores, Aplanar) Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Sub Public Shared Sub RellenaFormularioPDF(PdfOrigen As String, PdfDestino As String, Valores As String, Optional Aplanar As Boolean = True) Try Dim fs As New FileStream(PdfDestino, FileMode.CreateNew, FileAccess.Write) Dim ht As New Hashtable Dim pares = Valores.Split("|") For Each par In pares ht.Add(par.Split(":")(0), par.Split(":")(1)) Next RellenaFormularioPDF(PdfOrigen, fs, ht, Aplanar) Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Sub Public Shared Sub RellenaFormularioPDF(PdfOrigen As String, Destino As Stream, Valores As Hashtable, Optional Aplanar As Boolean = True) Try Dim pdfReader As New PdfReader(PdfOrigen) Dim pdfDoc As New PdfDocument(pdfReader, New PdfWriter(Destino)) Dim form = PdfAcroForm.GetAcroForm(pdfDoc, True) For Each Valor As DictionaryEntry In Valores Try form.GetField(Valor.Key).SetValue(Valor.Value) Catch ex As Exception End Try Next If Aplanar Then form.FlattenFields() End If pdfDoc.Close() Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Sub Public Shared Function RellenaFormularioPDF(PdfOrigen As Byte(), ListaValores As List(Of Hashtable), Optional Aplanar As Boolean = True) As Byte() Try Dim i, j As Integer Dim iosPdf(ListaValores.Count - 1)() As Byte For i = 0 To ListaValores.Count - 1 Dim pdfReader As New PdfReader(New MemoryStream(PdfOrigen)) Dim Valores = ListaValores(i) Dim ms As New MemoryStream Dim pdfDoc As New PdfDocument(pdfReader, New PdfWriter(ms)) Dim form = PdfAcroForm.GetAcroForm(pdfDoc, True) For Each Valor As DictionaryEntry In Valores Try form.GetField(Valor.Key).SetValue(Valor.Value) Catch ex As Exception End Try Next If Aplanar Then form.FlattenFields() End If pdfDoc.Close() ' ms.Seek(0, 0) iosPdf(i) = ms.ToArray Next If ListaValores.Count = 1 Then Return iosPdf(0).ToArray Else Return UnePdfs(iosPdf) End If Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Function Public Shared Function RellenaFormularioPDF(PdfOrigen As Byte(), Valores As Hashtable, Optional Aplanar As Boolean = True) As Byte() Try Dim pdfReader As New PdfReader(New MemoryStream(PdfOrigen)) Dim ms As New MemoryStream Dim pdfDoc As New PdfDocument(pdfReader, New PdfWriter(ms)) Dim form = PdfAcroForm.GetAcroForm(pdfDoc, True) For Each Valor As DictionaryEntry In Valores Try Dim f = form.GetField(Valor.Key) If f IsNot Nothing Then f.SetValue(Valor.Value) Catch ex As Exception End Try Next If Aplanar Then form.FlattenFields() End If pdfDoc.Close() If ms.CanSeek Then ms.Seek(0, 0) Return ms.ToArray Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Function Public Shared Sub AñadePropiedadesAPdf(ByVal FicheroPdf As String, ByVal Valores As Hashtable) Try Dim ms As New MemoryStream Dim pdfReader As New PdfReader(FicheroPdf) Dim pdfDoc As New PdfDocument(pdfReader, New PdfWriter(ms)) Dim info = pdfDoc.GetDocumentInfo() Dim newInfo As IDictionary(Of String, String) = New Dictionary(Of String, String)() For Each Valor As DictionaryEntry In Valores Try newInfo.Add(CStr(Valor.Key), Valor.Value) Catch ex As Exception End Try Next info.SetMoreInfo(newInfo) pdfDoc.Close() Dim b = ms.ToArray pdfReader.Close() System.IO.File.Delete(FicheroPdf) System.IO.File.WriteAllBytes(FicheroPdf, b) Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Sub Public Shared Sub AñadePropiedadesAPdf(pdfDoc As PdfDocument, ByVal Valores As Hashtable) Try Dim ms As New MemoryStream Dim info = pdfDoc.GetDocumentInfo() Dim newInfo As IDictionary(Of String, String) = New Dictionary(Of String, String)() For Each Valor As DictionaryEntry In Valores Try newInfo.Add(Valor.Key, Valor.Value) Catch ex As Exception End Try Next info.SetMoreInfo(newInfo) pdfDoc.Close() Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Sub Public Shared Function AñadePropiedadesAPdf(ByVal FicheroPdf As MemoryStream, ByVal Valores As Hashtable) As MemoryStream Try Dim ms As New MemoryStream Dim pdfReader As New PdfReader(FicheroPdf) Dim pdfDoc As New PdfDocument(pdfReader, New PdfWriter(ms)) Dim info = pdfDoc.GetDocumentInfo() Dim newInfo As IDictionary(Of String, String) = New Dictionary(Of String, String)() For Each Valor As DictionaryEntry In Valores Try newInfo.Add(Valor.Key, Valor.Value) Catch ex As Exception End Try Next info.SetMoreInfo(newInfo) pdfDoc.Close() If ms.CanSeek Then ms.Seek(0, 0) Return ms Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Function Public Shared Function ExtractTextFromPDF(ByVal RutaPdf As String) As String Dim pdfReader As PdfReader = New PdfReader(RutaPdf) Dim pdfDoc As PdfDocument = New PdfDocument(pdfReader) Dim contenido As String = "" Dim Estrategia = New SimpleTextExtractionStrategy For page As Integer = 1 To pdfDoc.GetNumberOfPages() Dim pagina = pdfDoc.GetPage(page) Dim Texto = PdfTextExtractor.GetTextFromPage(pagina, Estrategia) contenido &= Texto & vbCrLf Next pdfDoc.Close() pdfReader.Close() Return contenido End Function Public Shared Sub PruebaSellado(FicheroASellar As String, FicheroDestino As String) Dim pdfr As New PdfReader(FicheroASellar) Dim pdfw = New PdfWriter(FicheroDestino) Dim wp As New WriterProperties 'Dim cl = pdfr.GetPdfAConformanceLevel() Dim pdfd As New PdfDocument(pdfr, pdfw) Dim np = pdfd.GetNumberOfPages Dim fuente = PdfFontFactory.CreateFont(StandardFonts.TIMES_ROMAN) For i = 1 To np Dim page As PdfPage = pdfd.GetPage(i) Dim pdfc As New PdfCanvas(page) Dim fc As New PdfCanvas(page.NewContentStreamAfter, page.GetResources, pdfd) pdfc.BeginText() pdfc.SetFontAndSize(fuente, 12) pdfc.MoveText(0, 0) pdfc.ShowText("PRUEBA PRUEBA") pdfc.EndText() Next pdfd.Close() pdfw.Close() End Sub End Class