PDF'de C# kullanarak arama yapın

Belirli metni PDF belgelerinde aramak, belge yönetim sistemlerinde, hukuki inceleme araçlarında, fatura işleme sistemlerinde ve diğer kurumsal uygulamalarda yaygın bir görevdir. Bir anahtar kelimeyi bulmaya, belirli değerleri çıkarmaya veya hassas bilgileri gizlemeye çalışıyor olun, PDF aramasını otomatikleştirmek birçok zaman ve çaba kazandırabilir.

Bu blog yazısında, C# kullanarak PDF dosyalarında metin aramayı programatik olarak nasıl yapacağınızı öğreneceksiniz. Anahtar özellikleri pratik C# kod örnekleriyle adım adım anlatacağız.

Bu makale aşağıdaki konuları kapsamaktadır:

C# Kütüphanesi ile PDF Belgelerinde Arama Yapma

Aspose.PDF for .NET , C# kullanarak PDF dosyalarında metin arama sürecini basitleştirir. Kesin kelimeleri bulmanıza, düzenli ifadeleri kullanarak desenleri eşleştirmenize ve hatta eşleşen metni vurgulamanıza veya değiştirmenize olanak tanır—hepsi sadece birkaç satır kod ile. Bu güçlü kütüphane, PDF belgelerini manipüle etmek için sağlam özellikler sunar. Geliştiricilerin arama işlevlerini kolayca uygulamalarına olanak tanır. Aspose.PDF ile bir PDF’de kelimeleri hızlıca bulabilirsiniz, bu da onu yazılım geliştiricileri için paha biçilmez bir araç haline getirir.

PDF metninde arama yapmadan önce, geliştirme ortamınızı ayarlamanız gerekiyor. Aspose.PDF for .NET ile başlamanız için şu adımları izleyin:

1. Aspose.PDF’i .NET için kurun.

Bunu releases adresinden indirin veya NuGet üzerinden yükleyin. .NET projenizi Visual Studio’da açın ve NuGet Paket Yöneticisi Konsolu’nda aşağıdaki komutu çalıştırın:

PM> Install-Package Aspose.PDF

Bu komut, projenize Aspose.PDF kütüphanesini ekler, böylece güçlü PDF işleme özelliklerine erişebilirsiniz.

2. Gerekli Ad Alanlarını İçe Aktarın

C# dosyanızın en üstüne bu using direktiflerini ekleyin:

using Aspose.Pdf;
using Aspose.Pdf.Text;

