Saltar al contenido

¿Cómo puedo obtener formato de texto con iTextSharp?

Nuestros mejores investigadores han agotado sus reservas de café, investigando diariamente por la respuesta, hasta que Jairo encontró el resultado en GitLab y hoy la comparte aquí.

Solución:

Déjame intentar apuntarte en una dirección diferente. iTextSharp tiene un sistema de extracción de texto realmente hermoso y simple que maneja algunos de los tokens básicos. Desafortunadamente, no maneja información de color, pero según @Mark Storer, puede que no sea demasiado difícil de implementar usted mismo.

COMENZAR EDITAR

Empecé a trabajar en la implementación de información de color. Vea la publicación de mi blog aquí para obtener más detalles. (Perdón por el formato incorrecto, me voy a cenar ahora).

FIN EDITAR

El siguiente código combina varias preguntas y respuestas aquí, incluida esta para obtener la altura de la fuente (aunque no es exacta), así como otra (que por mi vida parece que ya no puedo encontrar) que muestra cómo detectar falso negrita.

los PostscriptFontName devuelve algunos caracteres adicionales delante del nombre de la fuente, creo que tiene que ver con cuando incrusta subconjuntos de fuentes.

A continuación se muestra una aplicación completa de WinForms que se dirige a iTextSharp 5.1.1.0 y extrae texto como HTML.

Captura de pantalla del PDF de muestra

Captura de pantalla del PDF de muestra

Texto de muestra extraído como HTML

Hello 
w
o
rl
d 

Test

Código

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using iTextSharp.text.pdf.parser;
using iTextSharp.text.pdf;

namespace WindowsFormsApplication2

    public partial class Form1 : Form
    
        public Form1()
        
            InitializeComponent();
        

        private void Form1_Load(object sender, EventArgs e)
        
            PdfReader reader = new PdfReader(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Document.pdf"));
            TextWithFontExtractionStategy S = new TextWithFontExtractionStategy();
            string F = iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(reader, 1, S);
            Console.WriteLine(F);

            this.Close();
        

        public class TextWithFontExtractionStategy : iTextSharp.text.pdf.parser.ITextExtractionStrategy
        
            //HTML buffer
            private StringBuilder result = new StringBuilder();

            //Store last used properties
            private Vector lastBaseLine;
            private string lastFont;
            private float lastFontSize;

            //http://api.itextpdf.com/itext/com/itextpdf/text/pdf/parser/TextRenderInfo.html
            private enum TextRenderMode
            
                FillText = 0,
                StrokeText = 1,
                FillThenStrokeText = 2,
                Invisible = 3,
                FillTextAndAddToPathForClipping = 4,
                StrokeTextAndAddToPathForClipping = 5,
                FillThenStrokeTextAndAddToPathForClipping = 6,
                AddTextToPaddForClipping = 7
            



            public void RenderText(iTextSharp.text.pdf.parser.TextRenderInfo renderInfo)
            

            public string GetResultantText()
            
                //If we wrote anything then we'll always have a missing closing tag so close it here
                if (result.Length > 0)
                
                    result.Append("");
                
                return result.ToString();
            

            //Not needed
            public void BeginTextBlock()  
            public void EndTextBlock()  
            public void RenderImage(ImageRenderInfo renderInfo)  
        
    

Si entiendes que ha sido de provecho nuestro post, nos gustaría que lo compartas con el resto entusiastas de la programación de esta forma contrubuyes a extender esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *