
Tìm kiếm văn bản cụ thể trong PDF là một nhiệm vụ phổ biến trong các hệ thống quản lý tài liệu, công cụ kiểm tra pháp lý, bộ xử lý hóa đơn và các ứng dụng doanh nghiệp khác. Bất kể bạn đang cố gắng xác định một từ khóa, trích xuất một số giá trị nhất định, hoặc xóa thông tin nhạy cảm, tự động hóa tìm kiếm PDF có thể tiết kiệm rất nhiều thời gian và công sức.
Trong bài viết trên blog này, bạn sẽ học cách tìm kiếm văn bản trong các tệp PDF một cách lập trình bằng C#. Chúng tôi sẽ hướng dẫn bạn từng bước về các tính năng chính với các ví dụ mã C# thực tiễn.
Bài viết này đề cập đến các chủ đề sau:
- Thư viện C# để Tìm kiếm trong Tài liệu PDF
- Tìm kiếm văn bản trong PDF bằng C#
- Tìm kiếm không phân biệt chữ hoa chữ thường và từ nguyên trong PDF
- Tìm kiếm với Biểu thức chính quy trong PDF
- Tìm kiếm và trích xuất văn bản với chi tiết vị trí
- Làm nổi bật hoặc Thay thế văn bản đã tìm thấy
- Tìm kiếm trên tất cả các trang hoặc các trang cụ thể
- Tìm kiếm và Bịt thông tin nhạy cảm
- Tài nguyên miễn phí
Thư viện C# để Tìm kiếm trong Tài liệu PDF
Aspose.PDF for .NET đơn giản hóa quy trình tìm kiếm văn bản trong các tệp PDF bằng C#. Nó cho phép bạn tìm các từ chính xác, khớp mẫu sử dụng biểu thức chính quy và thậm chí làm nổi bật hoặc thay thế văn bản khớp - tất cả chỉ với một vài dòng mã. Thư viện mạnh mẽ này cung cấp các tính năng vững chắc cho việc thao tác với tài liệu PDF. Nó cho phép các nhà phát triển dễ dàng triển khai các chức năng tìm kiếm. Với Aspose.PDF, bạn có thể nhanh chóng tìm các từ trong một tệp PDF, biến nó thành một công cụ vô giá cho các nhà phát triển phần mềm.
Trước khi bắt đầu tìm kiếm văn bản trong PDF, bạn cần thiết lập môi trường phát triển của mình. Hãy làm theo các bước sau để bắt đầu với Aspose.PDF for .NET:
1. Cài đặt Aspose.PDF for .NET.
Tải nó về từ releases hoặc cài đặt nó qua NuGet.Mở dự án .NET của bạn trong Visual Studio và chạy lệnh sau trong Console của Trình quản lý Gói NuGet:
PM> Install-Package Aspose.PDF
Lệnh này thêm thư viện Aspose.PDF vào dự án của bạn để bạn có thể truy cập các tính năng xử lý PDF mạnh mẽ của nó.
2. Nhập các không gian tên cần thiết
Ở đầu tệp C# của bạn, thêm các chỉ thị sử dụng sau:
using Aspose.Pdf;
using Aspose.Pdf.Text;
Bây giờ bạn đã sẵn sàng để bắt đầu tìm kiếm văn bản bên trong các tệp PDF của mình bằng cách sử dụng API của Aspose.PDF.
Tìm kiếm văn bản trong PDF bằng C#
Với Aspose.PDF for .NET, bạn có thể dễ dàng tìm kiếm các từ hoặc cụm từ cụ thể trong một tệp PDF, xác định tất cả các trường hợp của chúng và thực hiện các hành động như làm nổi bật chúng hoặc trích xuất các chi tiết của chúng.
Làm theo các bước này để thực hiện một tìm kiếm văn bản cơ bản:
- Tải tệp PDF mục tiêu bằng cách sử dụng lớp Document.
- Tạo một TextFragmentAbsorber để xác định từ khóa tìm kiếm.
- Chạy bộ hấp thụ trên tất cả các trang bằng cách sử dụng phương thức Accept().
- Truy xuất tất cả các đoạn văn bản phù hợp.
- In danh sách số lượng trận đấu được tìm thấy.
- Lặp qua và hiển thị từng trận đấu với số trang của nó.
Ví dụ mã sau triển khai các bước này.
// Tải tệp PDF lên
Document pdfDocument = new Document("sample.pdf");
// Tạo một bộ hấp thụ văn bản với từ khóa tìm kiếm
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("invoice");
// Áp dụng bộ hấp thụ cho tất cả các trang
pdfDocument.Pages.Accept(textFragmentAbsorber);
// Lấy các đoạn văn bản khớp nhau
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;
// Print how many times the keyword was found
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");
// Lặp qua và in ra từng văn bản được tìm thấy
foreach (TextFragment fragment in textFragments)
{
Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}
Ví dụ đầu ra
Found 3 instance(s) of the keyword.
Text: invoice | Page: 1
Text: invoice | Page: 2
Text: invoice | Page: 3
Ví dụ này minh họa một tìm kiếm từ khóa đơn giản hoạt động trên tất cả các trang trong PDF. Bạn sẽ thấy văn bản khớp với số trang của nó.
Hiểu các lớp chính được sử dụng trong tìm kiếm PDF
Để hiểu rõ hơn về những gì đang xảy ra trong mã, đây là một phân tích nhanh về các lớp và phương thức chính liên quan:
Tài liệu
: Đại diện cho toàn bộ tệp PDF. Nó cung cấp quyền truy cập vào các trang, nội dung và cấu trúc.TextFragmentAbsorber
: Tìm tất cả các trường hợp của một chuỗi hoặc mẫu nhất định trong PDF. Bạn cũng có thể kích hoạt các tính năng như tìm kiếm không phân biệt chữ hoa chữ thường hoặc tìm kiếm dựa trên regex.Accept()
: Áp dụng bộ hấp thụ cho mỗi trang. Nó quét qua tài liệu và thu thập các đoạn phù hợp.TextFragments
: Bộ sưu tập tất cả các đoạn văn bản khớp được trả về bởi bộ hấp thụ.TextFragment
: Mỗi trận đấu cá nhân với các chi tiết như nội dung, vị trí và số trang.
Tìm kiếm không phân biệt chữ hoa chữ thường và từ nguyên vẹn bằng C#
Khi bạn tìm kiếm nội dung PDF, bạn cần kiểm soát cách hệ thống tìm các kết quả phù hợp để đảm bảo kết quả chính xác. Đôi khi, bạn muốn bỏ qua sự phân biệt chữ hoa chữ thường (“Invoice” so với “invoice”), hoặc bạn muốn chỉ khớp các từ đầy đủ—không phải các khớp một phần trong các từ khác.
Aspose.PDF for .NET cung cấp cho bạn các công cụ để thực hiện cả hai.
Tìm kiếm không phân biệt chữ hoa chữ thường
Theo mặc định, việc tìm kiếm phân biệt chữ hoa chữ thường. Để bỏ qua phân biệt chữ cái, hãy sử dụng TextSearchOptions
với IgnoreCase
được kích hoạt:
// Tải tệp PDF lên
Document pdfDocument = new Document("sample.pdf");
// Tạo một bộ hấp thụ văn bản với biểu thức chính quy không phân biệt chữ hoa chữ thường
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("(?i)INVOICE");
// Đặt tùy chọn tìm kiếm văn bản để cho phép sử dụng biểu thức chính quy
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;
// Áp dụng bộ hấp thụ cho tất cả các trang
pdfDocument.Pages.Accept(textFragmentAbsorber);
// Retrieve the matched text fragments
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;
// Xuất số lượng trận đấu được tìm thấy
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");
// Lặp qua và hiển thị từng đoạn văn bản đã tìm thấy
foreach (TextFragment fragment in textFragments)
{
Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}
Điều này sẽ tìm cả "Invoice", "invoice", "INVOICE" và các biến thể khác.
Khớp Chỉ Từ Nguyên Vẹn
Bạn cũng có thể ngăn chặn các kết quả phù hợp một phần. Ví dụ, việc tìm kiếm car
không nên khớp với care
hoặc scar
.
// Tải tệp PDF lên
Document pdfDocument = new Document("sample.pdf");
// Tạo một bộ hấp thụ văn bản với biểu thức chính quy để khớp từ nguyên vẹn
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(@"\bcar\b");
// Đặt tùy chọn tìm kiếm văn bản để kích hoạt việc sử dụng biểu thức chính quy.
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;
// Áp dụng bộ hấp thụ cho tất cả các trang
pdfDocument.Pages.Accept(textFragmentAbsorber);
// Lấy các đoạn văn bản khớp với nhau
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;
// Xuất số lượng trận đấu đã tìm thấy
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");
// Lặp qua và hiển thị từng đoạn văn bản được tìm thấy
foreach (TextFragment fragment in textFragments)
{
Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}
Điều này đảm bảo chỉ các trường hợp độc lập của từ `car” được khớp.
Tìm kiếm với Biểu thức Chính quy trong PDF
Trong một số trường hợp, bạn cần tìm nhiều hơn một từ cụ thể—bạn muốn khớp các mẫu như ngày tháng, địa chỉ email hoặc số tham chiếu. Đó là lúc biểu thức chính quy (regex) phát huy tác dụng.
Aspose.PDF for .NET cho phép bạn sử dụng regex để tìm kiếm văn bản nâng cao trên bất kỳ phần nào của tài liệu PDF của bạn.
Ví dụ: Tìm tất cả các ngày trong một tệp PDF
Hãy nói rằng bạn muốn tìm tất cả các ngày theo định dạng dd/mm/yyyy
:
// Tải PDF và tìm kiếm văn bản
Document pdfDocument = new Document("sample.pdf");
// Bật regex trong tùy chọn tìm kiếm
TextSearchOptions searchOptions = new TextSearchOptions(true)
{
IsRegularExpressionUsed = true
};
// Tạo bộ hấp thụ với mẫu ngày
TextFragmentAbsorber absorber = new TextFragmentAbsorber(@"\d{2}/\d{2}/\d{4}", searchOptions);
// Áp dụng chất hấp thụ cho các trang
pdfDocument.Pages.Accept(absorber);
// Lặp và in các mẫu đã tìm thấy
foreach (TextFragment fragment in absorber.TextFragments)
{
Console.WriteLine($"Found date: {fragment.Text} on Page {fragment.Page.Number}");
}
Các mẫu hữu ích khác:
- Emails:
\b[A-Za-z0-9.%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b
- Phone Numbers:
\d{3}[-.\s]??\d{3}[-.\s]??\d{4}
- Invoice Numbers:
INV-\d+
Regex mở rộng khả năng tìm kiếm của bạn vượt xa văn bản tĩnh, giúp bạn trích xuất dữ liệu có cấu trúc từ các tài liệu không có cấu trúc.
Tìm kiếm và trích xuất văn bản với chi tiết vị trí
Đôi khi, việc tìm văn bản không đủ - bạn có thể cần biết nó xuất hiện chính xác ở đâu trong PDF. Aspose.PDF cho phép bạn trích xuất số trang, tọa độ và chi tiết định dạng của mọi kết quả trùng khớp.
Tính năng này đặc biệt hữu ích cho việc xây dựng chỉ mục, gán thẻ tài liệu hoặc tạo liên kết có thể nhấp.
Ví dụ: Lấy Vị Trí Của Mỗi Trận đấu
// Tải PDF và tìm kiếm văn bản
Document pdfDocument = new Document("sample.pdf");
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);
// Get matched fragments
TextFragmentCollection fragments = absorber.TextFragments;
// In danh sách vị trí và văn bản cho mỗi trận đấu.
foreach (TextFragment fragment in fragments)
{
Console.WriteLine($"Text: {fragment.Text}");
Console.WriteLine($"Page: {fragment.Page.Number}");
Console.WriteLine($"Position - X: {fragment.Position.XIndent}, Y: {fragment.Position.YIndent}");
Console.WriteLine($"Font: {fragment.TextState.Font.FontName}, Size: {fragment.TextState.FontSize}");
Console.WriteLine("------------");
}
Sample Output
Text: invoice
Page: 1
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Text: invoice
Page: 2
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Text: invoice
Page: 3
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Bạn ahora biết chính xác từ `invoice” xuất hiện ở đâu, cùng với cách nó được định dạng. Mức độ chi tiết này mở ra cánh cửa cho các xử lý tiên tiến, chẳng hạn như chú thích, tooltip hoặc đánh dấu động.
Làm nổi bật hoặc thay thế văn bản đã tìm thấy
Sau khi bạn đã xác định được văn bản cụ thể trong một tệp PDF, bạn có thể tiến thêm một bước nữa bằng cách đánh dấu nó hoặc thậm chí thay thế nó bằng nội dung mới. Aspose.PDF for .NET cho phép bạn định dạng hoặc sửa đổi văn bản đã khớp một cách dễ dàng bằng cách sử dụng đối tượng TextFragment
.
Tìm kiếm và Đánh dấu Văn bản trong PDF
Bạn có thể làm nổi bật văn bản bằng cách thay đổi màu nền và màu chữ của nó.
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);
foreach (TextFragment fragment in absorber.TextFragments)
{
// Highlight by changing text appearance
fragment.TextState.BackgroundColor = Color.Yellow;
fragment.TextState.ForegroundColor = Color.Red;
fragment.TextState.FontStyle = FontStyles.Bold;
}
Điều này hữu ích cho việc xem xét, chỉnh sửa hoặc tạo báo cáo có chú thích.
Tìm và Thay thế Văn bản
Cần chỉnh sửa hoặc cập nhật văn bản trong tài liệu? Chỉ cần thay thế trực tiếp:
foreach (TextFragment fragment in absorber.TextFragments)
{
fragment.Text = "REDACTED";
}
Bạn thậm chí có thể áp dụng định dạng mới trong khi thay thế:
fragment.TextState.FontSize = 12;
fragment.TextState.Font = FontRepository.FindFont("Arial");
fragment.TextState.ForegroundColor = Color.Black;
Việc làm nổi bật và thay thế văn bản theo chương trình cho phép bạn tự động hóa nhiều nhiệm vụ xử lý tài liệu, như dọn dẹp các mẫu, cập nhật nội dung lỗi thời hoặc kiểm duyệt dữ liệu cá nhân.
Tìm kiếm trên tất cả các trang hoặc trang cụ thể
Theo mặc định, Aspose.PDF tìm kiếm trên tất cả các trang trong một tệp PDF. Nhưng đôi khi, bạn có thể muốn giới hạn việc tìm kiếm ở một trang cụ thể hoặc một khoảng trang—đặc biệt là khi làm việc với các tệp lớn hoặc khi nội dung có thể dự đoán được.
Aspose.PDF giúp dễ dàng thực hiện cả hai điều này.
Tìm kiếm trên Tất cả các Trang (Mặc định)
Nếu bạn không chỉ định một trang, bộ hấp thụ sẽ tự động tìm kiếm trên mọi trang.
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber); // Searches all pages
Tìm kiếm trên một Trang Cụ thể
Bạn cũng có thể tìm kiếm một trang đơn lẻ bằng cách nhắm trực tiếp vào nó:
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
// Search only on page 2
pdfDocument.Pages[2].Accept(absorber);
Tìm kiếm trên một khoảng trang
Để tìm kiếm một khoảng tùy chỉnh (ví dụ, trang 2 đến 4), chỉ cần lặp qua khoảng đó:
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
// Loop through selected pages
for (int i = 2; i <= 4; i++)
{
pdfDocument.Pages[i].Accept(absorber);
}
Cách tiếp cận này mang lại cho bạn quyền kiểm soát hoàn toàn về hiệu suất và độ chính xác, đặc biệt hữu ích cho các tài liệu đã quét hoặc được chia thành phần.
Trường hợp sử dụng nâng cao: Tìm kiếm và sửa đổi thông tin nhạy cảm
Trong các tài liệu pháp lý, nhân sự hoặc tài chính, việc ẩn nội dung nhạy cảm—như tên, ID hoặc số tài khoản—trước khi chia sẻ là điều phổ biến. Aspose.PDF for .NET làm điều này đơn giản bằng cách kết hợp tính năng tìm kiếm với tính năng chỉnh sửa.
Bạn có thể tìm kiếm các thuật ngữ và sau đó áp dụng một lớp phủ màu đen bằng cách sử dụng RedactionAnnotation
.
// Tải PDF và tìm kiếm văn bản
Document pdfDocument = new Document("sample.pdf");
// Tìm kiếm tên "John Doe"
TextFragmentAbsorber absorber = new TextFragmentAbsorber("John Doe");
pdfDocument.Pages.Accept(absorber);
// Lặp qua các mảnh đã tìm thấy và xóa bỏ.
foreach (TextFragment fragment in absorber.TextFragments)
{
// Lấy vị trí và kích thước
Aspose.Pdf.Rectangle rect = new Aspose.Pdf.Rectangle(
fragment.Position.XIndent,
fragment.Position.YIndent,
fragment.Position.XIndent + fragment.Rectangle.Width,
fragment.Position.YIndent + fragment.Rectangle.Height
);
// Tạo một chú thích xóa bỏ
RedactionAnnotation redaction = new RedactionAnnotation(fragment.Page, rect)
{
FillColor = Color.Black,
Color = Color.Black
};
// Thêm và áp dụng việc chỉnh sửa nội dung
fragment.Page.Annotations.Add(redaction);
redaction.Redact();
}
// Lưu tài liệu đã được chỉnh sửa.
pdfDocument.Save("SearchAndRedact.pdf");
What Happens
- Văn bản mục tiêu ("John Doe") được tìm thấy và được che bằng một hộp màu đen.
- Điều này không chỉ là hình ảnh—nó loại bỏ nội dung khỏi lớp PDF, khiến nó không thể phục hồi từ tệp.
Nhận Giấy phép Miễn phí
Bây giờ bạn đã học cách tìm kiếm, trích xuất, làm nổi bật và xóa văn bản trong các tài liệu PDF bằng cách sử dụng Aspose.PDF for .NET, đã đến lúc đưa những kiến thức đó vào hành động.
Hãy thử tự mình: Tải về một giấy phép tạm thời miễn phí và bắt đầu xây dựng các công cụ PDF thông minh của riêng bạn.
Tìm kiếm trong PDF: Tài nguyên miễn phí
Muốn vượt xa việc chỉ tìm kiếm văn bản trong các tệp PDF? Khám phá toàn bộ khả năng của Aspose.PDF for .NET với những tài nguyên miễn phí, thân thiện với nhà phát triển này:
Hướng dẫn cho nhà phát triển Học cách tạo, sửa đổi, chuyển đổi và bảo mật các tệp PDF bằng cách lập trình. Aspose.PDF for .NET Documentation
Công Cụ Trực Tuyến Miễn Phí Chuyển đổi, hợp nhất, tách và chỉnh sửa các tệp PDF trực tiếp trong trình duyệt của bạn. Aspose Free PDF Tools
Tài liệu tham khảo API Tìm hiểu thêm về các lớp, thuộc tính và phương thức có sẵn trong Aspose.PDF for .NET để tăng tốc phát triển của bạn. Aspose.PDF API Reference
Diễn đàn hỗ trợ Hãy đặt câu hỏi, báo cáo vấn đề và nhận câu trả lời trực tiếp từ các chuyên gia của Aspose. Aspose Support Forum
Những tài nguyên này miễn phí và có sẵn để giúp bạn tận dụng tối đa hành trình phát triển PDF của mình.
Kết luận
Tìm kiếm văn bản trong các tệp PDF là một tính năng quan trọng cho nhiều ứng dụng dựa trên tài liệu—dù bạn đang trích xuất dữ liệu, kiểm toán nội dung, hoặc chuẩn bị tệp cho việc chỉnh sửa. Với Aspose.PDF for .NET, bạn có thể dễ dàng thực hiện tìm kiếm theo từ khóa, sử dụng biểu thức chính quy, làm nổi bật kết quả, và thậm chí xóa thông tin nhạy cảm một cách chính xác và kiểm soát. Aspose.PDF cung cấp một API thân thiện với nhà phát triển giúp đơn giản hóa các thao tác PDF phức tạp—tiết kiệm thời gian cho bạn trong khi cho phép tự động hóa mạnh mẽ.
Nếu bạn có bất kỳ câu hỏi nào hoặc cần thêm sự hỗ trợ, xin vui lòng liên hệ với chúng tôi tại diễn đàn hỗ trợ miễn phí.