جداول PDF را استخراج کنید

PDF به یکی از پرکاربردترین قالب‌های سند در زمینه‌های متعدد تبدیل شده است. در موارد مختلف، از آن برای تولید فاکتورهایی استفاده می شود که به نظر می رسد داده ها به صورت جدولی هستند. در چنین مواردی، ممکن است لازم باشد PDF را تجزیه کنید تا داده ها را از جداول به صورت برنامه نویسی بخوانید. برای رسیدن به این هدف، مقاله نحوه استخراج داده ها از جداول PDF با استفاده از C# را پوشش می دهد.

C# API برای استخراج جداول از PDF

برای استخراج داده ها از جداول در فایل های PDF، از Aspose.PDF برای دات نت استفاده می کنیم. این یک API قدرتمند است که طیف گسترده ای از ویژگی های دستکاری PDF را ارائه می دهد. می‌توانید API را دانلود یا با استفاده از NuGet نصب کنید.

PM> Install-Package Aspose.PDF

استخراج داده ها از جداول PDF در سی شارپ

مراحل زیر برای استخراج داده ها از جداول در یک PDF با استفاده از C# است.

  • سند PDF را با استفاده از کلاس Document بارگیری کنید.
  • با استفاده از مجموعه Document.Pages صفحات را در PDF حلقه بزنید.
  • در هر تکرار، شی TableAbsorber را مقداردهی اولیه کنید و با استفاده از روش TableAbsorber.Visit(Page) از صفحه انتخاب شده بازدید کنید.
  • در یک حلقه تودرتو، لیست جداول موجود در مجموعه TableAbsorber.TableList را تکرار کنید.
  • برای هر AbsorbedTable در مجموعه، در میان مجموعه سطرها در AbsorbedTable.RowList تکرار کنید.
  • برای هر AbsorbedRow در مجموعه، از طریق مجموعه سلول‌ها در AbsorbedRow.CellList تکرار کنید.
  • در نهایت، از میان مجموعه TextFragments هر AbsorbedCell حلقه بزنید و متن را چاپ کنید.

نمونه کد زیر نحوه استخراج متن از جدول PDF در سی شارپ را نشان می دهد.

// سند PDF منبع را بارگیری کنید
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf"); 

// از طریق صفحات حلقه بزنید                      
foreach (var page in pdfDocument.Pages)
{
	// یک جاذب جدول ایجاد کنید و از صفحه دیدن کنید
	Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
	absorber.Visit(page);
	
	// از طریق هر جدول جذب شده حلقه بزنید 
	foreach (AbsorbedTable table in absorber.TableList)
	{
		Console.WriteLine("Table");
		
		// از طریق هر ردیف در جدول حلقه بزنید
		foreach (AbsorbedRow row in table.RowList)
		{
			// از طریق هر سلول در ردیف حلقه بزنید
			foreach (AbsorbedCell cell in row.CellList)
			{       
				// از میان قطعات متن حلقه بزنید
				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();
		}
	}
}

استخراج جدول از یک منطقه خاص از صفحه

در زیر مراحل استخراج جدول از قسمت خاصی از صفحه در PDF با استفاده از سی شارپ آمده است.

  • سند PDF را با استفاده از کلاس Document بارگیری کنید.
  • Page مورد نظر را از مجموعه Document.Pages انتخاب کنید.
  • حاشیه نویسی مربع صفحه را استخراج کنید.
  • شیء TableAbsorber را مقداردهی کنید و با استفاده از روش TableAbsorber.Visit(Page) از صفحه بازدید کنید.
  • در یک حلقه تو در تو، لیست جداول موجود در مجموعه TableAbsorber.TableList را تکرار کنید.
  • اگر جدول در منطقه است مراحل زیر را انجام دهید.

نمونه کد زیر نحوه استخراج جدول از یک منطقه خاص از صفحه PDF را نشان می دهد.

// سند PDF منبع را بارگیری کنید
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf"); 

// صفحه را انتخاب کرده و حاشیه مربع آن را استخراج کنید
var page = pdfDocument.Pages[1];
var squareAnnotation =
	page.Annotations.FirstOrDefault(ann => ann.AnnotationType == Annotations.AnnotationType.Square)
	as Annotations.SquareAnnotation;

// جذب جدول ایجاد کنید و از صفحه دیدن کنید
Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
absorber.Visit(page);

// از طریق هر جدول جذب شده در لیست حلقه بزنید 
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)
	{
		// در هر ردیف از جدول حلقه بزنید
		foreach (AbsorbedRow row in table.RowList)
		{
			// از طریق هر سلول در ردیف حلقه بزنید
			foreach (AbsorbedCell cell in row.CellList)
			{
				// قطعات متن را حلقه بزنید و متن را چاپ کنید
				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();
		}
	}
}

مجوز رایگان دریافت کنید

می‌توانید از Aspose.PDF برای دات‌نت بدون محدودیت ارزیابی با استفاده از مجوز موقت استفاده کنید.

نتیجه

در این مقاله نحوه استخراج داده ها از جداول در یک PDF با استفاده از سی شارپ را آموختید. علاوه بر این، نحوه استخراج جدول از ناحیه خاصی از صفحه را در PDF مشاهده کرده اید. می‌توانید با استفاده از مستندات درباره C# PDF API بیشتر کاوش کنید. همچنین، می‌توانید سؤالات خود را در [فروم 29 ما ارسال کنید.

همچنین ببینید