PDF stał się jednym z najczęściej używanych formatów dokumentów w wielu dziedzinach. W różnych przypadkach służy do generowania faktur, w których dane wydają się być w formie tabelarycznej. W takich przypadkach może być konieczne przeanalizowanie pliku PDF w celu programowego odczytania danych z tabel. Aby to osiągnąć, w artykule omówiono sposób wyodrębniania danych z tabel PDF przy użyciu języka C#.
- C# API do wyodrębniania tabel PDF
- Wyodrębnij dane z tabel PDF w C#
- Wyodrębnij tabelę z określonego obszaru strony
C# API do wyodrębniania tabel z PDF
Do wydobycia danych z tabel w plikach PDF wykorzystamy Aspose.PDF for .NET. Jest to potężny interfejs API, który zapewnia szeroki zakres funkcji manipulacji plikami PDF. Możesz pobrać interfejs API lub zainstalować go za pomocą NuGet.
PM> Install-Package Aspose.PDF
Wyodrębnij dane z tabel PDF w C#
Poniżej przedstawiono kroki, aby wyodrębnić dane z tabel w pliku PDF przy użyciu języka C#.
- Załaduj dokument PDF za pomocą klasy Document.
- Przeglądaj strony w formacie PDF za pomocą kolekcji Document.Pages.
- W każdej iteracji inicjuj obiekt TableAbsorber i odwiedzaj wybraną stronę metodą TableAbsorber.Visit(Page).
- W pętli zagnieżdżonej wykonaj iterację listy tabel w kolekcji TableAbsorber.TableList.
- Dla każdej AbsorbedTable w kolekcji wykonaj iterację w kolekcji wierszy w AbsorbedTable.RowList.
- Dla każdego AbsorbedRow w kolekcji wykonaj iterację w kolekcji komórek w AbsorbedRow.CellList.
- Na koniec przejrzyj kolekcję TextFragments każdego AbsorbedCell i wydrukuj tekst.
Poniższy przykładowy kod pokazuje, jak wyodrębnić tekst z tabeli PDF w języku C#.
// Załaduj źródłowy dokument PDF
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf");
// Przewijaj strony
foreach (var page in pdfDocument.Pages)
{
// Stwórz pochłaniacz stołu i odwiedź stronę
Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
absorber.Visit(page);
// Przeprowadź pętlę przez każdą wchłoniętą tabelę
foreach (AbsorbedTable table in absorber.TableList)
{
Console.WriteLine("Table");
// Przejdź przez każdy wiersz w tabeli
foreach (AbsorbedRow row in table.RowList)
{
// Przejdź przez każdą komórkę w rzędzie
foreach (AbsorbedCell cell in row.CellList)
{
// Przejrzyj fragmenty tekstu w pętli
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();
}
}
}
Wyodrębnij tabelę z określonego obszaru strony
Poniżej przedstawiono kroki, aby wyodrębnić tabelę z określonej części strony w pliku PDF przy użyciu języka C#.
- Załaduj dokument PDF za pomocą klasy Document.
- Wybierz żądaną Strona z kolekcji Document.Pages.
- Wyodrębnij adnotację Kwadrat ze strony.
- Zainicjuj obiekt TableAbsorber i odwiedź stronę za pomocą metody TableAbsorber.Visit(Page).
- W pętli zagnieżdżonej iteruj listę tabel w kolekcji TableAbsorber.TableList.
- Jeśli tabela znajduje się w regionie, wykonaj następujące kroki.
- Przejrzyj kolekcję wierszy w AbsorbedTable.RowList.
- Dla każdego AbsorbedRow w kolekcji wykonaj iterację w kolekcji komórek w AbsorbedRow.CellList.
- Na koniec przejrzyj kolekcję TextFragments każdego AbsorbedCell i wydrukuj tekst.
Poniższy przykładowy kod pokazuje, jak wyodrębnić tabelę z określonego regionu strony PDF.
// Załaduj źródłowy dokument PDF
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf");
// Wybierz stronę i wyodrębnij jej kwadratową adnotację
var page = pdfDocument.Pages[1];
var squareAnnotation =
page.Annotations.FirstOrDefault(ann => ann.AnnotationType == Annotations.AnnotationType.Square)
as Annotations.SquareAnnotation;
// Stwórz table absorber i odwiedź stronę
Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
absorber.Visit(page);
// Przejdź przez każdą wchłoniętą tabelę na liście
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)
{
// Przejdź przez każdy wiersz tabeli
foreach (AbsorbedRow row in table.RowList)
{
// Przejdź przez każdą komórkę w rzędzie
foreach (AbsorbedCell cell in row.CellList)
{
// Przejrzyj fragmenty tekstu i wydrukuj tekst
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();
}
}
}
Uzyskaj bezpłatną licencję
Możesz używać Aspose.PDF for .NET bez ograniczeń ewaluacyjnych przy użyciu tymczasowej licencji.
Wniosek
W tym artykule nauczyłeś się, jak wyodrębniać dane z tabel w pliku PDF przy użyciu języka C#. Ponadto widziałeś, jak wyodrębnić tabelę z określonego obszaru strony w formacie PDF. Więcej informacji na temat C# PDF API można znaleźć w dokumentacji. Możesz również zamieścić swoje pytania na naszym forum.