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

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

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

تقليص
X
تقليص

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

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

    اليوم إن شاء الله سنشرح التالي :

    • التحكم بخصائص النص العربي
    • إدراج صوره
    • إدراج إطار
    • اختيار الطابعه وتغيير خصائص الطباعه ثم طباعة المستند


    الكود :

    كود PHP:
    #!/usr/bin/python3
    #-*- coding utf-8 -*-


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


    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 mprinter(self doc):
            
    '''
            index name <> value
            d[0] Name <> PDF
            d[1] PaperOrientation <> '
    PORTRAIT'
            d[2] PaperFormat <> '
    A4'
            d[3] PaperSize (com.sun.star.awt.Size){ Width = (long)0x2e7b, Height = (long)0x41c6 }
            d[4] IsBusy False
            d[5] CanSetPaperOrientation True
            d[6] CanSetPaperFormat False
            d[7] CanSetPaperSize True
            '''
            
    lp = []
            for 
    i in os.popen('lpstat -p').readlines():
                if 
    i.startswith('printer'):
                    
    lp.append(i.split(' ')[1])
            
    dp os.popen('lpstat -d').read().split(' ')[-1].strip()
            print(
    'Default Printer : %s ' %dp)
            print(
    'you have (%d) printers choose number from list :' %len(lp))
            
    ch 0
            
    for i in lp:
                print(
    '%d- %s' %(ch,i))
                
    ch ch 1
            mc 
    input('')
            if 
    mc:
                
    d=doc.getPrinter()
                
    d[0].Value=lp[int(mc)]
                
    doc.setPrinter(d)

            
    cc PropertyValue()
            
    cc.Name 'CopeCount'
            
    cc.Value '2'
            
    PropertyValue()
            
    p.Name 'Pages'
            
    p.Value '1-2,5'
            
    opi = (cc,p)
            
    doc.print(opi)

        
    def ct(self):
            
    doc self.dt().loadComponentFromURL"private:factory/swriter","_blank"0, () )
            
    text doc.Text
            cursor 
    text.createTextCursor()
            
    cursor.gotoEndTrue )
            
    cursor.CharFontNameComplex 'KacstOne'
            
    cursor.CharHeightComplex 18
            cursor
    .CharWeightComplex 150
            cursor
    .ParaAdjust 3
            text
    .insertString(cursor'إدراج صورة \n\r',0)

            
    # insert image
            
    gra doc.createInstance('com.sun.star.text.GraphicObject')
            
    gra.GraphicURL 'file:///home/mjlad/Pictures/d.png'
            
    gra.setSize(Size(10000,5000))
            
    gra.AnchorType =  # AS_CHARACTER
            
    cursor.ParaAdjust 3
            text
    .insertTextContent(cursor,gra,False)
            
    text.insertString(cursor,'\n\r' ,0)

            
    # insert frame
            
    TF doc.createInstance"com.sun.star.text.TextFrame" )
            
    TF.setSizeSize(15000,400))
            
    TF.AnchorType =  # AS_CHARACTER
            
    TF.BackColor 1533403
            text
    .insertTextContentcursorTF)
            
    TTF TF.getText()
            
    CTTF TTF.createTextCursor()
            
    CTTF.CharFontName 'Amiri'
            
    CTTF.CharColor 16777215
            CTTF
    .ParaAdjust 3
            TTF
    .insertStringCTTF"Frame  \n")
            
    text.insertString(cursor'\n\r'0)
            
    self.mprinter(doc)
    if 
    __name__=='__main__':
        
    MyDocument()
        
    m.ct() 
    بخصوص التحكم بالنص العربي كنت اعتقد انه توجد مشكله مع النص العربي في بعض الخصائص ولكن الحمد لله كنت مخطئ هذه الاسطر في الداله ct

    كود PHP:
    cursor.CharFontNameComplex 'KacstOne'
    cursor.CharHeightComplex 18
    cursor
    .CharWeightComplex 150 
    أي من الخصائص اللتي تنتهي ب Complex فهي للنص العربي
    في الاعلى اخترنا نوع الخط ثم حجم الخط ثم عرض الخط

    كود PHP:
    gra doc.createInstance('com.sun.star.text.GraphicObject')
    gra.GraphicURL 'file:///home/user/Pictures/d.png'
    gra.setSize(Size(10000,5000))
    gra.AnchorType =  # AS_CHARACTER
    cursor.ParaAdjust 3
    text
    .insertTextContent(cursor,gra,False
    إدراج الصوره
    في السطر الاول أنشائنا كائن يتعامل مع الصور
    السطر الثاني حددنا رابط الصوره في الجهاز
    السطر الثالث حددنا العرض والارتفاع للصوره داخل الصفحه
    السطر الرابع حددنا نوع الارساء AS_CHARACTER
    السطر السادس ادرجنا الصوره في المستند



    كود PHP:
    TF doc.createInstance"com.sun.star.text.TextFrame" )
    TF.setSizeSize(15000,400))
    TF.AnchorType =  # AS_CHARACTER
    TF.BackColor 1533403
    text
    .insertTextContentcursorTF)
    TTF TF.getText()
    CTTF TTF.createTextCursor()
    CTTF.CharFontName 'Amiri'
    CTTF.CharColor 16777215
    CTTF
    .ParaAdjust 3
    TTF
    .insertStringCTTF"Frame  \n"
    إدراج إطار
    السطر الاول أنشائنا كائن إطار
    السطر الثاني حددنا العرض والارتفاع
    السطر الخامس ادرجنا الاإطار في المستند
    السطر السابع انشانا مؤشر للإطار
    السطر الاخير ادرجنا نص داخل الاطار

    كود PHP:
    self.mprinter(doc
    في السطر هذا استدعينا داله mprinter

    كود PHP:
    lp = []
    for 
    i in os.popen('lpstat -p').readlines():
        if 
    i.startswith('printer'):
            
    lp.append(i.split(' ')[1])
    dp os.popen('lpstat -d').read().split(' ')[-1].strip()
    print(
    'Default Printer : %s ' %dp)
    print(
    'you have (%d) printers choose number from list :' %len(lp))
    ch 0
    for i in lp:
        print(
    '%d- %s' %(ch,i))
        
    ch ch 1
    mc 
    input('')
    if 
    mc:
        
    d=doc.getPrinter()
        
    d[0].Value=lp[int(mc)]
        
    doc.setPrinter(d
    إن كنت تلك طابعه واحده يمكنك الاستغناء عن هذه السطور
    هذه الاسطر من الداله mprinter إن كنت تمتلك اكثر من طابعه ستساعدك هذه الاسطر في اختيار الطابعه اللتي تريد استخدامها شريطة ان تكون معرفه على نظامك
    قمنا بعمل قائمه اسمها lp ثم نفذنا الامر lpstat -p على النظام وناتج هذا الامر الطابعات المعرفه على النظام وقمنا بعمل تصفيه لنستخرج اسم الطابعات من بين السطور الناتجه ثم وضعنا الناتج في القائمه lp
    المتغير dp ياخذ ناتج الامر lpstat -d وهو اسم الطابعه الافتراضيه للنظام
    بعد ذلك قمنا بطباعة اسم الطابعه الافتراضيه ثم عدد الطابعات المتوفره للاستخدام وطلبنا اختيار طابعه من القائمه وجعلنا ناتج الاختيار في المتغير mc
    بعد التحقق من mc نقوم بنسخ الاعدادات الافتراضيه للطابعه في المتغير d وضعت قائمه بالاعدادات في اعلى الداله ثم غيرنا اسم الطابعه بناء على اختيارك من قائمة الطابعات lp بعد ذلك قمنا بإعادة ضبط الطابعه بناء على المتغير d في السطر الاخير

    كود PHP:
    cc PropertyValue()
    cc.Name 'CopeCount'
    cc.Value '2'
    PropertyValue()
    p.Name 'Pages'
    p.Value '1-2,5'
    opi = (cc,p)
    doc.print(opi
    انشأنا متغير cc يحتوي على خاصية عدد النسخ المطبوعه
    انشأنا متغير p يحتوي على الصفحات المراد طباعتها


    ان كنت تريد طباعة المستند بالطابعه الافتراضيه وبالاعدادات الافتراضيه فقط نفذ هذا الامر

    كود PHP:
    doc.print(()) 
    هذا مالدي واسال الله لي ولكم والتوفيق
      لا يمكن إضافة تعليقات.

    التصانيف

    تقليص

    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