Ekstrak Teks PDF csharp

Format file PDF populer karena konten file tidak dapat dimodifikasi dengan mudah, dibandingkan dengan format file pengolah kata lainnya. Namun, di C# Anda dapat mengekstrak teks dari dokumen PDF dengan Aspose.PDF for .NET API. Pada artikel ini, mari kita jelajahi beberapa kemungkinan untuk mencari dan mengekstrak teks dari file PDF menggunakan C#. Berikut adalah daftar fitur yang akan kami bahas di blog ini:

Ekstrak Teks dari Seluruh Dokumen PDF menggunakan C#

Membaca konten teks dari dokumen PDF adalah fitur yang sering digunakan. Menggunakan C#, Anda dapat mengekstrak semua teks dari semua halaman dokumen dengan mengikuti langkah-langkah di bawah ini:

  1. Muat dokumen PDF
  2. Buat objek TextAbsorber.
  3. Terima penyerap untuk semua halaman
  4. Tulis teks yang diekstraksi ke file dan simpan

Cuplikan kode di bawah mengikuti langkah-langkah ini dan menunjukkan cara mengekstrak teks dari seluruh dokumen PDF menggunakan C#:

// Buka dokumen PDF
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// Buat objek TextAbsorber untuk mengekstrak teks
TextAbsorber textAbsorber = new TextAbsorber();
// Terima penyerap untuk semua halaman
pdfDocument.Pages.Accept(textAbsorber);
// Dapatkan teks yang diekstraksi
string extractedText = textAbsorber.Text;
// Buat penulis dan buka file
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// Tulis satu baris teks ke file
tw.WriteLine(extractedText);
// Tutup alirannya
tw.Close();

Cari dan Ekstrak Teks dari Halaman Tertentu dalam PDF di C#

Setelah menjelajahi ekstraksi teks pada tingkat dokumen, mari kita mengekstrak teks dari halaman tertentu dari dokumen PDF. Cukup ikuti langkah-langkah di bawah ini untuk mencapai kebutuhan Anda:

  1. Muat dokumen PDF
  2. Buat objek TextAbsorber.
  3. Terima penyerap untuk halaman tertentu
  4. Tulis teks yang diekstraksi ke file dan simpan

Cuplikan kode berikut mengikuti langkah-langkah ini untuk membaca teks dari halaman mana pun dari file PDF menggunakan C#:

// Buka dokumen PDF
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// Akses halaman yang diperlukan dalam dokumen PDF
Page page = pdfDocument.Pages[1];
// Buat objek TextAbsorber untuk mengekstrak teks
TextAbsorber textAbsorber = new TextAbsorber();
// Terima penyerap untuk halaman yang ditentukan
page.Accept(textAbsorber);
// Dapatkan teks yang diekstrak
string extractedText = textAbsorber.Text;
// Buat penulis dan buka file
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// Tulis satu baris teks ke file
tw.WriteLine(extractedText);
// Tutup alirannya
tw.Close();

Cari dan Ekstrak Teks dari Wilayah Tertentu Halaman PDF di C

Mari kita ambil ekstraksi teks ini selangkah lebih maju. Pertimbangkan untuk menemukan beberapa teks dari area halaman tertentu. Penting untuk dipahami di sini bahwa satuan pengukuran dasar di Aspose.PDF for .NET adalah titik, di mana 72 titik sama dengan 1 inci. Selain itu, pojok kiri bawah dianggap sebagai asal (0,0) halaman. Berikut adalah langkah-langkah untuk membaca teks dari area atau bagian tertentu dari Halaman dalam dokumen PDF:

  1. Muat dokumen PDF sumber
  2. Buat objek TextAbsorber.
  3. Tetapkan TextSearchOptions dan tentukan koordinat persegi panjang
  4. Terima penyerap untuk halaman tertentu
  5. Tulis teks yang diekstraksi ke file

Cuplikan kode di bawah menunjukkan langkah-langkah ini untuk mengekstrak teks dari wilayah tertentu menggunakan C#:

// Buka dokumen
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// Buat objek TextAbsorber untuk mengekstrak teks
TextAbsorber absorber = new TextAbsorber();
absorber.TextSearchOptions.LimitToPageBounds = true;
absorber.TextSearchOptions.Rectangle = new Aspose.Pdf.Rectangle(100, 200, 250, 350);
// Terima penyerap untuk halaman pertama
pdfDocument.Pages[1].Accept(absorber);
// Dapatkan teks yang diekstrak
string extractedText = absorber.Text;
// Buat penulis dan buka file
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// Tulis satu baris teks ke file
tw.WriteLine(extractedText);
// Tutup alirannya
tw.Close();