Artık Aspose.PDF API`sini kullanarak PDF dosyalarınızın içindeki metni aramaya başlamaya hazırsınız.

PDF’de Metin Arama C# Kullanarak

Aspose.PDF for .NET ile, bir PDF’de belirli kelimeleri veya ifadeleri kolayca arayabilir, tüm örneklerini bulabilir ve bunları vurgulamak veya ayrıntılarını çıkarmak gibi işlemler gerçekleştirebilirsiniz.

Aşağıdaki adımları izleyerek temel bir metin araması gerçekleştirin:

  1. Hedef PDF dosyasını Document sınıfını kullanarak yükleyin.
  2. Bir TextFragmentAbsorber oluşturun ve arama anahtar kelimesini tanımlayın.
  3. Tüketiciyi tüm sayfalarda Accept() yöntemiyle çalıştırın.
  4. Tüm eşleşen metin parçalarını al.
  5. Eşleşme sayısını yazdır.
  6. Her eşleşmeyi ve sayfa numarasını döngü ile gösterin.

Aşağıdaki kod örneği bu adımları uygular.

// PDF dosyasını yükleyin
Document pdfDocument = new Document("sample.pdf");

// Metin emici oluşturma arama anahtar kelimesi ile
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("invoice");

// Tümü sayfalara emici uygulayın.
pdfDocument.Pages.Accept(textFragmentAbsorber);

// Eşleşen metin parçalarını al
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;

// Anahtar kelimenin kaç kez bulunduğunu yazdır.
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");

// Döngü oluşturarak bulunan her metni yazdır.
foreach (TextFragment fragment in textFragments)
{
    Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}

Çıktı Örneği

Found 3 instance(s) of the keyword.
Text: invoice | Page: 1
Text: invoice | Page: 2
Text: invoice | Page: 3

Bu örnek, PDF içindeki tüm sayfalarda çalışan basit bir anahtar kelime aramasını göstermektedir. Eşleşen metni ve sayfa numarasını göreceksiniz.

PDF Aramaında Kullanılan Ana Sınıfları Anlamak

Kodda neler olup bittiğini daha iyi anlamak için, işin içinde olan ana sınıfların ve yöntemlerin hızlı bir şekilde özetlenmesi:

  • Document: Tüm PDF dosyasını temsil eder. Sayfalara, içeriğe ve yapıya erişim sağlar.
  • TextFragmentAbsorber: PDF içinde verilen bir dize veya deseni bulur. Ayrıca büyük/küçük harf duyarsız veya regex tabanlı arama gibi özellikleri de etkinleştirebilirsiniz.
  • Accept(): Her sayfaya emiciyi uygular. Belgeyi tarar ve eşleşen parçaları toplar.
  • TextFragments: Absorber tarafından döndürülen eşleşen metin parçalarının bir koleksiyonu.
  • TextFragment: Her bireysel eşleşme, içerik, konum ve sayfa numarası gibi detaylarla birlikte.

C# kullanarak büyük/küçük harf duyarsız ve tam kelime arama

PDF içeriğini aradığınızda, sistemin eşleşmeleri nasıl bulduğunu kontrol etmeniz gerekir; bu, doğru sonuçlar sağlamak içindir. Bazen, harf büyük/küçüklüğünü göz ardı etmek istersiniz ("Fatura" ile "fatura" arasında) veya yalnızca tam kelimeleri eşleştirmek istersiniz—diğer kelimelerin içinde kısmi eşleşmeler değil.

Aspose.PDF for .NET size her ikisini yapacak araçları sunar.

Büyük küçük harf duyarsız arama

Varsayılan olarak, aramalar büyük/küçük harf duyarlıdır. Harf büyük/küçük durumunu göz ardı etmek için, IgnoreCase etkinleştirilmiş TextSearchOptions kullanın:

// PDF dosyasını yükleyin
Document pdfDocument = new Document("sample.pdf");

// Büyük-küçük harf duyarsız bir düzenli ifade ile bir metin emici oluşturun.
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("(?i)INVOICE");

// Metin arama seçeneklerini düzenli ifade kullanımını etkinleştirecek şekilde ayarlayın.
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;

// Tüm sayfalara emici uygulayın
pdfDocument.Pages.Accept(textFragmentAbsorber);

// Eşleşen metin parçalarını alınız.
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;

// Eşleşme sayısını verin
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");

// Her bulunan metin parçasını döngüye al ve göster.
foreach (TextFragment fragment in textFragments)
{
    Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}

Bu hem "Fatura", "fatura", "FATURA" ve diğer varyasyonları bulacaktır.

Bütün Kelimeleri Eşleştir

Kısmi eşleşmeleri de önleyebilirsiniz. Örneğin, car için arama yapmak care veya scar ile eşleşmemelidir.

// Load the PDF file
Document pdfDocument = new Document("sample.pdf");

// Bütün kelime eşleşmesi için bir düzenli ifade deseni ile bir metin emici oluşturun.
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(@"\bcar\b");

// Düzenli ifade kullanımını etkinleştirmek için metin arama seçeneklerini ayarlayın.
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;

// Tüm sayfalara absorbanı uygulayın.
pdfDocument.Pages.Accept(textFragmentAbsorber);

// Eşleşen metin parçalarını al.
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;

// Eşleşme sayısını çıktı olarak verin.
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");

// Her bulunan metin parçasını döngüyle geçirip göster.
foreach (TextFragment fragment in textFragments)
{
    Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}

Bu, yalnızca “araba” kelimesinin bağımsız örneklerinin eşleşmesini sağlar.

PDF’de Düzenli İfadeler ile Arama

Belirli durumlarda, belirli bir kelimeden daha fazlasını bulmanız gerekebilir; tarih, e-posta adresleri veya referans numaraları gibi desenleri eşleştirmek istersiniz. İşte burada düzenli ifadeler (regex) devreye girer.

Aspose.PDF for .NET, PDF belgenizin herhangi bir bölümünde gelişmiş metin arama için regex kullanmanıza olanak tanır.

Örnek: Bir PDF’deki Tüm Tarihleri Bulun

Aşağıdaki formatta dd/mm/yyyy tüm tarihleri bulmak istediğinizi varsayalım:

// PDF'yi yükle ve metni ara
Document pdfDocument = new Document("sample.pdf");

// Regex arama seçeneklerinde etkinleştirilen.
TextSearchOptions searchOptions = new TextSearchOptions(true)
{
    IsRegularExpressionUsed = true
};

// Tarih deseni ile absorban oluşturun.
TextFragmentAbsorber absorber = new TextFragmentAbsorber(@"\d{2}/\d{2}/\d{4}", searchOptions);

// Sayfalara emici uygulayın.
pdfDocument.Pages.Accept(absorber);

// Döngü oluştur ve bulunan desenleri yazdır.
foreach (TextFragment fragment in absorber.TextFragments)
{
    Console.WriteLine($"Found date: {fragment.Text} on Page {fragment.Page.Number}");
}

Diğer Kullanışlı Kalıplar:

  • 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, statik metnin ötesinde arama yeteneklerinizi genişleterek, yapılandırılmamış belgelerden yapılandırılmış verileri çıkarmanıza yardımcı olur.

Metin Arama ve Pozisyon Detayları ile Çıkartma

Bazen, metni bulmak yeterli olmayabilir; metnin PDF’de tam olarak nerede yer aldığını bilmeniz gerekebilir. Aspose.PDF, her eşleşmenin sayfa numarasını, koordinatlarını ve biçimlendirme ayrıntılarını çıkarmanıza olanak tanır.

Bu özellik, dizinler oluşturmak, belgeleri etiketlemek veya tıklanabilir bağlantılar oluşturmak için özellikle kullanışlıdır.

Örnek: Her Eşleşmenin Pozisyonunu Al

// PDF'yi yükleyin ve metin arayın
Document pdfDocument = new Document("sample.pdf");
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);

// Eşleşen parçaları al
TextFragmentCollection fragments = absorber.TextFragments;

// Her maç için pozisyon ve metni yazdır.
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
------------

Artık `fatura” kelimesinin nerede geçtiğini ve nasıl stilize edildiğini tam olarak biliyorsunuz. Bu detay seviyesi, notlar, araç ipuçları veya dinamik vurgular gibi ileri düzey işleme imkanı sunuyor.

