c# - read - itextsharp leer contenido pdf
Lectura de contenido PDF con itextsharp dll en VB.NET o C# (6)
LGPL / FOSS iTextSharp 4.x
var pdfReader = new PdfReader(path); //other filestream etc
byte[] pageContent = _pdfReader .GetPageContent(pageNum); //not zero based
byte[] utf8 = Encoding.Convert(Encoding.Default, Encoding.UTF8, pageContent);
string textFromPage = Encoding.UTF8.GetString(utf8);
Ninguna de las otras respuestas me resultó útil, todas parecen apuntar a AGPL v5 de iTextSharp. Nunca pude encontrar ninguna referencia a SimpleTextExtractionStrategy
o LocationTextExtractionStrategy
en la versión de FOSS.
Algo más que podría ser muy útil en relación con esto:
const string PdfTableFormat = @"/(.*/)Tj";
Regex PdfTableRegex = new Regex(PdfTableFormat, RegexOptions.Compiled);
List<string> ExtractPdfContent(string rawPdfContent)
{
var matches = PdfTableRegex.Matches(rawPdfContent);
var list = matches.Cast<Match>()
.Select(m => m.Value
.Substring(1) //remove leading (
.Remove(m.Value.Length - 4) //remove trailing )Tj
.Replace(@"/)", ")") //unencode parens
.Replace(@"/(", "(")
.Trim()
)
.ToList();
return list;
}
Esto extraerá los datos solo de texto del PDF, si el texto que se muestra es Foo(bar)
, se codificará en el PDF como (Foo/(bar/))Tj
, este método devolverá Foo(bar)
como se esperaba. Este método eliminará mucha información adicional, como las coordenadas de ubicación del contenido pdf en bruto.
¿Cómo puedo leer el contenido PDF con itextsharp con la clase Pdfreader? Mi PDF puede incluir Texto simple o Imágenes del texto.
Aquí hay una solución de VB.NET basada en la solución de ShravankumarKumar.
Esto SÓLO le dará el texto. Las imágenes son una historia diferente.
Public Shared Function GetTextFromPDF(PdfFileName As String) As String
Dim oReader As New iTextSharp.text.pdf.PdfReader(PdfFileName)
Dim sOut = ""
For i = 1 To oReader.NumberOfPages
Dim its As New iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy
sOut &= iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(oReader, i, its)
Next
Return sOut
End Function
En mi caso, solo quería el texto de un área específica del documento PDF, así que usé un rectángulo alrededor del área y extraje el texto del mismo. En el ejemplo a continuación, las coordenadas son para toda la página. No tengo herramientas de creación de PDF, así que cuando llegó el momento de reducir el rectángulo a la ubicación específica, hice algunas conjeturas sobre las coordenadas hasta que se encontró el área.
Rectangle _pdfRect = new Rectangle(0f, 0f, 612f, 792f); // Entire page - PDF coordinate system 0,0 is bottom left corner. 72 points / inch
RenderFilter _renderfilter = new RegionTextRenderFilter(_pdfRect);
ITextExtractionStrategy _strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), _filter);
string _text = PdfTextExtractor.GetTextFromPage(_pdfReader, 1, _strategy);
Como se señala en los comentarios anteriores, el texto resultante no mantiene ninguno de los formatos encontrados en el documento PDF; sin embargo, me alegré de que conservara los retornos de carro. En mi caso, había suficientes constantes en el texto que pude extraer los valores que necesitaba.
No puede leer y analizar el contenido de un PDF usando iTextSharp como le gustaría.
Del tutorial de SourceForge de iTextSharp:
No puede "analizar" un archivo PDF existente con iText, solo puede "leerlo" página por página.
¿Qué significa esto?
El formato pdf es solo un lienzo donde el texto y los gráficos se colocan sin ninguna información estructural. Como tal, no hay ningún ''iText-objects'' en un archivo PDF. En cada página probablemente habrá un número de ''Cadenas'', pero no puede reconstruir una frase o un párrafo usando estas cadenas. Probablemente hay varias líneas dibujadas, pero no puede recuperar un objeto Tabla basado en estas líneas. En resumen: el análisis del contenido de un archivo PDF NO ES POSIBLE con iText. Publique su pregunta en las noticias del grupo de noticias: //comp.text.pdf y quizás obtenga algunas respuestas de personas que han creado herramientas que pueden analizar PDF y extraer algunos de sus contenidos, pero no esperan herramientas que realicen una viñeta. a prueba de conversión a texto estructurado.
Public Sub PDFTxtToPdf(ByVal sTxtfile As String, ByVal sPDFSourcefile As String)
Dim sr As StreamReader = New StreamReader(sTxtfile)
Dim doc As New Document()
PdfWriter.GetInstance(doc, New FileStream(sPDFSourcefile, FileMode.Create))
doc.Open()
doc.Add(New Paragraph(sr.ReadToEnd()))
doc.Close()
End Sub
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;
using System.IO;
public string ReadPdfFile(string fileName)
{
StringBuilder text = new StringBuilder();
if (File.Exists(fileName))
{
PdfReader pdfReader = new PdfReader(fileName);
for (int page = 1; page <= pdfReader.NumberOfPages; page++)
{
ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
text.Append(currentText);
}
pdfReader.Close();
}
return text.ToString();
}