تنسيق مستند PDF باستخدام بايثون

تنسيق مستند PDF

الحصول على خصائص نافذة المستند وعرض الصفحة

يساعدك هذا الموضوع على فهم كيفية الحصول على خصائص نافذة المستند، وتطبيق العارض، وكيفية عرض الصفحات. لتعيين هذه الخصائص:

افتح ملف PDF باستخدام فئة Document. يمكنك الآن تعيين خصائص كائن المستند، مثل

  • CenterWindow – تمركز نافذة المستند على الشاشة. الافتراضي: خطأ.
  • Direction – ترتيب القراءة. يحدد هذا كيفية ترتيب الصفحات عند عرضها جنبًا إلى جنب. الافتراضي: من اليسار إلى اليمين.
  • DisplayDocTitle – عرض عنوان المستند في شريط عنوان نافذة المستند. الافتراضي: خطأ (يتم عرض العنوان).
  • HideMenuBar – إخفاء أو عرض شريط القوائم الخاص بنافذة المستند. الافتراضي: خطأ (يتم عرض شريط القوائم).
  • HideToolBar – إخفاء أو عرض شريط الأدوات الخاص بنافذة المستند. الافتراضي: خطأ (يتم عرض شريط الأدوات).
  • HideWindowUI – إخفاء أو عرض عناصر نافذة المستند مثل أشرطة التمرير. الافتراضي: false (يتم عرض عناصر واجهة المستخدم).
  • NonFullScreenPageMode – كيفية عرض المستند عند عدم عرضه في وضع الشاشة الكاملة.
  • PageLayout – تخطيط الصفحة.
  • PageMode – كيفية عرض المستند عند فتحه لأول مرة. الخيارات هي عرض الصور المصغرة، الشاشة الكاملة، عرض لوحة المرفقات.

يظهر لك مقتطف الشيفرة التالي كيفية الحصول على الخصائص باستخدام فئة Document.


    import aspose.pdf as ap

    # فتح المستند
    document = ap.Document(input_pdf)

    # الحصول على خصائص المستند المختلفة
    # موضع نافذة المستند - الافتراضي: false
    print("CenterWindow :", document.center_window)

    # ترتيب القراءة السائد؛ يحدد موضع الصفحة
    # عندما يتم العرض جنبًا إلى جنب - الافتراضي: L2R
    print("Direction :", document.direction)

    # ما إذا كان يجب أن تعرض شريط عنوان النافذة عنوان المستند
    # إذا كان false، يعرض شريط العنوان اسم ملف PDF - الافتراضي: false
    print("DisplayDocTitle :", document.display_doc_title)

    # ما إذا كان يجب تغيير حجم نافذة المستند لتتناسب مع حجم
    # الصفحة الأولى المعروضة - الافتراضي: false
    print("FitWindow :", document.fit_window)

    # ما إذا كان يجب إخفاء شريط القوائم لتطبيق العارض - الافتراضي: false
    print("HideMenuBar :", document.hide_menubar)

    # ما إذا كان يجب إخفاء شريط الأدوات لتطبيق العارض - الافتراضي: false
    print("HideToolBar :", document.hide_tool_bar)

    # ما إذا كان يجب إخفاء عناصر واجهة المستخدم مثل أشرطة التمرير
    # وترك محتويات الصفحة فقط معروضة - الافتراضي: false
    print("HideWindowUI :", document.hide_window_ui)

    # وضع صفحة المستند. كيفية عرض المستند عند الخروج من وضع الشاشة الكاملة.
    print("NonFullScreenPageMode :", document.non_full_screen_page_mode)

    # تخطيط الصفحة أي صفحة واحدة، عمود واحد
    print("PageLayout :", document.page_layout)

    # كيف ينبغي عرض المستند عند فتحه
    # أي عرض الصور المصغرة، الشاشة الكاملة، عرض لوحة المرفقات
    print("pageMode :", document.page_mode)

إعداد خصائص نافذة وعرض الصفحة للمستند

يشرح هذا الموضوع كيفية إعداد خصائص نافذة المستند، وتطبيق العارض، وعرض الصفحة. لتعيين هذه الخصائص المختلفة:

  1. افتح ملف PDF باستخدام فئة Document.
  2. قم بتعيين خصائص كائن المستند.
  3. احفظ ملف PDF المحدث باستخدام طريقة الحفظ.

الخصائص المتاحة هي:

  • CenterWindow
  • Direction
  • DisplayDocTitle
  • FitWindow
  • HideMenuBar
  • HideToolBar
  • HideWindowUI
  • NonFullScreenPageMode
  • PageLayout
  • PageMode