Metin Vurgulama veya Değiştirme

Bir PDF’de belirli bir metni bulduğunuzda, onu vurgulayarak veya yeni içerikle değiştirme aşamasına geçebilirsiniz. Aspose.PDF for .NET, eşleşen metni TextFragment nesnesini kullanarak kolayca stilize etmenizi veya değiştirmenizi sağlar.

PDF’de Metni Ara ve Vurgula

Metnin arka planını ve yazı rengini değiştirerek görsel olarak vurgulayabilirsiniz.

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;
}

Bu, gözden geçirme, düzeltme veya notlu raporlar oluşturma için kullanışlıdır.

Metni Bul ve Değiştir

Belgedeki metni gizlemeye veya güncellemeye mi ihtiyacınız var? Doğrudan bunu değiştirebilirsiniz:

foreach (TextFragment fragment in absorber.TextFragments)
{
    fragment.Text = "REDACTED";
}

Yeni biçimlendirme uygularken bile değiştirme işlemi yapabilirsiniz:

fragment.TextState.FontSize = 12;
fragment.TextState.Font = FontRepository.FindFont("Arial");
fragment.TextState.ForegroundColor = Color.Black;

Metinleri programatik olarak vurgulamak ve değiştirmek, şablonları temizlemek, güncel olmayan içeriği güncellemek veya özel verileri sansürlemek gibi birçok belge işleme görevini otomatikleştirmenizi sağlar.

Tüm Sayfalar veya Belirli Sayfalar Arasında Ara

Varsayılan olarak, Aspose.PDF bir PDF’deki tüm sayfalarda arama yapar. Ancak bazen, özellikle büyük dosyalarla çalışırken veya içerik tahmin edilebilir olduğunda, aramayı belirli bir sayfa veya sayfa aralığıyla sınırlamak isteyebilirsiniz.

Aspose.PDF, her ikisini de yapmayı kolaylaştırır.

Tüm Sayfalarda Ara (Varsayılan)

Sayfa belirtmezseniz, emici otomatik olarak her sayfayı arar.

TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber); // Searches all pages

Belirli Bir Sayfada Ara

Bir sayfayı doğrudan hedefleyerek de arama yapabilirsiniz:

TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");

// Search only on page 2
pdfDocument.Pages[2].Accept(absorber);

Bir Dizi Sayfada Ara

Özel bir arama yapmak için (örn. sayfalar 2’den 4’e), sadece aralıkta döngü oluşturun:

TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");

