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
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.