חלץ טקסט PDF csharp

פורמט PDF משמש כעת בכל מקום להפקת סוגים שונים של מסמכים כגון חשבוניות, דוחות עסקיים וכו’. בזמן עיבוד קבצי PDF באופן תוכנתי, ייתכן שיהיה עליך לחלץ טקסט מ-PDF. עבור מקרים כאלה, מאמר זה מדגים פתרון פשוט, רב עוצמה ובמהירות גבוהה לחילוץ טקסט PDF. אז בואו נלמד כיצד לחלץ טקסט מקבצי PDF ב-C#.

להלן רשימה של תכונות בהן נדון בבלוג זה:

ספריית חילוץ טקסט C# PDF

כדי לחלץ טקסט מקובצי PDF, נשתמש ב-Aspose.PDF עבור NET. זוהי ספריה רבת עוצמה ועשירה בתכונות ליצירה ועיבוד של קבצי PDF. אתה יכול בקלות להשתמש בספרייה זו למשימות מניפולציה של PDF. כמו כן, זה מאפשר לך לחלץ טקסט מקובצי PDF חינם לחלוטין. אתה יכול להוריד ה-DLL שלו או להתקין אותו באמצעות NuGet.

PM> Install-Package Aspose.PDF 

כיצד לחלץ טקסט מקובץ PDF ב-C#

קריאת תוכן טקסט ממסמך PDF היא תכונה בשימוש תכוף. אתה יכול לחלץ את כל הטקסט מכל עמודי המסמך במכה אחת. להלן השלבים לחילוץ טקסט מקובץ PDF ב-C#.

  1. טען מסמך PDF
  2. צור אובייקט TextAbsorber
  3. קבל את הסופג עבור כל הדפים
  4. כתוב טקסט שחולץ לקובץ ושמור אותו

קטע הקוד שלהלן מבצע את השלבים הבאים ומראה כיצד לחלץ טקסט ממסמך PDF שלם ב-C#.

// פתח מסמך PDF
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// צור אובייקט TextAbsorber כדי לחלץ טקסט
TextAbsorber textAbsorber = new TextAbsorber();
// קבל את הסופג עבור כל הדפים
pdfDocument.Pages.Accept(textAbsorber);
// קבל את הטקסט שחולץ
string extractedText = textAbsorber.Text;
// צור כותב ופתח את הקובץ
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// כתוב שורת טקסט לקובץ
tw.WriteLine(extractedText);
// סגור את הזרם
tw.Close();

C#: חפש וחלץ טקסט מדף מסוים ב-PDF

לאחר בחינת חילוץ הטקסט ברמת המסמך, הרשו לנו לחלץ טקסט מעמוד ספציפי של מסמך PDF. כל שעליך לעשות הוא לבצע את השלבים הבאים כדי לבצע חילוץ טקסט עבור דף PDF מסוים.

  1. טען מסמך PDF
  2. צור אובייקט TextAbsorber
  3. קבל את הסופג עבור דף ספציפי
  4. כתוב טקסט שחולץ לקובץ ושמור אותו

קטע הקוד הבא קורא ומחלץ טקסט מדף בקובץ PDF באמצעות C#:

// פתח מסמך PDF
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// גישה לעמוד נדרש במסמך PDF
Page page = pdfDocument.Pages[1];
// צור אובייקט TextAbsorber כדי לחלץ טקסט
TextAbsorber textAbsorber = new TextAbsorber();
// קבל את הסופג עבור הדף שצוין
page.Accept(textAbsorber);
// קבל את הטקסט שחולץ
string extractedText = textAbsorber.Text;
// צור כותב ופתח את הקובץ
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// כתוב שורת טקסט לקובץ
tw.WriteLine(extractedText);
// סגור את הזרם
tw.Close();

חלץ טקסט מאזור ספציפי של דף PDF

הבה ניקח את חילוץ הטקסט הזה צעד נוסף קדימה. שקול למצוא טקסט מאזור מסוים בדף. חשוב להבין כאן שיחידת המדידה הבסיסית ב-Aspose.PDF היא נקודה, שבה 72 נקודות שוות ל-1 אינץ’. יתר על כן, הפינה השמאלית התחתונה נחשבת למקור (0,0) של הדף.

להלן השלבים לחילוץ טקסט מאזור או מקטע ספציפי של דף ב-PDF.

  1. טען מסמך PDF מקור
  2. צור אובייקט TextAbsorber
  3. הגדר TextSearchOptions וציין קואורדינטות מלבניות
  4. קבל את הסופג עבור דף ספציפי
  5. כתוב טקסט שחולץ לקובץ