// Loop through selected pages
for (int i = 2; i <= 4; i++)
{
    pdfDocument.Pages[i].Accept(absorber);
}

Bu yaklaşım, taranmış veya bölümlere ayrılmış belgeler için özellikle yararlı olan performans ve hassasiyet üzerinde tam kontrol sağlar.

Gelişmiş Kullanım Durumu: Hassas Bilgileri Arama ve Kırpma

Hukuki, İK veya finansal belgelerde, isimler, kimlikler veya hesap numaraları gibi hassas içeriği paylaşmadan önce gizlemek yaygındır. Aspose.PDF for .NET, arama ve gizleme özelliklerini birleştirerek bunu kolay hale getirir.

Terimleri arayabilir ve ardından RedactionAnnotation kullanarak siyah bir örtü uygulayabilirsiniz.

// PDF'yi yükleyin ve metin arayın.
Document pdfDocument = new Document("sample.pdf");

// "John Doe" ismi için arama yapın
TextFragmentAbsorber absorber = new TextFragmentAbsorber("John Doe");
pdfDocument.Pages.Accept(absorber);

// Kayıtlı parçalar arasında döngü oluştur ve sansürle
foreach (TextFragment fragment in absorber.TextFragments)
{
    // Konum ve boyutları al
    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
    );

    // Bir redaksiyon notu oluşturun.
    RedactionAnnotation redaction = new RedactionAnnotation(fragment.Page, rect)
    {
        FillColor = Color.Black,
        Color = Color.Black
    };

    // Add and apply redaction
    fragment.Page.Annotations.Add(redaction);
    redaction.Redact();
}
// Save the modified document
pdfDocument.Save("SearchAndRedact.pdf");

What Happens

  • Hedef metin ("John Doe") bulundu ve siyah bir kutuyla kaplandı.
  • Bu sadece görsel değil - PDF katmanından içeriği kaldırır, dosyadan geri alınamaz hale getirir.

Ücretsiz Lisans Alın

Artık Aspose.PDF for .NET kullanarak PDF’lerde metin aramayı, çıkarmayı, vurgulamayı ve sansürlemeyi öğrendiğinize göre, bu bilgiyi uygulamaya dökme zamanı.

Kendin dene: Ücretsiz geçici lisans indir ve kendi akıllı PDF araçlarını oluşturmaya başla.

PDF’de Ara: Ücretsiz Kaynaklar

PDF’lerde sadece metin aramakla mı kalmak istiyorsunuz? Bu ücretsiz, geliştirici dostu kaynaklarla Aspose.PDF for .NET’in tüm yeteneklerini keşfedin:

  • Geliştirici Rehberi PDF dosyalarını programlı olarak nasıl oluşturacağınızı, değiştireceğinizi, dönüştüreceğinizi ve güvence altına alacağınızı öğrenin. Aspose.PDF for .NET Belgelendirmesi

  • Ücretsiz Çevrimiçi Araçlar PDF dosyalarını doğrudan tarayıcınızda dönüştürün, birleştirin, ayırın ve düzenleyin. Aspose Ücretsiz PDF Araçları

  • API Referansı Aspose.PDF for .NET’te mevcut olan sınıflar, özellikler ve yöntemler hakkında daha fazla bilgi edinin, böylece geliştirme sürecinizi hızlandırın. Aspose.PDF API Reference

  • Destek Forumu Sorular sor, sorunları bildirin ve doğrudan Aspose uzmanlarından cevaplar al. Aspose Support Forum

Bu kaynaklar ücretsizdir ve PDF geliştirme yolculuğunuzdan en iyi şekilde yararlanmanıza yardımcı olmak için mevcuttur.

Sonuç

PDF dosyalarında metin arama, birçok belge tabanlı uygulama için hayati bir özelliktir—ister verileri çıkartıyor olun, ister içeriği denetliyor olun, ister dosyaları sansürlemeye hazırlıyor olun. Aspose.PDF for .NET ile anahtar kelime aramaları yapabilir, düzenli ifadeler kullanabilir, sonuçları vurgulayabilir ve hassas bilgileri tam olarak ve kontrol ile gizleyebilirsiniz. Aspose.PDF, karmaşık PDF işlemlerini basit hale getiren geliştirici dostu bir API sunar—size zaman kazandırırken güçlü otomasyonu sağlar.

Herhangi bir sorunuz varsa veya daha fazla yardıma ihtiyacınız varsa, lütfen free support forum adresinden bizimle iletişime geçmekte özgür olun.

Ayrıca Bakınız