Cari atau Ekstrak Teks Tertentu dari file PDF dengan Regular Expressions menggunakan C#

Anda dapat mengekstrak teks tertentu dari dokumen PDF yang cocok dengan beberapa pola. Misalnya, Anda mungkin ingin mengekstrak beberapa kata atau angka tertentu. Untuk tujuan ini, Anda perlu merancang ekspresi reguler. API akan menggunakan regex tersebut untuk menemukan teks yang cocok dalam dokumen PDF. Langkah-langkah di bawah ini adalah panduan untuk mencari dan mengekstrak teks tertentu dari file PDF:

  • Muat dokumen PDF masukan
  • Buat objek TextAbsorber.
  • Rancang dan atur ekspresi reguler agar cocok dengan beberapa teks
  • Ulangi setiap fragmen teks yang diekstrak

Cuplikan kode C# berikut menggunakan regex yang mencari teks yang berisi 4 digit, misalnya, 1999,2000, dll. di semua halaman dokumen.

// buka dokumen
Document pdfDocument = new Document(dataDir + @"Test.pdf");
// buat objek TextAbsorber untuk menemukan semua contoh frase pencarian masukan
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(@"\d{4}"); //like 1999-2020                                                                                                                // set text search option to specify regular expression usage
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;
// menerima penyerap untuk semua halaman
pdfDocument.Pages.Accept(textFragmentAbsorber);
// dapatkan fragmen teks yang diekstraksi
TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;     
// loop melalui fragmen
foreach (TextFragment textFragment in textFragmentCollection)
{
    Console.WriteLine(textFragment.Text);
}

Ekstrak Teks dari Sel Tabel dalam Dokumen PDF menggunakan C#

Mengekstrak teks dari Tabel pada halaman PDF sedikit berbeda. Kami telah bekerja dengan kelas TextAbsorber pada contoh sebelumnya, tetapi mengekstraksi teks dari Tabel sedikit berbeda. Oleh karena itu, Anda perlu mengikuti langkah-langkah di bawah ini untuk mengekstrak teks dari objek Tabel:

  1. Muat file PDF sumber
  2. Buat objek dari kelas TableAbsorber.
  3. Iterasi melalui AbsorbedTable
  4. Ulangi setiap sel di setiap baris Tabel

Cuplikan kode di bawah mengikuti langkah-langkah ini dan secara efisien mengekstrak teks dari sel Tabel dalam dokumen PDF menggunakan C#:

Document pdfDocument = new Document(dataDir + "Test.pdf");
TableAbsorber absorber = new TableAbsorber();
absorber.Visit(pdfDocument.Pages[1]);
foreach (AbsorbedTable table in absorber.TableList)
{
    foreach (AbsorbedRow row in table.RowList)
    {
        foreach (AbsorbedCell cell in row.CellList)
        {
            TextFragment textfragment = new TextFragment();
            TextFragmentCollection textFragmentCollection = cell.TextFragments;
            foreach (TextFragment fragment in textFragmentCollection)
            {
                Console.WriteLine(fragment.Text);
            }
        }
    }
}

Cari & Ekstrak Teks yang Disorot dari Dokumen PDF menggunakan C#

Teks yang disorot hadir sebagai Anotasi dalam file PDF. Mereka berisi Teks Bertanda yang membuatnya berbeda dari teks konvensional dalam sebuah dokumen. Langkah-langkah di bawah ini menjelaskan cara membaca teks yang disorot menggunakan C#:

  1. Muat dokumen sumber
  2. Ulangi semua anotasi
  3. Filter TextMarkupAnnotation
  4. Ambil fragmen teks yang disorot

Berikut ini adalah cuplikan kode berdasarkan langkah-langkah di atas, yang dapat digunakan untuk mendapatkan teks sorotan dari file PDF:

Document doc = new Document(dataDir + "ExtractHighlightedText.pdf");
// Ulangi semua anotasi
foreach (Annotation annotation in doc.Pages[1].Annotations)
{
    // Saring TextMarkupAnnotation
    if (annotation is TextMarkupAnnotation)
    {
        TextMarkupAnnotation highlightedAnnotation = annotation as TextMarkupAnnotation;
        // Ambil fragmen teks yang disorot
        TextFragmentCollection collection = highlightedAnnotation.GetMarkedTextFragments();
        foreach (TextFragment tf in collection)
        {
            // Tampilkan teks yang disorot
            Console.WriteLine(tf.Text);
        }
    }
}

Ekstrak Teks PDF dengan Konsumsi Memori Rendah menggunakan C#

