التلاعب بوثيقة PDF في بايثون عبر .NET
التلاعب بمستند PDF في بايثون
التحقق من مستند PDF وفقًا لمعيار PDF A (A 1A و A 1B)
للتحقق من توافق مستند PDF مع PDF/A-1a أو PDF/A-1b، استخدم طريقة validate في فئة Document. تتيح لك هذه الطريقة تحديد اسم الملف الذي سيتم حفظ النتيجة فيه ونوع التحقق المطلوب من تعداد PdfFormat: PDF_A_1A أو PDF_A_1B.
يُظهر لك مقطع الشيفرة التالي كيفية التحقق من مستند PDF لـ PDF/A-1A.
import aspose.pdf as ap
# فتح المستند
document = ap.Document(input_pdf)
# التحقق من PDF لـ PDF/A-1a
document.validate(output_xml, ap.PdfFormat.PDF_A_1A)
يُظهر لك مقطع الشيفرة التالي كيفية التحقق من مستند PDF لـ PDF/A-1b.
import aspose.pdf as ap
# فتح المستند
document = ap.Document(input_pdf)
# التحقق من PDF لـ PDF/A-1a
document.validate(output_xml, ap.PdfFormat.PDF_A_1B)
العمل مع جدول المحتويات
إضافة جدول المحتويات إلى ملف PDF موجود
يمثل جدول المحتويات في PDF “جدول المحتويات”. وهو ميزة تتيح للمستخدمين التنقل بسرعة عبر مستند بتوفير نظرة عامة على أقسامه وعناوينه.
لإضافة جدول المحتويات إلى ملف PDF موجود، استخدم فئة العناوين في مساحة الأسماء aspose.pdf. يمكن لمساحة الأسماء aspose.pdf إنشاء ملفات PDF جديدة والتعامل مع الملفات الموجودة. لإضافة جدول المحتويات إلى ملف PDF موجود، استخدم مساحة الأسماء Aspose.Pdf. يوضح مقتطف الشيفرة التالي كيفية إنشاء جدول محتويات داخل ملف PDF موجود باستخدام بايثون عبر .NET.
import aspose.pdf as ap
# تحميل ملف PDF موجود
doc = ap.Document(input_pdf)
# الوصول إلى الصفحة الأولى من ملف PDF
tocPage = doc.pages.insert(1)
# إنشاء كائن لتمثيل معلومات جدول المحتويات
tocInfo = ap.TocInfo()
title = ap.text.TextFragment("جدول المحتويات")
title.text_state.font_size = 20
title.text_state.font_style = ap.text.FontStyles.BOLD
# تعيين العنوان لجدول المحتويات
tocInfo.title = title
tocPage.toc_info = tocInfo
# إنشاء كائنات نصية سيتم استخدامها كعناصر جدول المحتويات
titles = ["الصفحة الأولى", "الصفحة الثانية", "الصفحة الثالثة", "الصفحة الرابعة"]
for i in range(0, 2):
# إنشاء كائن عنوان
heading2 = ap.Heading(1)
segment2 = ap.text.TextSegment()
heading2.toc_page = tocPage
heading2.segments.append(segment2)
# تحديد الصفحة الوجهة لكائن العنوان
heading2.destination_page = doc.pages[i + 2]
# الصفحة الوجهة
heading2.top = doc.pages[i + 2].rect.height
# إحداثيات الوجهة
segment2.text = titles[i]
# إضافة العنوان إلى الصفحة التي تحتوي على جدول المحتويات
tocPage.paragraphs.add(heading2)
# حفظ المستند المحدث
doc.save(output_pdf)
تعيين نوع TabLeaderType مختلف لمستويات TOC المختلفة
تسمح Aspose.PDF لـ Python أيضًا بتعيين نوع TabLeaderType مختلف لمستويات TOC المختلفة. تحتاج إلى تعيين خاصية line_dash لـ TocInfo.
import aspose.pdf as ap
doc = ap.Document()
tocPage = doc.pages.add()
toc_info = ap.TocInfo()
# تعيين LeaderType
toc_info.line_dash = ap.text.TabLeaderType.SOLID
title = ap.text.TextFragment("جدول المحتويات")
title.text_state.font_size = 30
toc_info.title = title
# إضافة قسم القائمة إلى مجموعة الأقسام في مستند Pdf
tocPage.toc_info = toc_info
# تحديد تنسيق قائمة المستويات الأربعة من خلال تعيين الهوامش اليسرى
# و
# إعدادات تنسيق النص لكل مستوى
toc_info.format_array_length = 4
toc_info.format_array[0].margin.left = 0
toc_info.format_array[0].margin.right = 30
toc_info.format_array[0].line_dash = ap.text.TabLeaderType.DOT
toc_info.format_array[0].text_state.font_style = ap.text.FontStyles.BOLD | ap.text.FontStyles.ITALIC
toc_info.format_array[1].margin.left = 10
toc_info.format_array[1].margin.right = 30
toc_info.format_array[1].line_dash = 3
toc_info.format_array[1].text_state.font_size = 10
toc_info.format_array[2].margin.left = 20
toc_info.format_array[2].margin.right = 30
toc_info.format_array[2].text_state.font_style = ap.text.FontStyles.BOLD
toc_info.format_array[3].line_dash = ap.text.TabLeaderType.SOLID
toc_info.format_array[3].margin.left = 30
toc_info.format_array[3].margin.right = 30
toc_info.format_array[3].text_state.font_style = ap.text.FontStyles.BOLD
# إنشاء قسم في مستند Pdf
page = doc.pages.add()
# إضافة أربعة عناوين في القسم
for Level in range(1, 5):
heading2 = ap.Heading(Level)
segment2 = ap.text.TextSegment()
heading2.segments.append(segment2)
heading2.is_auto_sequence = True
heading2.toc_page = tocPage
segment2.text = "عنوان تجريبي" + str(Level)
heading2.text_state.font = ap.text.FontRepository.find_font("Arial")
# إضافة العنوان إلى جدول المحتويات.
heading2.is_in_list = True
page.paragraphs.add(heading2)
# حفظ ملف Pdf
doc.save(output_pdf)
إخفاء أرقام الصفحات في جدول المحتويات
في حالة عدم رغبتك في عرض أرقام الصفحات مع العناوين في جدول المحتويات، يمكنك استخدام خاصية is_show_page_numbers من الفئة TocInfo كقيمة false. يرجى مراجعة مقتطف الشيفرة التالي لإخفاء أرقام الصفحات في جدول المحتويات:
import aspose.pdf as ap
doc = ap.Document()
toc_page = doc.pages.add()
toc_info = ap.TocInfo()
title = ap.text.TextFragment("جدول المحتويات")
title.text_state.font_size = 20
title.text_state.font_style = ap.text.FontStyles.BOLD
toc_info.title = title
# أضف قسم القائمة إلى مجموعة الأقسام في مستند Pdf
toc_page.toc_info = toc_info
# تحديد تنسيق قائمة المستويات الأربعة عن طريق تعيين الهوامش اليسرى
# وإعدادات تنسيق النص لكل مستوى
toc_info.is_show_page_numbers = False
toc_info.format_array_length = 4
toc_info.format_array[0].margin.right = 0
toc_info.format_array[0].text_state.font_style = ap.text.FontStyles.BOLD | ap.text.FontStyles.ITALIC
toc_info.format_array[1].margin.left = 30
toc_info.format_array[1].text_state.underline = True
toc_info.format_array[1].text_state.font_size = 10
toc_info.format_array[2].text_state.font_style = ap.text.FontStyles.BOLD
toc_info.format_array[3].text_state.font_style = ap.text.FontStyles.BOLD
page = doc.pages.add()
# أضف أربعة عناوين في القسم
for Level in range(1, 5):
heading2 = ap.Heading(Level)
segment2 = ap.text.TextSegment()
heading2.toc_page = toc_page
heading2.segments.append(segment2)
heading2.is_auto_sequence = True
segment2.text = "هذا عنوان للمستوى " + str(Level)
heading2.is_in_list = True
page.paragraphs.add(heading2)
doc.save(output_pdf)
تخصيص أرقام الصفحات عند إضافة جدول المحتويات
من الشائع تخصيص ترقيم الصفحات في جدول المحتويات عند إضافة جدول المحتويات في مستند PDF. على سبيل المثال، قد نحتاج إلى إضافة بعض البادئات قبل رقم الصفحة مثل P1، P2، P3 وهكذا. في مثل هذه الحالة، يوفر Aspose.PDF لـ Python خاصية page_numbers_prefix في فئة TocInfo والتي يمكن استخدامها لتخصيص أرقام الصفحات كما هو موضح في المثال البرمجي التالي.
import aspose.pdf as ap
# تحميل ملفات PDF موجودة
doc = ap.Document(input_pdf)
# الوصول إلى الصفحة الأولى من ملف PDF
toc_page = doc.pages.insert(1)
# إنشاء كائن لتمثيل معلومات جدول المحتويات
toc_info = ap.TocInfo()
title = ap.text.TextFragment("جدول المحتويات")
title.text_state.font_size = 20
title.text_state.font_style = ap.text.FontStyles.BOLD
# تعيين العنوان لجدول المحتويات
toc_info.title = title
toc_info.page_numbers_prefix = "P"
toc_page.toc_info = toc_info
for i in range(len(doc.pages)):
# إنشاء كائن عنوان
heading2 = ap.Heading(1)
segment2 = ap.text.TextSegment()
heading2.toc_page = toc_page
heading2.segments.append(segment2)
# تحديد الصفحة المقصودة لكائن العنوان
heading2.destination_page = doc.pages[i + 1]
# الصفحة المقصودة
heading2.top = doc.pages[i + 1].rect.height
# الإحداثيات المقصودة
segment2.text = "صفحة " + str(i)
# إضافة العنوان إلى الصفحة التي تحتوي على جدول المحتويات
toc_page.paragraphs.add(heading2)
# حفظ المستند المحدث
doc.save(output_pdf)
كيفية تعيين تاريخ انتهاء صلاحية ملف PDF
نقوم بتطبيق امتيازات الوصول على ملفات PDF بحيث يمكن لمجموعة معينة من المستخدمين الوصول إلى ميزات/كائنات معينة من مستندات PDF. من أجل تقييد الوصول إلى ملف PDF، نقوم عادةً بتطبيق التشفير وقد يكون لدينا متطلب لتعيين انتهاء صلاحية ملف PDF، بحيث يحصل المستخدم الذي يصل إلى المستند أو يعرضه على تنبيه صالح بخصوص انتهاء صلاحية ملف PDF.
import aspose.pdf as ap
# إنشاء كائن Document
doc = ap.Document()
# إضافة صفحة إلى مجموعة الصفحات في ملف PDF
doc.pages.add()
# إضافة جزء نصي إلى مجموعة الفقرات في كائن الصفحة
doc.pages[1].paragraphs.add(ap.text.TextFragment("Hello World..."))
# إنشاء كائن JavaScript لتعيين تاريخ انتهاء صلاحية ملف PDF
javaScript = ap.annotations.JavascriptAction(
"var year=2017;"
+ "var month=5;"
+ "today = new Date(); today = new Date(today.getFullYear(), today.getMonth());"
+ "expiry = new Date(year, month);"
+ "if (today.getTime() > expiry.getTime())"
+ "app.alert('The file is expired. You need a new one.');"
)
# تعيين JavaScript كإجراء فتح ملف PDF
doc.open_action = javaScript
# حفظ مستند PDF
doc.save(output_pdf)
تسوية استمارة PDF قابلة للتعبئة في بايثون
غالبًا ما تتضمن مستندات PDF نماذج بها عناصر تفاعلية قابلة للتعبئة مثل أزرار الراديو ومربعات الاختيار ومربعات النص والقوائم، إلخ. لجعلها غير قابلة للتحرير لأغراض تطبيقية مختلفة، نحتاج إلى تسوية ملف PDF. يوفر Aspose.PDF الوظيفة لتسوية PDF الخاص بك في بايثون ببضع سطور من الكود فقط:
import aspose.pdf as ap
# تحميل نموذج PDF المصدر
doc = ap.Document(input_pdf)
# تسوية استمارة PDF القابلة للتعبئة
if len(doc.form.fields) > 0:
for item in doc.form.fields:
item.flatten()
# حفظ المستند المحدث
doc.save(output_pdf)