קטע הקוד שלהלן מדגים כיצד לחלץ טקסט מאזור ספציפי של דף ב-C#.

// פתח את המסמך
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// צור אובייקט TextAbsorber כדי לחלץ טקסט
TextAbsorber absorber = new TextAbsorber();
absorber.TextSearchOptions.LimitToPageBounds = true;
absorber.TextSearchOptions.Rectangle = new Aspose.Pdf.Rectangle(100, 200, 250, 350);
// קבלו את הסופג לעמוד הראשון
pdfDocument.Pages[1].Accept(absorber);
// קבל את הטקסט שחולץ
string extractedText = absorber.Text;
// צור כותב ופתח את הקובץ
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// כתוב שורת טקסט לקובץ
tw.WriteLine(extractedText);
// סגור את הזרם
tw.Close();

C# חלץ טקסט מ-PDF עם ביטויים רגילים

ניתן גם לחלץ טקסט ממסמך PDF התואם דפוס כלשהו. לדוגמה, אולי תרצה לחלץ כמה מילים או מספרים ספציפיים. לשם כך, תצטרך לעצב ביטוי רגולרי. הספרייה תשתמש ב-Regex זה כדי למצוא טקסט תואם במסמך ה-PDF.

להלן השלבים לחיפוש ולחילוץ טקסט ספציפי מקובצי PDF באמצעות ביטוי רגיל.

  • טען מסמך PDF לקלט
  • צור אובייקט TextAbsorber
  • עצב והגדר ביטוי רגולרי שיתאים לטקסט כלשהו
  • עברו בלולאה בכל קטע טקסט שחולץ

קטע הקוד הבא של C# משתמש בביטוי רגולרי שמחפש את הטקסט המכיל 4 ספרות, למשל, 1999,2000 וכו’ בכל דפי המסמך.

// לפתוח מסמך
Document pdfDocument = new Document(dataDir + @"Test.pdf");
// צור אובייקט TextAbsorber כדי למצוא את כל המופעים של ביטוי חיפוש הקלט
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;
// קבל את הסופג עבור כל הדפים
pdfDocument.Pages.Accept(textFragmentAbsorber);
// קבל את קטעי הטקסט שחולצו
TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;     
// לולאה דרך השברים
foreach (TextFragment textFragment in textFragmentCollection)
{
    Console.WriteLine(textFragment.Text);
}

חלץ טקסט מטבלת PDF ב-C#

עבדנו עם ClassAbsorber בדוגמאות קודמות, אבל חילוץ טקסט מטבלה הוא קצת שונה. לכן, עליך לבצע את השלבים הבאים כדי לחלץ טקסט מטבלה ב-PDF:

  1. טען את קובץ ה-PDF המקור
  2. צור אובייקט במחלקה TableAbsorber
  3. חזור דרך טבלה נספגת
  4. עברו בלולאה בכל תא בכל שורה של טבלה

קטע הקוד שלהלן מחלץ את הטקסט מתאי טבלה ב-PDF באמצעות 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);
            }
        }
    }
}

חלץ טקסט מודגש מקובץ PDF ב-C#

טקסט מודגש קיים כהערה בקובצי PDF. הם מכילים טקסט מסומן מה שמבדיל אותם מהטקסט המקובל במסמך. השלבים הבאים מתארים כיצד לחלץ את הטקסט המודגש באמצעות C#:

  1. טען מסמך מקור
  2. עברו בלולאה בין כל ההערות
  3. מסנן TextMarkupAnnotation
  4. אחזר קטעי טקסט מודגשים

להלן קטע קוד המבוסס על השלבים שלמעלה, ניתן להשתמש בו כדי לקבל טקסט הדגשה מקובצי PDF ב-C#.

Document doc = new Document(dataDir + "ExtractHighlightedText.pdf");
// עברו בלולאה בין כל ההערות
foreach (Annotation annotation in doc.Pages[1].Annotations)
{
    // סינון TextMarkupAnnotation
    if (annotation is TextMarkupAnnotation)
    {
        TextMarkupAnnotation highlightedAnnotation = annotation as TextMarkupAnnotation;
        // אחזר קטעי טקסט מודגשים
        TextFragmentCollection collection = highlightedAnnotation.GetMarkedTextFragments();
        foreach (TextFragment tf in collection)
        {
            // הצג טקסט מודגש
            Console.WriteLine(tf.Text);
        }
    }
}

חילוץ טקסט C# PDF עם צריכת זיכרון נמוכה