يتم استخدام كل منها ووصفها في الشيفرة أدناه. يظهر لك مقتطف الشيفرة التالي كيفية تعيين الخصائص باستخدام فئة Document.


    import aspose.pdf as ap

    # افتح المستند
    document = ap.Document(input_pdf)

    # تعيين خصائص المستند المختلفة
    # تحديد موضع نافذة المستند - الافتراضي: false
    document.center_window = True

    # ترتيب القراءة السائد؛ يحدد موضع الصفحة
    # عند العرض جنبًا إلى جنب - الافتراضي: L2R
    document.direction = ap.Direction.R2L

    # تحديد ما إذا كان شريط عنوان النافذة يجب أن يعرض عنوان المستند
    # إذا كانت false، يعرض شريط العنوان اسم ملف PDF - الافتراضي: false
    document.display_doc_title = True

    # تحديد ما إذا كان يجب تغيير حجم نافذة المستند لتناسب حجم
    # الصفحة المعروضة أولاً - الافتراضي: false
    document.fit_window = True

    # تحديد ما إذا كان يجب إخفاء شريط القائمة في تطبيق العارض - الافتراضي: false
    document.hide_menubar = True

    # تحديد ما إذا كان يجب إخفاء شريط الأدوات في تطبيق العارض - الافتراضي: false
    document.hide_tool_bar = True

    # تحديد ما إذا كان يجب إخفاء عناصر واجهة المستخدم مثل أشرطة التمرير
    # وترك محتويات الصفحة فقط معروضة - الافتراضي: false
    document.hide_window_ui = True

    # وضع صفحة المستند. تحديد كيفية عرض المستند عند الخروج من وضع الشاشة الكاملة.
    document.non_full_screen_page_mode = ap.PageMode.USE_OC

    # تحديد تخطيط الصفحة أي صفحة واحدة، عمود واحد
    document.page_layout = ap.PageLayout.TWO_COLUMN_LEFT

    # تحديد كيفية عرض المستند عند فتحه
    # أي عرض الصور المصغرة، الشاشة الكاملة، عرض لوحة المرفقات
    document.page_mode = ap.PageMode.USE_THUMBS

    # حفظ ملف PDF المحدث
    document.save(output_pdf)

تضمين خطوط نوع 1 القياسية

بعض مستندات PDF تحتوي على خطوط من مجموعة خطوط Adobe خاصة. وتسمى الخطوط من هذه المجموعة “خطوط نوع 1 القياسية”. تتضمن هذه المجموعة 14 خطًا ويتطلب تضمين هذا النوع من الخطوط استخدام علامات خاصة مثل embed_standard_fonts. فيما يلي مقتطف الشيفرة الذي يمكن استخدامه للحصول على مستند مع جميع الخطوط المضمنة بما في ذلك خطوط نوع 1 القياسية:


    import aspose.pdf as ap

    # تحميل مستند PDF موجود
    document = ap.Document(input_pdf)
    # تعيين خاصية EmbedStandardFonts للمستند
    document.embed_standard_fonts = True
    for page in document.pages:
        if page.resources.fonts != None:
            for page_font in page.resources.fonts:
                # التحقق مما إذا كان الخط مضمنًا بالفعل
                if not page_font.is_embedded:
                    page_font.is_embedded = True

    document.save(output_pdf)

تضمين الخطوط أثناء إنشاء PDF

إذا كنت بحاجة لاستخدام أي خط غير الخطوط الأساسية الأربعة عشر المدعومة من قبل Adobe Reader، فيجب عليك تضمين وصف الخط أثناء إنشاء ملف PDF. إذا لم تكن معلومات الخط مضمنة، فسيقوم Adobe Reader بأخذها من نظام التشغيل إذا كانت مثبتة على النظام، أو سيقوم بتكوين خط بديل وفقًا لوصف الخط في PDF.

يرجى ملاحظة أنه يجب تثبيت الخط المضمن على الجهاز المضيف، أي في حالة الكود التالي، يتم تثبيت خط ‘Univers Condensed’ على النظام.

نستخدم الخاصية ‘is_embedded’ لتضمين معلومات الخط في ملف PDF. تعيين قيمة هذه الخاصية إلى ‘True’ سيقوم بتضمين ملف الخط الكامل في PDF، مع العلم أن ذلك سيزيد من حجم ملف PDF. فيما يلي مقتطف الكود الذي يمكن استخدامه لتضمين معلومات الخط في PDF.


    import aspose.pdf as ap

    # إنشاء كائن Pdf عن طريق استدعاء منشئه الفارغ
    doc = ap.Document()

    # إنشاء قسم في كائن Pdf
    page = doc.pages.add()

    fragment = ap.text.TextFragment("")
    segment = ap.text.TextSegment(" هذا نص تجريبي باستخدام خط مخصص.")
    ts = ap.text.TextState()
    ts.font = ap.text.FontRepository.find_font("Arial")
    ts.font.is_embedded = True
    segment.text_state = ts
    fragment.segments.append(segment)
    page.paragraphs.add(fragment)

    # حفظ مستند PDF
    doc.save(output_pdf)

تعيين اسم الخط الافتراضي أثناء حفظ PDF

