Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
استخراج النص من مستند PDF هو متطلب شائع. في هذا المثال، سترى كيف يسمح Aspose.PDF for .NET باستخراج النص من جميع صفحات مستند PDF. تحتاج إلى إنشاء كائن من فئة TextAbsorber. بعد ذلك، افتح PDF باستخدام فئة Document واستدعِ طريقة Accept لمجموعة Pages. تقوم فئة TextAbsorber بامتصاص النص من المستند وتعيده في خاصية Text. يوضح مقتطف التعليمات البرمجية التالي كيفية استخراج النص من جميع صفحات مستند PDF.
يعمل مقتطف التعليمات البرمجية التالي أيضًا مع مكتبة Aspose.PDF.Drawing.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractTextFromDocument()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_Text();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "ExtractTextAll.pdf"))
{
// Create TextAbsorber object to extract text
var textAbsorber = new Aspose.Pdf.Text.TextAbsorber();
// Accept the absorber for all the pages
document.Pages.Accept(textAbsorber);
// Get the extracted text
string extractedText = textAbsorber.Text;
// Create a writer and open the file
using (TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt"))
{
// Write a line of text to the file
tw.WriteLine(extractedText);
}
}
}
استدعِ طريقة Accept على صفحة معينة من كائن Document. الفهرس هو رقم الصفحة المحددة التي يحتاج النص إلى استخراجها.
يعمل مقتطف التعليمات البرمجية التالي أيضًا مع مكتبة Aspose.PDF.Drawing.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractTextFromPage()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_Text();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "ExtractTextPage.pdf"))
{
// Create TextAbsorber object to extract text
var textAbsorber = new Aspose.Pdf.Text.TextAbsorber();
// Accept the absorber for a particular page
document.Pages[1].Accept(textAbsorber);
// Get the extracted text
string extractedText = textAbsorber.Text;
// Create a writer and open the file
using (TextWriter tw = new StreamWriter(dataDir + "extracted-text_out.txt"))
{
// Write a line of text to the file
tw.WriteLine(extractedText);
}
}
}
يمكنك استخدام فئة TextDevice لاستخراج النص من ملف PDF. تستخدم TextDevice فئة TextAbsorber في تنفيذها، وبالتالي، في الواقع، يقومان بنفس الشيء ولكن تم تنفيذ TextDevice لتوحيد نهج “الجهاز” لاستخراج أي شيء من الصفحة مثل ImageDevice وPageDevice، إلخ. يمكن لـ TextAbsorber استخراج النص من الصفحة، أو PDF بالكامل أو XForm، هذه TextAbsorber أكثر عمومية.
توضح الخطوات ومقتطف التعليمات البرمجية التالية كيفية استخراج النص من PDF باستخدام جهاز النص.
يعمل مقتطف التعليمات البرمجية التالي أيضًا مع مكتبة Aspose.PDF.Drawing.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractTextFromPagesWithTextDevice()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_Text();
var builder = new System.Text.StringBuilder();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "ExtractTextPage.pdf"))
{
// String to hold extracted text
string extractedText = "";
foreach (var page in document.Pages)
{
using (MemoryStream textStream = new MemoryStream())
{
// Create text device
var textDevice = new Aspose.Pdf.Devices.TextDevice();
// Set text extraction options - set text extraction mode (Raw or Pure)
var textExtOptions = new Aspose.Pdf.Text.TextExtractionOptions(Aspose.Pdf.Text.TextExtractionOptions.TextFormattingMode.Pure);
textDevice.ExtractionOptions = textExtOptions;
// Convert a particular page and save text to the stream
textDevice.Process(page, textStream);
// Convert a particular page and save text to the stream
textDevice.Process(document.Pages[1], textStream);
// Get text from memory stream
extractedText = System.Text.Encoding.Unicode.GetString(textStream.ToArray());
}
builder.Append(extractedText);
}
}
// Save the extracted text in text file
File.WriteAllText(dataDir + "input_Text_Extracted_out.txt", builder.ToString());
}
توفر فئة TextAbsorber القدرة على استخراج النص من صفحة معينة أو جميع صفحات مستند PDF. تعيد هذه الفئة النص المستخرج في خاصية Text. ومع ذلك، إذا كانت لدينا متطلبات لاستخراج النص من منطقة صفحة معينة، يمكننا استخدام خاصية Rectangle من TextSearchOptions. تأخذ خاصية Rectangle كائن Rectangle كقيمة ومن خلال استخدام هذه الخاصية، يمكننا تحديد منطقة الصفحة التي نحتاج لاستخراج النص منها.
يتم استدعاء طريقة Accept لصفحة لاستخراج النص. قم بإنشاء كائنات من فئات Document وTextAbsorber. استدعِ طريقة Accept على الصفحة الفردية، كفهرس Page، من كائن Document. الفهرس هو رقم الصفحة المحددة التي يحتاج النص إلى استخراجها. يمكنك الحصول على النص من خاصية Text من فئة TextAbsorber. يوضح مقتطف التعليمات البرمجية التالي كيفية استخراج النص من صفحة فردية.
يعمل مقتطف التعليمات البرمجية التالي أيضًا مع مكتبة Aspose.PDF.Drawing.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractTextFromParticularPageRegion()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_Text();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "ExtractTextAll.pdf"))
{
// Create TextAbsorber object to extract text
var absorber = new Aspose.Pdf.Text.TextAbsorber();
absorber.TextSearchOptions.LimitToPageBounds = true;
absorber.TextSearchOptions.Rectangle = new Aspose.Pdf.Rectangle(100, 200, 250, 350);
// Accept the absorber for first page
document.Pages[1].Accept(absorber);
// Get the extracted text
string extractedText = absorber.Text;
// Create a writer and open the file
using (TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt"))
{
// Write a line of text to the file
tw.WriteLine(extractedText);
}
}
}
قد يتكون ملف PDF من نصوص وصور وتعليقات ومرفقات ورسوم بيانية، وما إلى ذلك، وتقدم Aspose.PDF for .NET ميزة الإضافة والتلاعب بجميع هذه العناصر. هذه واجهة برمجة التطبيقات رائعة عندما يتعلق الأمر بإضافة النص واستخراجه من مستند PDF وقد نواجه سيناريو حيث يتكون مستند PDF من أكثر من عمود واحد (مستند متعدد الأعمدة) ونحتاج لاستخراج محتويات الصفحة مع احترام نفس التخطيط، فإن Aspose.PDF for .NET هو الخيار الصحيح لتحقيق هذا المتطلب. إحدى الطرق هي تقليل حجم الخط للمحتويات داخل مستند PDF ثم إجراء استخراج النص. يوضح مقتطف التعليمات البرمجية التالي الخطوات لتقليل حجم النص ثم محاولة استخراج النص من مستند PDF.
يعمل مقتطف التعليمات البرمجية التالي أيضًا مع مكتبة Aspose.PDF.Drawing.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractTextBasedOnColumns()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_Text();
var extractedText = string.Empty;
// Open PDF document
using (var sourceDocument = new Aspose.Pdf.Document(dataDir + "ExtractTextPage.pdf"))
{
var textFragmentAbsorber = new Aspose.Pdf.Text.TextFragmentAbsorber();
sourceDocument.Pages.Accept(textFragmentAbsorber);
Aspose.Pdf.Text.TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;
foreach (Aspose.Pdf.Text.TextFragment textFragment in textFragmentCollection)
{
// Need to reduce font size at least for 70%
textFragment.TextState.FontSize = textFragment.TextState.FontSize * 0.7f;
}
using (Stream sourceStream = new MemoryStream())
{
sourceDocument.Save(sourceStream);
using (var destDocument = new Aspose.Pdf.Document(sourceStream))
{
var textAbsorber = new Aspose.Pdf.Text.TextAbsorber();
destDocument.Pages.Accept(textAbsorber);
extractedText = textAbsorber.Text;
textAbsorber.Visit(destDocument);
}
}
// Save the extracted text in text file
File.WriteAllText(dataDir + "ExtractColumnsText_out.txt", extractedText);
}
}
في هذا الإصدار الجديد، قدمنا أيضًا العديد من التحسينات في TextAbsorber وآلية تنسيق النص الداخلية. لذا الآن أثناء استخراج النص باستخدام وضع “نقي”، يمكنك تحديد خيار ScaleFactor ويمكن أن يكون نهجًا آخر لاستخراج النص من مستند PDF متعدد الأعمدة بجانب النهج المذكور أعلاه. يمكن تعيين هذا العامل المقياسي لضبط الشبكة المستخدمة في آلية تنسيق النص الداخلية أثناء استخراج النص. إن تحديد قيم ScaleFactor بين 1 و0.1 (بما في ذلك 0.1) له نفس تأثير تقليل الخط.
تُعتبر قيم ScaleFactor بين 0.1 و-0.1 كقيمة صفرية، لكنها تجعل الخوارزمية تحسب العامل المقياسي المطلوب أثناء استخراج النص تلقائيًا. يعتمد الحساب على متوسط عرض الرموز الأكثر شيوعًا على الصفحة، لكن لا يمكننا ضمان أن النص المستخرج لا يصل أي سلسلة من العمود إلى بداية العمود التالي. يرجى ملاحظة أنه إذا لم يتم تحديد قيمة ScaleFactor، فسيتم استخدام القيمة الافتراضية 1.0. وهذا يعني أنه لن يتم إجراء أي تغيير في الحجم. إذا كانت قيمة ScaleFactor المحددة أكبر من 10 أو أقل من -0.1، فسيتم استخدام القيمة الافتراضية 1.0.
نقترح استخدام التغيير التلقائي (ScaleFactor = 0) عند معالجة عدد كبير من ملفات PDF لاستخراج محتوى النص. أو تعيين تقليل عرض الشبكة بشكل يدوي (حوالي ScaleFactor = 0.5). ومع ذلك، يجب عليك عدم تحديد ما إذا كان التغيير ضروريًا للمستندات المحددة أم لا. إذا قمت بتعيين تقليل عرض الشبكة بشكل زائد للمستند (الذي لا يحتاج إليه)، سيبقى محتوى النص المستخرج كافيًا تمامًا. يرجى إلقاء نظرة على مقتطف التعليمات البرمجية التالي.
يعمل مقتطف التعليمات البرمجية التالي أيضًا مع مكتبة Aspose.PDF.Drawing.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExctractTextWithScaleFactor()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_Text();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "ExtractTextPage.pdf"))
{
var textAbsorber = new Aspose.Pdf.Text.TextAbsorber();
textAbsorber.ExtractionOptions = new Aspose.Pdf.Text.TextExtractionOptions(Aspose.Pdf.Text.TextExtractionOptions.TextFormattingMode.Pure);
// Setting scale factor to 0.5 is enough to split columns in the majority of documents
// Setting of zero allows to algorithm choose scale factor automatically
textAbsorber.ExtractionOptions.ScaleFactor = 0.5; /* 0; */
document.Pages.Accept(textAbsorber);
var extractedText = textAbsorber.Text;
// Save the extracted text in text file
File.WriteAllText(dataDir + "ExtractTextUsingScaleFactor_out.text", extractedText);
}
}
في سيناريوهات مختلفة لاستخراج النص من مستند PDF، قد تواجه متطلبًا لاستخراج النص المميز فقط من مستند PDF. لتنفيذ هذه الوظيفة، أضفنا طرق TextMarkupAnnotation.GetMarkedText() وTextMarkupAnnotation.GetMarkedTextFragments() في واجهة برمجة التطبيقات. يمكنك استخراج النص المميز من مستند PDF عن طريق تصفية TextMarkupAnnotation واستخدام الطرق المذكورة. يوضح مقتطف التعليمات البرمجية التالي كيفية استخراج النص المميز من مستند PDF.
يعمل مقتطف التعليمات البرمجية التالي أيضًا مع مكتبة Aspose.PDF.Drawing.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractHighlightedTextFromDocument()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_Annotations();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "ExtractHighlightedText.pdf"))
{
// Loop through all the annotations
foreach (Aspose.Pdf.Annotations.Annotation annotation in document.Pages[1].Annotations)
{
// Filter TextMarkupAnnotation
if (annotation is Aspose.Pdf.Annotations.TextMarkupAnnotation)
{
var highlightedAnnotation = annotation as Aspose.Pdf.Annotations.TextMarkupAnnotation;
// Retrieve highlighted text fragments
Aspose.Pdf.Text.TextFragmentCollection collection = highlightedAnnotation.GetMarkedTextFragments();
foreach (Aspose.Pdf.Text.TextFragment textFragment in collection)
{
// Display highlighted text
Console.WriteLine(textFragment.Text);
}
}
}
}
}
أحيانًا نحتاج إلى الوصول إلى عناصر TextFragment أو TextSegment عند معالجة مستندات PDF التي تم إنشاؤها من XML. توفر Aspose.PDF for .NET الوصول إلى مثل هذه العناصر بالاسم. يوضح مقتطف التعليمات البرمجية أدناه كيفية استخدام هذه الوظيفة.
يعمل مقتطف التعليمات البرمجية التالي أيضًا مع مكتبة Aspose.PDF.Drawing.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void AccessTextFragmentAndSegmentElementsFromXML()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_Text();
// Create PDF document
using (var document = new Aspose.Pdf.Document())
{
document.BindXml(dataDir + "40014.xml");
// Get page
var page = (Aspose.Pdf.Page)document.GetObjectById("mainSection");
// Get elements by Id
var segment = (Aspose.Pdf.Text.TextSegment)document.GetObjectById("boldHtml");
segment = (Aspose.Pdf.Text.TextSegment)document.GetObjectById("strongHtml");
// Save PDF document
document.Save(dataDir + "DocumentFromXML_out.pdf");
}
}
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.