Berikut ini adalah dua pendekatan berbeda untuk mengoptimalkan konsumsi memori sambil mengekstraksi teks dari dokumen PDF menggunakan bahasa C#.

i) Menggunakan Metode Reset() dan FreeMemory()

Terkadang ekstraksi teks dapat menghabiskan banyak memori dan prosesor. Mungkin saat file input berukuran besar dan berisi banyak teks. Karena objek TextFragmentAbsorber menyimpan semua fragmen teks yang ditemukan di dalam memori.

Oleh karena itu, solusi yang kami sarankan di sini adalah memanggil metode absorber.Reset() setelah memproses setiap halaman. Selain itu, jika Anda hanya melakukan operasi baca, Anda juga dapat membebaskan memori yang dipegang oleh objek halaman, dengan metode page.FreeMemory() . Jadi, Anda perlu mengikuti langkah-langkah di bawah ini untuk memanfaatkan sumber daya minimal:

  1. Muat dokumen PDF sumber
  2. Tentukan TextEditOptions
  3. Baca Fragmen Teks
  4. Panggil metode Reset().
  5. Panggil metode FreeMemory().

Cuplikan kode berikut menunjukkan ekstraksi teks dari dokumen PDF menggunakan C#:

Document pdfDocument = new Document(dataDir + @"ITF-TTF Manual.pdf");
TextFragmentAbsorber absorber = new TextFragmentAbsorber(new TextEditOptions(TextEditOptions.FontReplace.RemoveUnusedFonts));
foreach (Page page in pdfDocument.Pages)
{
    page.Accept(absorber);
    //Baca sesuatu dari fragmen
    count += absorber.TextFragments.Count;
    absorber.Reset();
    page.FreeMemory();
    //GC.Kumpulkan();        
}

Kami telah menguji cuplikan kode ini dengan file sampel besar yang berisi 450 halaman, 24500 fragmen teks, dan banyak gambar raster dan vektor. Proses tersebut menghabiskan hanya 500MB memori. Tip lain di sini adalah Anda dapat mengisi daya pengumpul sampah .NET untuk mengurangi konsumsi memori maksimum menjadi sekitar 250MB dengan biaya tambahan waktu pemrosesan 10 detik.

ii) Menggunakan pencacahan MemorySaving

Aspose.PDF for .NET API mendukung konfigurasi mode hemat memori saat membaca teks dari file PDF. Pencacahan TextExtractionOptions.TextFormattingMode melayani tujuan konsumsi sumber daya yang optimal. Langkah-langkah berikut meringkas langkah-langkah yang perlu Anda ikuti untuk pendekatan ini:

  1. Muat file PDF sumber
  2. Buat objek TextDevice.
  3. Tetapkan TextExtractionOptions
  4. Ekstrak teks dan tulis teks ke file

Cuplikan kode di bawah ini menunjukkan pendekatan penghematan memori menggunakan C#:

// Buka dokumen
Document pdfDocument = new Document(dataDir + "Test.pdf");
System.Text.StringBuilder builder = new System.Text.StringBuilder();
// String untuk menahan teks yang diekstrak
string extractedText = "";
foreach (Page pdfPage in pdfDocument.Pages)
{
    using (MemoryStream textStream = new MemoryStream())
    {
        // Buat perangkat teks
        TextDevice textDevice = new TextDevice();

        // Setel opsi ekstraksi teks - setel mode ekstraksi teks (Raw atau Pure)
        TextExtractionOptions textExtOptions = new
        TextExtractionOptions(TextExtractionOptions.TextFormattingMode.MemorySaving);
        textDevice.ExtractionOptions = textExtOptions;
        // Konversi halaman tertentu dan simpan teks ke aliran
        textDevice.Process(pdfPage, textStream);
        // Konversi halaman tertentu dan simpan teks ke aliran
        textDevice.Process(pdfDocument.Pages[1], textStream);
        // Tutup aliran memori
        textStream.Close();
        // Dapatkan teks dari aliran memori
        extractedText = Encoding.Unicode.GetString(textStream.ToArray());
    }
    builder.Append(extractedText);
}
dataDir = dataDir + "Memory_Text_Extracted.txt";
// Simpan teks yang diekstraksi dalam file teks
File.WriteAllText(dataDir, builder.ToString());

Kesimpulan

Kami telah menjelajahi beberapa dari banyak kasus penggunaan yang berguna dalam artikel ini, ada kemungkinan tak terbatas untuk mengekstraksi teks dari dokumen PDF menggunakan C# dengan Aspose.PDF for .NET API. Anda dapat mempelajari lebih lanjut melalui dokumentasi API. Jika ada pertanyaan, silakan hubungi kami di Forum Dukungan Gratis.

Lihat juga