عندما يحتوي مستند PDF على خطوط غير متوفرة في المستند نفسه وعلى الجهاز، تقوم API باستبدال هذه الخطوط بالخط الافتراضي. إذا كان الخط متاحًا (مثبتًا على الجهاز أو مضمنًا في المستند)، يجب أن يحتوي ملف PDF الناتج على نفس الخط (يجب ألا يتم استبداله بالخط الافتراضي). يجب أن تحتوي قيمة الخط الافتراضي على اسم الخط (وليس مسار ملفات الخط). لقد قمنا بتطبيق ميزة لتعيين اسم الخط الافتراضي أثناء حفظ المستند كملف PDF. يمكن استخدام الكود التالي لتعيين الخط الافتراضي:


    import aspose.pdf as ap

    # تحميل مستند PDF موجود بخط مفقود
    document = ap.Document(input_pdf)

    pdfSaveOptions = ap.PdfSaveOptions()
    # تحديد اسم الخط الافتراضي
    newName = "Arial"
    pdfSaveOptions.default_font_name = newName
    document.save(output_pdf, pdfSaveOptions)

الحصول على جميع الخطوط من مستند PDF

في حالة رغبتك في الحصول على جميع الخطوط من مستند PDF، يمكنك استخدام طريقة font_utilities المقدمة في فئة Document. يرجى التحقق من مقتطف الشيفرة التالي للحصول على جميع الخطوط من وثيقة PDF الموجودة:


    import aspose.pdf as ap

    doc = ap.Document(input_pdf)
    fonts = doc.font_utilities.get_all_fonts()
    for font in fonts:
        print(font.font_name)

تحسين تضمين الخطوط باستخدام FontSubsetStrategy

يوضح مقتطف الشيفرة التالي كيفية تعيين FontSubsetStrategy باستخدام خاصية font_utilities:


    import aspose.pdf as ap

    doc = ap.Document(input_pdf)
    # سيتم تضمين جميع الخطوط كجزء من الوثيقة في حالة SubsetAllFonts.
    doc.font_utilities.subset_fonts(ap.FontSubsetStrategy.SUBSET_ALL_FONTS)
    # سيتم تضمين جزء من الخطوط المدمجة بالكامل في الوثيقة، ولكن الخطوط التي لم يتم تضمينها لن تتأثر.
    doc.font_utilities.subset_fonts(ap.FontSubsetStrategy.SUBSET_EMBEDDED_FONTS_ONLY)
    doc.save(output_pdf)

الحصول على وتعيين عامل التكبير لملف PDF

أحيانًا، تريد تحديد ما هو عامل التكبير الحالي لمستند PDF. باستخدام Aspose.Pdf، يمكنك معرفة القيمة الحالية وكذلك تعيين واحدة.

تسمح لك خاصية الوجهة GoToAction بالحصول على قيمة التكبير المرتبطة بملف PDF. وبالمثل، يمكن استخدامها لتعيين عامل التكبير لملف.

تعيين عامل التكبير

يظهر مقطع الكود التالي كيفية تعيين عامل التكبير لملف PDF.


    import aspose.pdf as ap

    # إنشاء كائن مستند جديد
    doc = ap.Document(input_pdf)

    action = ap.annotations.GoToAction(ap.annotations.XYZExplicitDestination(1, 0.0, 0.0, 0.5))
    doc.open_action = action
    # حفظ المستند
    doc.save(output_pdf)

الحصول على عامل التكبير

يظهر مقطع الكود التالي كيفية الحصول على عامل التكبير لملف PDF.


    import aspose.pdf as ap

    # إنشاء كائن مستند جديد
    doc = ap.Document(input_pdf)

    # إنشاء كائن GoToAction
    action = doc.open_action

    # الحصول على عامل التكبير لملف PDF
    print(action.destination.zoom)

إعداد خصائص الطباعة المسبقة

تسمح Aspose.PDF بتعيين أعضاء DUPLEX_FLIP_LONG_EDGE لوثيقة PDF. يسمح لك بتغيير خاصية DuplexMode لوثيقة PDF التي يتم تعيينها إلى simplex بشكل افتراضي. يمكن تحقيق ذلك باستخدام منهجيتين مختلفتين كما هو موضح أدناه.


    import aspose.pdf as ap

    doc = ap.Document()
    doc.pages.add()
    doc.duplex = ap.PrintDuplex.DUPLEX_FLIP_LONG_EDGE
    doc.save(output_pdf)

إعداد خصائص الطباعة المسبقة باستخدام محرر محتوى PDF


    import aspose.pdf as ap

    ed = ap.facades.PdfContentEditor()
    ed.bind_pdf(input_pdf)
    if (ed.get_viewer_preference() & ap.facades.ViewerPreference.DUPLEX_FLIP_SHORT_EDGE) > 0:
        print("الملف يحتوي على قلب مزدوج للحافة القصيرة")

    ed.change_viewer_preference(ap.facades.ViewerPreference.DUPLEX_FLIP_SHORT_EDGE)
    ed.save(output_pdf)