להלן שתי גישות שונות לייעול צריכת זיכרון תוך חילוץ טקסט ממסמכי PDF באמצעות שפת C#.

i) שימוש בשיטת Reset() ובשיטת FreeMemory().

לפעמים חילוץ טקסט עשוי לצרוך זיכרון ומעבד עצומים. אולי כאשר קובץ הקלט ענק ומכיל הרבה טקסט. הסיבה לכך היא שהאובייקט TextFragmentAbsorber מאחסן את כל קטעי הטקסט שנמצאו בזיכרון.

לכן, הפתרון שאנו ממליצים כאן הוא לקרוא לשיטת absorber.Reset() לאחר עיבוד כל עמוד. יתרה מכך, אם אתה מבצע פעולות קריאה בלבד אז אתה יכול לשחרר את הזיכרון המוחזק על ידי אובייקטי עמוד עם שיטת page.FreeMemory().

להלן השלבים למזעור צריכת זיכרון בחילוץ טקסט PDF ב-C#.

  1. טען מסמך PDF מקור
  2. ציין TextEditOptions
  3. קרא את TextFragment
  4. קרא לשיטת Reset()
  5. התקשר לשיטת FreeMemory()

קטע הקוד הבא מדגים כיצד להוריד את צריכת הזיכרון בחילוץ טקסט מ-PDF ב-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);
    //קרא משהו מתוך שברים
    count += absorber.TextFragments.Count;
    absorber.Reset();
    page.FreeMemory();
    //GC.Collect();        
}

ii) שימוש בספירת חיסכון בזיכרון

Aspose.PDF עבור .NET API תומך בהגדרת מצב חיסכון בזיכרון בזמן קריאת טקסט מקובץ PDF. ספירת TextExtractionOptions.TextFormattingMode משרתת את המטרה של צריכה מיטבית של משאבים. השלבים הבאים מסכמים את השלבים שעליך לבצע עבור גישה זו:

  1. טען קובץ PDF מקור
  2. צור אובייקט TextDevice
  3. הגדר TextExtractionOptions
  4. חלץ טקסט וכתוב טקסט לקובץ

להלן קטע הקוד מדגים את גישת חיסכון בזיכרון באמצעות C#:

// פתח את המסמך
Document pdfDocument = new Document(dataDir + "Test.pdf");
System.Text.StringBuilder builder = new System.Text.StringBuilder();
// מחרוזת להחזיק טקסט שחולץ
string extractedText = "";
foreach (Page pdfPage in pdfDocument.Pages)
{
    using (MemoryStream textStream = new MemoryStream())
    {
        // צור התקן טקסט
        TextDevice textDevice = new TextDevice();

        // הגדר אפשרויות חילוץ טקסט - הגדר מצב חילוץ טקסט (גולמי או טהור)
        TextExtractionOptions textExtOptions = new
        TextExtractionOptions(TextExtractionOptions.TextFormattingMode.MemorySaving);
        textDevice.ExtractionOptions = textExtOptions;
        // המר עמוד מסוים ושמור טקסט בזרם
        textDevice.Process(pdfPage, textStream);
        // המר עמוד מסוים ושמור טקסט בזרם
        textDevice.Process(pdfDocument.Pages[1], textStream);
        // סגור את זרם הזיכרון
        textStream.Close();
        // קבל טקסט מזרם הזיכרון
        extractedText = Encoding.Unicode.GetString(textStream.ToArray());
    }
    builder.Append(extractedText);
}
dataDir = dataDir + "Memory_Text_Extracted.txt";
// שמור את הטקסט שחולץ בקובץ טקסט
File.WriteAllText(dataDir, builder.ToString());

ספריית חילוץ טקסט C# PDF בחינם

אתה יכול לקבל רישיון זמני בחינם ולחלץ טקסט מקובצי PDF ללא כל הגבלה.

חקור את ספריית C# PDF

אתה יכול ללמוד עוד על ספריית C# PDF באמצעות תיעוד. בכל מקרה של בירור, אנא צור איתנו קשר בפורומי תמיכה בחינם.

סיכום

במאמר זה, למדת כיצד לחלץ טקסט מקובצי PDF ב-C#. בעזרת דוגמאות קוד, ראית איך לחלץ טקסט מ-PDF, עמוד ב-PDf, לחלץ טקסט מודגש ועוד הרבה יותר. אתה יכול לשלב בקלות את דוגמאות הקוד שסופקו ואת ספריית C# PDF ביישומי NET שלך.

ראה גם