Necesito analizar un documento PDF. Ya implementé el analizador y usé la biblioteca iText y hasta ahora funcionó sin ningún problema.Espacios en blanco extraños al analizar un PDF
Pero no, necesito analizar otro documento que obtiene espacios en blanco muy extraños en el medio de las palabras. Como ejemplo me sale:
Vo rber Zeitung auf die Motorr adsaison. Viele Motorr ADF er Ahr
Todas las palabras en negrita deben estar conectados, pero de alguna manera el analizador PDF es la adición de espacios en blanco en las palabras. Pero cuando copio y pego el contenido del PDF en un archivo de texto, no obtengo estos espacios.
Primero pensé que era por la biblioteca de análisis de PDF que estoy usando, pero también con otra biblioteca obtengo exactamente el mismo problema.
He echado un vistazo al singleSpaceWidth
de las palabras analizadas y noté que siempre está variando cuando agrega un espacio en blanco. Traté de ponerlos juntos manualmente. Pero dado que no existe realmente un patrón para recombinar las palabras, es casi imposible.
¿Alguien más tiene un problema similar o incluso una solución a ese problema?
Conforme a lo solicitado, aquí tienes más información:
- iText Versión 5.2.1
- http://prine.ch/whitespacesProblem.pdf (Enlace al pdf)
Analizar con SemTextExtractionStrategy:
PdfReader reader = new PdfReader("data/SpecialTests/SuedostSchweiz/" + src);
SemTextExtractionStrategy semTextExtractionStrategy = new SemTextExtractionStrategy();
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
// Set the page number on the strategy. Is used in the Parsing strategies.
semTextExtractionStrategy.pageNumber = i;
// Parse text from page
PdfTextExtractor.getTextFromPage(reader, i, semTextExtractionStrategy);
}
Aquí el método SemTextExtractionStrategy que en realidad analiza el t ext. Hay que añadir manualmente después de cada palabra analizada un espacio en blanco, pero de alguna manera lo hace dividir las palabras en la detección:
@Override
public void parseText(TextRenderInfo renderInfo, int pageNumber) {
this.pageNumber = pageNumber;
String text = renderInfo.getText();
currTextBlock.getText().append(text + " ");
....
}
Aquí está toda la Clase SemTextExtraction pero allí lo hace solamente llamo el método de arriba (parseText):
public class SemTextExtractionStrategy implements TextExtractionStrategy {
// Text Extraction Strategies
public ColumnDetecter columnDetecter = new ColumnDetecter();
// Image Extraction Strategies
public ImageRetriever imageRetriever = new ImageRetriever();
public int pageNumber = -1;
public ArrayList<TextParsingStrategy> textParsingStrategies = new ArrayList<TextParsingStrategy>();
public ArrayList<ImageParsingStrategy> imageParsingStrategies = new ArrayList<ImageParsingStrategy>();
public SemTextExtractionStrategy() {
// Add all text parsing strategies which are later on applied on the extracted text
// textParsingStrategies.add(fontSizeMatcher);
textParsingStrategies.add(columnDetecter);
// Add all image parsing strategies which are later on applied on the extracted text
imageParsingStrategies.add(imageRetriever);
}
@Override
public void beginTextBlock() {
}
@Override
public void renderText(TextRenderInfo renderInfo) {
// TEXT PARSING
for(TextParsingStrategy strategy : textParsingStrategies) {
strategy.parseText(renderInfo, pageNumber);
}
}
@Override
public void endTextBlock() {
}
@Override
public void renderImage(ImageRenderInfo renderInfo) {
for(ImageParsingStrategy strategy : imageParsingStrategies) {
strategy.parseImage(renderInfo);
}
}
}
indique la versión de iText que está utilizando y, de alguna manera, también debe proporcionar el PDF y el código con el que realiza el análisis. – Eugene
Se agregó toda la información en la publicación anterior. – Prine
¿qué pasa con la clase TextExtractionStrategy que utiliza? – Eugene