إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

التعامل مع [ libreoffice & openoffice ] من خلال python-uno ( الجزء الرابع )

تقليص
X
تقليص

  • التعامل مع [ libreoffice & openoffice ] من خلال python-uno ( الجزء الرابع )

    بسم الله والحمدلله والصلاة والسلام على رسول الله اما بعد ,,

    اليوم إن شاء الله سوف نشرح ادراج نص و ترقيم في ذيل الصفحه وتصدير المستند الى صيغة PDF مع او بدون رقم سري

    الكود :

    كود PHP:

    #!/usr/bin/python3
    #-*- coding utf-8 -*-


    import uno
    import os
    import time
    from com
    .sun.star.beans import PropertyValue

    class MyDocument():
        
    def __init__(self):
            
    self.file 'file://'+os.path.join(os.path.abspath(os.curdir),'test4.pdf')

        
    def dt(self):
            try:
                
    os.popen('soffice --accept="socket,host=localhost,port=2002;urp;StarOffice.ServiceManager" --norestore  --nologo --headless &')
                
    time.sleep(3)
                
    localcontext  =  uno.getComponentContext()
                
    resolver localcontext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver"localcontext)
                
    context resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
                
    desktop context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop"context)
                return 
    desktop
            except Exception 
    as e:
                print(
    e)



        
    def pnum(selfdoc):
            
    PS doc.StyleFamilies.getByName("PageStyles").getByName("Standard")
            
    PS.FooterIsOn True
            PN 
    doc.createInstance("com.sun.star.text.textfield.PageNumber")
            
    PN.NumberingType 4   # { 0 = capital 1 = small 2 = latin number 4 = arabic number
            
    FCursor PS.FooterText.Text.createTextCursor()
            
    PS.FooterText.Text.insertString(FCursor'صفحة رقم |  'False)
            
    PS.FooterText.Text.insertTextContent(FCursorPNFalse)
            
    FCursor.ParaAdjust 3


        def ppdf
    (self,doc):
            
    filter_data = (
            
    PropertyValue('EncryptFile'0True0),
            
    PropertyValue('DocumentOpenPassword'0'1234'0))

            
    properties = (
                
    PropertyValue"FilterName" 0"writer_pdf_Export" ),
                
    PropertyValue"FilterData" 0,  uno.Any("[]com.sun.star.beans.PropertyValue"filter_data),0))
            
    doc.storeToURL(self.file,properties)

        
    def ct(self):
            
    doc self.dt().loadComponentFromURL"private:factory/swriter","_blank"0, () )
            
    text doc.Text
            cursor 
    text.createTextCursor()
            
    cursor.gotoEndTrue )
            
    cursor.CharFontName='KacstOne'
            
    cursor.ParaStyleName "Title"
            
    text.insertString(cursor'Title \n\r',0)
            for 
    i in range(1,4):
                
    cursor.CharFontName='KacstOne'
                
    cursor.ParaStyleName "Heading %d" %i
                cursor
    .ParaAdjust 0
                text
    .insertString(cursor"Heading  %s \n\r" %0)
                if 
    == 3:
                    
    cursor.CharFontName "KacstOne"
                    
    cursor.ParaStyleName "Text Body"
                    
    cursor.ParaAdjust 0
                    text
    .insertString(cursor"Text Body" 0)

            
    self.pnum(doc)
            if 
    input('Choose No:\n(1) Export Directly as PDF With Password:\n(2)Export Directly as PDF: Default\n') == '1':
                
    self.ppdf(doc)
            else:
                
    property = (PropertyValue"FilterName" 0"writer_pdf_Export" ),)
                
    doc.storeToURL(self.file,property)
            
    doc.dispose()
            
    os.system("pkill soffice")
    if 
    __name__=='__main__':
        
    MyDocument()
        
    m.ct() 
    سنذكر الاشياء الجديده في الكود ونتجاوز ماتم شرحه سابقا للاختصار

    كود PHP:
    cursor.CharFontName='KacstOne'
    cursor.ParaStyleName "Title"
    text.insertString(cursor'Title \n\r',0

    هذه الاسطر في الداله ct
    السطر الاول اخترنا نوع الخط
    السطر الثاني حددنا نمط عنوان للنص
    السطر الثالث ادرجنا النص (ملاحظه : عند ادراج \r وتعني فقره سيعود المؤشر الى الاعدادات الافتراضيه للصفحه يجب عليك ضبطها في كل مره بما يناسبك انظر الاسطر التاليه للتوضيح )

    كود PHP:
    for i in range(1,4):
        
    cursor.CharFontName='KacstOne'
        
    cursor.ParaStyleName "Heading %d" %i
        cursor
    .ParaAdjust 0
        text
    .insertString(cursor"Heading  %s \n\r" %0)
        if 
    == 3:
            
    cursor.CharFontName "KacstOne"
            
    cursor.ParaStyleName "Text Body"
            
    cursor.ParaAdjust 0
            text
    .insertString(cursor"Text Body" 0
    هنا قمنا بعمل حلقة تقوم بادراج نص 3 مرات وفي كل مره يتم ضبط الاعدادات من جديد وقبل الخروج ندرج نص عادي
    السطر الاول حلقه تتكرر 3 مرات
    السطر الثاني حددنا نوع الخط
    السطر الثالث حددنا النمط heading بناء على المتغير i
    السطر الرابع حددنا مكان النص يسار الصفحه
    السطر الخامس ادرجنا النص
    السطور اللتي بعدها تعمل بعد انتهاء الحلقه وتدرج نص عادي

    كود PHP:
    self.pnum(doc
    هنا قمنا بتشغيل الداله pnum واعطيناها المستند كمدخل وفي هذه الداله اعدادات ترقيم الصفحات نذهب الان لهذه الداله

    كود PHP:
    def pnum(selfdoc):
        
    PS doc.StyleFamilies.getByName("PageStyles").getByName("Standard")
        
    PS.FooterIsOn True
        PN 
    doc.createInstance("com.sun.star.text.textfield.PageNumber")
        
    PN.NumberingType 4   # { 0 = capital 1 = small 2 = latin number 4 = arabic number
        
    FCursor PS.FooterText.Text.createTextCursor()
        
    PS.FooterText.Text.insertString(FCursor'صفحة رقم |  'False)
        
    PS.FooterText.Text.insertTextContent(FCursorPNFalse)
        
    FCursor.ParaAdjust 
    السطر الاول احظرنا النمط الخاص بالمستند
    السطر الثاني فعلنا تذييل الصفحه
    السطر الثالث انشائنا حقل رقم الصفحه
    السطر الرابع حددنا نوع الترقيم وهي ارقام عربيه <123456789> في الكود انواع اخرى تستطيع تجربتها
    السطر الخامس انشائنا مؤشر خاص بذيل الصفحه
    السطر السادس ادرجنا نص بجانب رقم الصفحه (اختياري تستطيع الاستغناء عن هذا السطر)
    السطر السابع ادرجنا الترقيم في ذيل الصفحه
    السطر الثامن جعلناه في الوسط

    نعود للداله ct
    كود PHP:
    if input('Choose No:\n(1) Export Directly as PDF With Password:\n(2)Export Directly as PDF: Default\n') == '1':
        
    self.ppdf(doc)
    else:
        
    property = (PropertyValue"FilterName" 0"writer_pdf_Export" ),)
        
    doc.storeToURL(self.file,property
    هنا قمنا بعمل شرط بناء على اختيار المستخدم اذا كان الاختيار 1 يقوم بتشغيل الداله ppdf وفيها اعدادات تصدير المستند الى PDF ورقم سري ....
    وإن كان غير ذلك سيقوم البرنامج بتصدير المستند الى PDF وحفظه فقط
    نذهب الى الداله ppdf

    كود PHP:
    def ppdf(self,doc):
        
    filter_data = (
        
    PropertyValue('EncryptFile'0True0),
        
    PropertyValue('DocumentOpenPassword'0'1234'0))

        
    properties = (
        
    PropertyValue"FilterName" 0"writer_pdf_Export" ),
        
    PropertyValue"FilterData" 0,  uno.Any("[]com.sun.star.beans.PropertyValue"filter_data),0))
        
    doc.storeToURL(self.file,properties
    filter_data يحتوي على خصائص حماية المستند برقم سري الخاصيه الاولى تشفير الملف يجب ان تكون True مفعله الخاصيه الثانيه نضع الرقم السري في مكان "1234"
    properties يحتوي على خصائص تصدير المستند الخاصيه الاولى تصدير المستند الى PDF الخاصيه الثاني لقراءة خصائص حماية المستند
    السطر الاخير لتصدير المستند بالخصائص المذكوره سابقا

    نعود للشرط اللذي وضعناه

    كود PHP:
    else:
        
    property = (PropertyValue"FilterName" 0"writer_pdf_Export" ),)
        
    doc.storeToURL(self.file,property
    هنا سوف يقوم بتصدير المستند الى PDF بدون رقم سري وحفظه


    هذا مالدي الان واسال الله لي ولكم التوفيق
      لا يمكن إضافة تعليقات.

    التصانيف

    تقليص

    Latest Articles

    تقليص

    • تجربة تثبيت توزيعة ديبيان بجانب ويندوز بدون usb او cd
      أحمد غريب
      التجربة تمت على VirtualBox النظام ويندوز اكسبي قرص صلب واحد قسمين c و d

      التجربة قسمين القسم الاول تجهيز ملف iso دبيان لعملية الاقلاع لايف من الهاردسك والقسم الثاني عملية الثتبيت تحتاج الى
      27-11-2016, 03:08 PM
    • عداد الإستغفار
      مبتدى في للينكس
      السلام عليكم ورحمة الله و بركاته

      شرح فكرة السكربت:

      عداد الأستغفار يعمل عند الضغط على أختصار من الكيبورد و عند كل ضغطة يضيف 1 إلى العداد و يظهر إطار صغير في منتصف الشاشة لعرض العدد لمدة ثانية ثم يتم أغلاقه تلقائياً . أذا وصل العداد إلى 100 يرجع إلى الصفر. يتم حفظ العدد في ملف count.txt يتم إنشاءه تلقائياً بواسطة السكربت.


      شرح إعداد السكربت:

      1. قم بفتح مجلد Home وقم بإنشاء مجلد بإسم counter

      2. في داخل المجلد counter قم بإنشاء ملف نصي بإسم Counter.java , ثم قم بنسخ السكربت التالية و ضعه في داخل الملف ثم قم بالحفظ



      :
      package counter; import java.awt.BorderLayout; import java.awt.Event; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.io.PrintWriter; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JButton; import javax.swing.SwingConstants; public class Counter extends JFrame { private static String fileName = System.getProperty("user.dir") + "/counter/count.txt"; public Counter() { this.setTitle("Counter"); this.setResizable(false); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.pack(); this.setSize(150, 150); this.setVisible(true); } public static void main(String[] args) { Counter obj = new Counter(); int count = 0; try { try { try { String countString = readFile(fileName, StandardCharsets.UTF_8).trim(); count = (int) Integer.parseInt(countString); } catch (Exception e) { outResult(fileName, String.valueOf(count)); } finally { if (count
      ...
      23-11-2016, 02:11 AM
    • سكربت بايثون لتسهيل تثبيت بعض الأشياء في فيدورا
      yucef
      بسم الله الرحمن الرحيم
      السلام عليكم ورحمة الله وبركاته




      قمت بعمل سكربت بايثون لتسهل تثبيت بعض الأشياء لفيدورا ,طريقة تنزيل وتشغيل السكربت مشروحة في هذا الرابط .

      https://github.com/yucefsourani/arfedy

      ...
      23-11-2016, 02:09 AM
    • إعادة تسمية الملفات باستخدام rename
      OtmanGX
      لينكس على السّريع : إعادة تسمية الملفات باستخدام rename


      تذكير بالموضوع السابق : إعادة تسمية الملفات باستخدام mv

      كما في المرة السابقة سنتحدث اليوم عن إعادة تسمية مجموعة من الملفات لكن باستخدام أداة أخرى وهي rename ؛ بحيث أنّنا لن نضطر لاستعمال حلقات التكرار والأمر مشابه نوعا ما لما يقوم به الأمرsed ، لكن الأداة rename تستخدم التعابير النظامية perlexpr لكننا سنذكر فقط التعابير النظامية المشتركة بين الاثنين .
      بعض خصائص الأمر :
      n, –no-act- : يوصى باستخدام هذه الخاصية كثيرا ، فمن خلالها يتم إظهار التغييرات التي ستتم بدون إجراء أي تعديل
      f, –force : الكتابة على الملفات بدون أدنى تحذير
      v, –verbose – : تفعيل وضع verbose ليتم إظهار التغييرات الجارية
      ويكون الشكل العام للأمر كالتالي :

      :
      rename [option] 's/old-name/new-name/' file
      باستبدال file بالملفات التي تود تغيير أسمائها
      كمثال أوّلي مثلا نريد استبدال المسافات الفارغة المتواجدة في أسماء الملفات أو المجلدات بالرمز _ :

      المثال 1 :
      :
      rename 's/ /_/g' *
      g ليتم الاستبدال في أكثر من موضع إن وجد
      الآن سنقوم كالعادة بإنشاء مجلد نقوم فيه بأمثلتنا
      ...
      23-11-2016, 02:05 AM
    • المراقبة العالمية ! Global surveillance
      عبدالرحمـن محمد
      السلام عليكم ورحمة الله

      مقدمة :
      في يونيو 2013، سرَّب إدوارد سنودين، وهو عميل متعاقد مع وكالة الأمن القومي، مستندات تّصِف بريسم "ومجموعة برامج أخري" بأنه برنامج يتيح مراقبة معمقة للاتصالات الحية والمعلومات المخزنة. ويمكن من استهداف أي عميل لشركة منخرطة في برنامج بريسم، في حال كان هذا العميل يسكن خارج الولايات المتحدة، أو كان مواطنًا أمريكيًا له اتصالات تتضمن محتويات وِب خاصة بأشخاص خارج الولايات المتحدة. البيانات التي يقال أن بريسم يمكِّن من الحصول عليها تتضمن، رسائل البريد الإلكتروني، ومحادثات الفيديو والصوت، والصور، والاتصالات الصوتية ببرتوكول الإنترنت، وعمليات نقل الملفات، وإخطارات الولوج وتفاصيل الشبكات الاجتماعية.
      كشفت الوثائق المسرّبة أن NSA كانت قادرة على الدخول مباشرة إلى الخوادم الخاصة لكل من
      ...
      23-11-2016, 02:04 AM
    • اضافة مستخدم لينيكس جديد و استعمال نفس اسم الحساب لMySQL و قاعدة بيانات بإسمه ايضًا.
      superlinux
      طبعًا هذه استعملها لفتح حساب جديد لشخص يريد ان يستعمل مجلده المنزل (او home directory بالانجليزي) لحفظ موقع الويب خاصته. يعني هذه طريقة ارجو تكون خفيفة ظريفة لإدارة الخادم عليكم. و هكذا ابدؤوا بيع المواقع عالسريع.

      انا استعمل دبيان 8.0 جسي هنا.

      قبل أي شيء, لتوظيف المجلدات المنزل كلها لتكون محافظ لصفحات ويب لكل مستخدم. نفعّل الوحدة userdir:
      كود:
      a2enmod userdir
      بس على شان تفهم كيف تحفظ الامر السابق: a2 = apache2 web server , enmod =enable module
      هناك الكثير من الاوامر تخص خادم الويب اباتشي تبدأ بــ a2 .

      ثم حرر بأي محرر نصي مثل vi او pico ملف اعدادات الاباتشي:

      كود:
      vi /etc/apache2/apache2.conf
      ضع في آخر سطر في الملف على سطر مستقل لوحده ما يلي:
      كود:
      UserDir public
      UserDir disable root
      الكلمة public_html هو اسم مجلد موجود في المجلد المنزل مباشرة. بمعنى لو كان عندك اسم مستخدم اسمه saleem (سليم) , لازم سليم يضع موقعه على الخادم داخل مسار القرص /home/saleem/public_html/ . و التعل...
      23-11-2016, 02:03 AM
    يعمل...
    X