استخراج المحتوى الموسوم من PDF
في هذه المقالة ستتعلم كيفية استخراج المحتوى الموسوم من مستند PDF باستخدام C#.
الشفرة التالية تعمل أيضًا مع مكتبة Aspose.PDF.Drawing.
الحصول على محتوى PDF الموسوم
من أجل الحصول على محتوى مستند PDF مع النص الموسوم، يقدم Aspose.PDF خاصية TaggedContent من فئة Document.
يوضح الشفرة التالية كيفية الحصول على محتوى مستند PDF مع النص الموسوم:
// للحصول على أمثلة كاملة وملفات البيانات، يرجى الذهاب إلى https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// المسار إلى دليل المستندات.
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
// إنشاء مستند Pdf
Document document = new Document();
// الحصول على المحتوى للعمل مع TaggedPdf
ITaggedContent taggedContent = document.TaggedContent;
//
// العمل مع محتوى Pdf الموسوم
//
// تحديد العنوان واللغة للمستند
taggedContent.SetTitle("مستند Pdf الموسوم البسيط");
taggedContent.SetLanguage("en-US");
// حفظ مستند Pdf الموسوم
document.Save(dataDir + "TaggedPDFContent.pdf");
الحصول على البنية الجذرية
للحصول على البنية الجذرية لمستند PDF الموسوم، يقدم Aspose.PDF خاصية StructTreeRootElement لواجهة ITaggedContent و StructureElement. يوضح الجزء التالي من الكود كيفية الحصول على البنية الجذرية لمستند PDF الموسوم:
// للأمثلة الكاملة وملفات البيانات، يرجى الذهاب إلى https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// المسار إلى دليل المستندات.
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
// إنشاء مستند Pdf
Document document = new Document();
// الحصول على المحتوى للعمل مع TaggedPdf
ITaggedContent taggedContent = document.TaggedContent;
// تعيين العنوان واللغة للمستند
taggedContent.SetTitle("Tagged Pdf Document");
taggedContent.SetLanguage("en-US");
// الخصائص StructTreeRootElement و RootElement تستخدم للوصول إلى
// كائن StructTreeRoot لمستند pdf وإلى عنصر البنية الجذرية (عنصر بنية المستند).
StructTreeRootElement structTreeRootElement = taggedContent.StructTreeRootElement;
StructureElement rootElement = taggedContent.RootElement;
الوصول إلى العناصر الفرعية
للوصول إلى العناصر الفرعية لمستند PDF الموسوم، تقدم Aspose.PDF فئة ElementList. يوضح الشفرة التالية كيفية الوصول إلى العناصر الفرعية لمستند PDF موسوم:
// للحصول على أمثلة كاملة وملفات البيانات، يرجى الذهاب إلى https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// مسار دليل المستندات.
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
// فتح مستند Pdf
Document document = new Document(dataDir + "StructureElementsTree.pdf");
// الحصول على المحتوى للعمل مع TaggedPdf
ITaggedContent taggedContent = document.TaggedContent;
// الوصول إلى العنصر الجذر
ElementList elementList = taggedContent.StructTreeRootElement.ChildElements;
foreach (Element element in elementList)
{
if (element is StructureElement)
{
StructureElement structureElement = element as StructureElement;
// الحصول على الخصائص
string title = structureElement.Title;
string language = structureElement.Language;
string actualText = structureElement.ActualText;
string expansionText = structureElement.ExpansionText;
string alternativeText = structureElement.AlternativeText;
}
}
// الوصول إلى العناصر الفرعية للعنصر الأول في العنصر الجذر
elementList = taggedContent.RootElement.ChildElements[1].ChildElements;
foreach (Element element in elementList)
{
if (element is StructureElement)
{
StructureElement structureElement = element as StructureElement;
// تعيين الخصائص
structureElement.Title = "title";
structureElement.Language = "fr-FR";
structureElement.ActualText = "actual text";
structureElement.ExpansionText = "exp";
structureElement.AlternativeText = "alt";
}
}
// حفظ مستند PDF الموسوم
document.Save(dataDir + "AccessChildElements.pdf");
وسم الصور في مستند PDF موجود
لوسم الصور في مستند PDF موجود، تقدم Aspose.PDF طريقة FindElements من فئة StructureElement. يمكنك إضافة نص بديل للأشكال باستخدام خاصية AlternativeText من فئة FigureElement.
يوضح الشفرة التالية كيفية وسم الصور في مستند PDF موجود:
// للأمثلة الكاملة وملفات البيانات، يرجى الذهاب إلى https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// المسار إلى دليل الوثائق.
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
string inFile = dataDir + "TH.pdf";
string outFile = dataDir + "TH_out.pdf";
string logFile = dataDir + "TH_out.xml";
// فتح المستند
Document document = new Document(inFile);
// يحصل على المحتوى الموسوم وعنصر الهيكل الجذري
ITaggedContent taggedContent = document.TaggedContent;
StructureElement rootElement = taggedContent.RootElement;
// تعيين عنوان لمستند PDF الموسوم
taggedContent.SetTitle("مستند بالصور");
foreach (FigureElement figureElement in rootElement.FindElements<FigureElement>(true))
{
// تعيين نص بديل للشكل
figureElement.AlternativeText = "نص بديل للشكل (تقنية 2)";
// إنشاء وتعيين خاصية BBox
StructureAttribute bboxAttribute = new StructureAttribute(AttributeKey.BBox);
bboxAttribute.SetRectangleValue(new Rectangle(0.0, 0.0, 100.0, 100.0));
StructureAttributes figureLayoutAttributes = figureElement.Attributes.GetAttributes(AttributeOwnerStandard.Layout);
figureLayoutAttributes.SetAttribute(bboxAttribute);
}
// نقل عنصر Span إلى فقرة (العثور على span وفقرة خاطئة في أول TD)
TableElement tableElement = rootElement.FindElements<TableElement>(true)[0];
SpanElement spanElement = tableElement.FindElements<SpanElement>(true)[0];
TableTDElement firstTdElement = tableElement.FindElements<TableTDElement>(true)[0];
ParagraphElement paragraph = firstTdElement.FindElements<ParagraphElement>(true)[0];
// نقل عنصر Span إلى الفقرة
spanElement.ChangeParentElement(paragraph);
// حفظ المستند
document.Save(outFile);
// التحقق من الامتثال PDF/UA للمستند الناتج
document = new Document(outFile);
bool isPdfUaCompliance = document.Validate(logFile, PdfFormat.PDF_UA_1);
Console.WriteLine(String.Format("الامتثال لـ PDF/UA: {0}", isPdfUaCompliance));