Tệp PDF là định dạng tiêu chuẩn để trao đổi tài liệu qua internet. Các tài liệu như hóa đơn và hướng dẫn sản phẩm thường được chia sẻ dưới dạng PDF. Có thể có những trường hợp bạn có nhiều hóa đơn chứa dữ liệu dạng bảng mà bạn cần trích xuất và xử lý thêm. Sẽ hiệu quả hơn khi trích xuất dữ liệu này theo chương trình. Để kết thúc, bài viết này sẽ hướng dẫn bạn cách trích xuất dữ liệu từ bảng PDF bằng C ++.

API C ++ để trích xuất dữ liệu từ bảng trong tệp PDF

Aspose.PDF dành cho C ++ là thư viện C ++ cho phép bạn tạo, đọc và cập nhật các tệp PDF. Hơn nữa, API hỗ trợ trích xuất dữ liệu từ các bảng trong tệp PDF. Bạn có thể cài đặt API thông qua NuGet hoặc tải xuống trực tiếp từ phần tải xuống.

PM> Install-Package Aspose.PDF.Cpp

Trích xuất dữ liệu từ bảng PDF bằng C ++

Sau đây là các bước để trích xuất dữ liệu từ bảng PDF.

Đoạn mã mẫu sau đây cho thấy cách trích xuất dữ liệu từ bảng PDF bằng C ++.

// Tải tài liệu PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input3.pdf");

// Lặp lại các trang của tài liệu
for (auto page : pdfDocument->get_Pages())
{
	// Tạo một phiên bản của lớp TableAbsorber
	auto absorber = MakeObject<TableAbsorber>();
	absorber->Visit(page);

	// Lặp lại các bảng
	for (auto table : absorber->get_TableList())
	{
		Console::WriteLine(u"Table");

		// Lặp lại qua các hàng
		for (auto row : table->get_RowList())
		{
			// Lặp lại qua các ô
			for (auto cell : row->get_CellList())
			{
				// Lặp lại các đoạn văn bản
				for (auto fragment : cell->get_TextFragments())
				{
					String string = u"";

					// Lặp lại các đoạn văn bản
					for (auto seg : fragment->get_Segments())
					{
						// Nhận văn bản
						string = String::Concat(string, seg->get_Text());
					}

					// In văn bản
					Console::WriteLine(string);
				}
			}
			Console::WriteLine();
		}
	}
}

Trích xuất dữ liệu từ một bảng trong một khu vực cụ thể của trang PDF

Để trích xuất dữ liệu từ một bảng trong một khu vực cụ thể của trang PDF, vui lòng thực hiện theo các bước dưới đây.

Đoạn mã mẫu sau đây trình bày cách trích xuất dữ liệu từ một bảng trong một khu vực cụ thể của trang PDF bằng C ++.

// Tải tài liệu PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input4.pdf");

// Lấy trang đầu tiên của tài liệu
auto page = pdfDocument->get_Pages()->idx_get(1);

// Lặp lại các chú thích trên trang
for (auto annotation : page->get_Annotations())
{
	// Kiểm tra loại chú thích
	if (annotation->get_AnnotationType() == Annotations::AnnotationType::Square)
	{
		System::SharedPtr<SquareAnnotation> squareAnnotation = DynamicCast<SquareAnnotation>(annotation);

		// Tạo một phiên bản của lớp TableAbsorber
		auto absorber = MakeObject<TableAbsorber>();
		absorber->Visit(page);

		// Lặp lại các bảng
		for (auto table : absorber->get_TableList())
		{
			// Kiểm tra xem bảng có nằm trong khu vực không
			if ((squareAnnotation->get_Rect()->get_LLX() < table->get_Rectangle()->get_LLX()) &&
				(squareAnnotation->get_Rect()->get_LLY() < table->get_Rectangle()->get_LLY()) &&
				(squareAnnotation->get_Rect()->get_URX() > table->get_Rectangle()->get_URX()) &&
				(squareAnnotation->get_Rect()->get_URY() > table->get_Rectangle()->get_URY())
				)
			{
				// Lặp lại qua các hàng
				for (auto row : table->get_RowList())
				{
					// Lặp lại qua các ô
					for (auto cell : row->get_CellList())
					{
						// Lặp lại qua các đoạn văn bản
						for (auto fragment : cell->get_TextFragments())
						{
							String string = u"";

							// Lặp lại các đoạn văn bản
							for (auto seg : fragment->get_Segments())
							{
								// Nhận văn bản
								string = String::Concat(string, seg->get_Text());
							}

							// In văn bản
							Console::WriteLine(string);
						}
					}
					Console::WriteLine();
				}
			}
		}
		break;
	}
}

Nhận giấy phép miễn phí

Để dùng thử API mà không có giới hạn đánh giá, bạn có thể yêu cầu giấy phép tạm thời miễn phí.

Sự kết luận

Trong bài này, bạn đã học cách trích xuất dữ liệu từ bảng PDF bằng C ++. Hơn nữa, bạn đã học cách trích xuất dữ liệu từ một bảng trong một vùng cụ thể của trang PDF. API Aspose.PDF cho C ++ cung cấp nhiều tính năng bổ sung để làm việc với các tệp PDF. Bạn có thể khám phá API chi tiết bằng cách truy cập tài liệu chính thức. Trong trường hợp có bất kỳ câu hỏi nào, vui lòng liên hệ với chúng tôi trên diễn đàn hỗ trợ miễn phí của chúng tôi.

Xem thêm