es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema de accesibilidad en el PDF combinado de itextsharp.

Estoy tratando de fusionar algunos campos utilizando la biblioteca itextsharp (v5.5.13.2) y probarlo con un lector de pantalla.
El PDF está etiquetado, pero cuando intento leer el formulario utilizando NVDA, no reconoce los campos fusionados, solo el texto estático dentro del PDF.
El PDF está creado utilizando Adobe Acrobat Livecycle Designer y los campos de texto están ubicados en la “Estructura del PDF” correctamente.

Cualquier ayuda será apreciada.

Dim OutputFileName As String = ""
Dim OutputFileFullPath As String = ""
Dim FileName As String = "C:\Untitled4.pdf"
Using pdfRd = New iTextSharp.text.pdf.PdfReader(filename:=FileName)
      OutputFileName = String.Format("{0}.pdf", Guid.NewGuid.ToString("N"))
      OutputFileFullPath = System.IO.Path.Combine("C:\", OutputFileName)
      Using os = New FileStream(OutputFileFullPath, FileMode.Create)            
           Using stamp = New iTextSharp.text.pdf.PdfStamper(pdfRd, os)
                    Dim fields As iTextSharp.text.pdf.AcroFields = stamp.AcroFields                    
                    Dim Prefix As String = "topmostSubform[0].Page1[0]."
                    fields.SetField(Prefix & "MemberFullName[0]", "ישראל ישראלי")
                    stamp.FormFlattening = true                   
                    stamp.Close()
           End Using
           os.Close()
      End Using
End Using
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema puede estar relacionado con la accesibilidad de los campos fusionados en el formulario PDF. ¿Has intentado verificar que la configuración de accesibilidad del formulario PDF esté correctamente configurada? Puedes hacer esto utilizando la herramienta “Accessibility Checker” de Adobe Acrobat Pro, que se encuentra en el menú “Herramientas”.

    Además, es posible que desees considerar el uso de las funciones de accesibilidad de iTextSharp para marcar los campos fusionados como artefactos, lo cual puede ayudar a que los lectores de pantalla identifiquen mejor los campos del formulario. Esto se puede hacer agregando el campo al diccionario /Artifact del PDF, de la siguiente manera:

    Dim pdfDoc As iTextSharp.text.Document = New iTextSharp.text.Document()
    Dim pdfWriter As iTextSharp.text.pdf.PdfWriter = iTextSharp.text.pdf.PdfWriter.GetInstance(pdfDoc, New FileStream(filename, FileMode.Create))
    pdfDoc.Open()
    Dim cb As iTextSharp.text.pdf.PdfContentByte = pdfWriter.DirectContent
    
    Dim field As iTextSharp.text.pdf.PdfFormField = iTextSharp.text.pdf.PdfFormField.CreateTextField(
        pdfWriter, False, False, 0)
    field.FieldName = "myTextField"
    field.SetWidget(New iTextSharp.text.Rectangle(50, 750, 250, 750 - 20), PdfAnnotation.HIGHLIGHT_INVERT)
    field.SetPage()
    field.MKBorderColor = iTextSharp.text.BaseColor.BLACK
    field.MKBackgroundColor = iTextSharp.text.BaseColor.WHITE
    
    'Agrega el campo al diccionario /Artifacts'
    Dim pageDict As iTextSharp.text.pdf.PdfDictionary = pdfWriter.GetImportedPage(pdfRd, 1)
    Dim artifacts As iTextSharp.text.pdf.PdfDictionary = new iTextSharp.text.pdf.PdfDictionary()
    artifacts.Put(PdfName.ARTIFACT, field.PdfObject)
    pageDict.Put(PdfName.ARTIFACTS, artifacts)
    
    cb.AddTemplate(pageTemplate, 0, 0)
    pdfDoc.Close()
    

    Espero que esto ayude a mejorar la accesibilidad de los campos de tu formulario PDF para los lectores de pantalla.

Comments are closed.