PDF har blivit ett av de mest använda dokumentformaten inom en mängd områden. I olika fall används den för att generera fakturor där uppgifterna verkar vara i tabellform. I sådana fall kan du behöva analysera PDF-filen för att läsa data från tabellerna programmatiskt. För att uppnå detta täcker artikeln hur man extraherar data från PDF-tabeller med C#.
- C# Library för att extrahera PDF-tabeller
- Extrahera data från PDF-tabeller i C#
- Extrahera tabell från ett specifikt område på sidan
C# Library för att extrahera tabeller från PDF
För att extrahera data från tabellerna i PDF-filer kommer vi att använda Aspose.PDF för .NET. Det är ett kraftfullt bibliotek som tillhandahåller ett brett utbud av PDF-manipuleringsfunktioner. Du kan antingen ladda ner biblioteket eller installera det med NuGet.
PM> Install-Package Aspose.PDF
Extrahera data från PDF-tabeller i C#
Följande är stegen för att extrahera data från tabeller i en PDF med C#.
- Ladda PDF-dokumentet med klassen Document.
- Bläddra igenom sidorna i PDF med Document.Pages samlingen.
- Initiera objektet TableAbsorber i varje iteration och besök den valda sidan med metoden TableAbsorber.Visit(Page).
- I en kapslad loop, iterera genom listan med tabeller i samlingen TableAbsorber.TableList.
- För varje AbsorbedTable i samlingen, iterera genom samlingen av rader i AbsorbedTable.RowList.
- För varje AbsorbedRow i samlingen, iterera genom samlingen av celler i AbsorbedRow.CellList.
- Slutligen, gå igenom TextFragments-samlingen för varje AbsorbedCell och skriv ut texten.
Följande kodexempel visar hur man extraherar text från PDF-tabellen i C#.
// Ladda käll-PDF-dokument
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf");
// Bläddra igenom sidorna
foreach (var page in pdfDocument.Pages)
{
// Skapa en bordsabsorbent och besök sidan
Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
absorber.Visit(page);
// Gå igenom varje absorberat bord
foreach (AbsorbedTable table in absorber.TableList)
{
Console.WriteLine("Table");
// Gå igenom varje rad i tabellen
foreach (AbsorbedRow row in table.RowList)
{
// Gå igenom varje cell i raden
foreach (AbsorbedCell cell in row.CellList)
{
// Gå igenom textfragmenten
foreach (TextFragment fragment in cell.TextFragments)
{
var sb = new StringBuilder();
foreach (TextSegment seg in fragment.Segments)
sb.Append(seg.Text);
Console.Write($"{sb.ToString()}|");
}
}
Console.WriteLine();
}
}
}
Extrahera tabell från ett specifikt område av PDF
Följande är stegen för att extrahera en tabell från en specifik del av sidan i en PDF med C#.
- Ladda PDF-dokumentet med klassen Document.
- Välj önskad Page från samlingen Document.Pages.
- Extrahera kvadratanteckningen på sidan.
- Initiera objektet TableAbsorber och besök sidan med metoden TableAbsorber.Visit(Page).
- I en kapslad loop, iterera genom listan med tabeller i samlingen TableAbsorber.TableList.
- Om tabellen är i regionen utför du följande steg.
- Iterera genom samlingen av rader i AbsorbedTable.RowList.
- För varje AbsorbedRow i samlingen, iterera genom samlingen av celler i AbsorbedRow.CellList.
- Slutligen, gå igenom TextFragments-samlingen för varje AbsorbedCell och skriv ut texten.
Följande kodexempel visar hur man extraherar tabeller från en specifik region på PDF-sidan.
// Ladda käll-PDF-dokument
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf");
// Välj sidan och extrahera dess fyrkantiga anteckning
var page = pdfDocument.Pages[1];
var squareAnnotation =
page.Annotations.FirstOrDefault(ann => ann.AnnotationType == Annotations.AnnotationType.Square)
as Annotations.SquareAnnotation;
// Skapa bordsabsorbent och besök sidan
Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
absorber.Visit(page);
// Gå igenom varje absorberad tabell i listan
foreach (AbsorbedTable table in absorber.TableList)
{
var isInRegion = (squareAnnotation.Rect.LLX < table.Rectangle.LLX) &&
(squareAnnotation.Rect.LLY < table.Rectangle.LLY) &&
(squareAnnotation.Rect.URX > table.Rectangle.URX) &&
(squareAnnotation.Rect.URY > table.Rectangle.URY);
if (isInRegion)
{
// Gå igenom varje rad i tabellen
foreach (AbsorbedRow row in table.RowList)
{
// Gå igenom varje cell i raden
foreach (AbsorbedCell cell in row.CellList)
{
// Gå igenom textfragmenten och skriv ut texten
foreach (TextFragment fragment in cell.TextFragments)
{
var sb = new StringBuilder();
foreach (TextSegment seg in fragment.Segments)
{
sb.Append(seg.Text);
}
var text = sb.ToString();
Console.Write($"{text}|");
}
}
Console.WriteLine();
}
}
}
Gratis C# PDF-bibliotek för att extrahera tabeller
Du kan få en gratis tillfällig licens och extrahera data från tabeller i PDF-filer utan några begränsningar.
Utforska C# PDF-biblioteket
Du kan utforska mer om C# PDF-biblioteket med hjälp av dokumentationen. Du kan också posta dina frågor på vårt forum.
Slutsats
I den här artikeln har du lärt dig hur du extraherar data från tabeller i en PDF med C#. Dessutom har du sett hur man extraherar en tabell från en specifik del av sidan i PDF. Steg-för-steg-guiden och kodexemplet har visat hur lätt det är att bearbeta och PDF-tabellera och extrahera dess data.