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

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

التعامل مع [ 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


    class MyTable():
        
    def __init__(self):
            
    self.file 'file://'+os.path.join(os.path.abspath(os.curdir),'test3.odt')
            
        
    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 insertTextIntoCell(selftablecellNametextcolor ):
            
    tableText table.getCellByNamecellName )
            
    cursor tableText.createTextCursor()
            
    cursor.CharColor color
            tableText
    .setStringtext )
            
        
    def ct(self):
            
    doc self.dt().loadComponentFromURL"private:factory/swriter","_blank"0, () )
            
    text doc.Text
            cursor 
    text.createTextCursor()
            
    cursor.CharFontName='Liberation Sans'
            
    cursor.gotoEndTrue )
            
    cursor.ParaStyleName "Heading 2"
            
    cursor.setPropertyValue("CharColor"1533403)
            
    cursor.CharUnderline True
            cursor
    .setPropertyValue("ParaAdjust"3)
            
    text.insertString(cursor"جدول يحتوي على ارقام ومجموعها \n\r"0)
            
            
            
            
    table doc.createInstance"com.sun.star.text.TextTable" )
            
    table.initialize3,4)
            
    text.insertTextContentcursortable)
            
    row0 table.Rows.getByIndex(0)
            
    row0.BackColor 1533403
            
            txtcolor 
    16777215
            self
    .insertTextIntoCelltable"A1""العمود الاول"txtcolor )
            
    self.insertTextIntoCelltable"B1""العمود الثاني"txtcolor )
            
    self.insertTextIntoCelltable"C1""العمود الثالث"txtcolor )
            
    self.insertTextIntoCelltable"D1""المجموع"txtcolor )
            
            
    table.getCellByName("A2").setValue(22.5)
            
    table.getCellByName("B2").setValue(5615.3)
            
    table.getCellByName("C2").setValue(-2315.7)
            
    table.getCellByName("D2").setFormula("sum <A2:C2>")

            
    table.getCellByName("A3").setValue(21.5)
            
    table.getCellByName("B3").setValue(615.3)
            
    table.getCellByName("C3").setValue(-315.7)
            
    table.getCellByName("D3").setFormula("sum <A3:C3>")
            
            
    cursor.ParaStyleName "Heading 2"
            
    cursor.setPropertyValue("ParaAdjust"3)
            
    text.insertString(cursor"\n\n دمج الخلايا في الجدول \n\r"0)
            
            
    table2 doc.createInstance"com.sun.star.text.TextTable" )
            
    table2.initialize4,4)
            
    text.insertTextContentcursortable2)
            
    table2.getCellByName('A1').setString('دمج الخليتين A1 & B1')
            
    table2.getCellRangeByName('A1:B1').BackColor 1533403
            table2
    .getCellRangeByName('A1:B1').CharColor 16777215
            cCursor 
    table2.createCursorByCellName('A1')
            
    cCursor.gotoCellByName('A1',False)
            
    cCursor.goRight(1,True)
            
    cCursor.mergeRange()
            
            
    table2.getCellByName('A2').setString('تدوير النص')
            
    aCursor table2.createCursorByCellName('A2')
            
    aCursor.ParaAdjust 3
            aCursor
    .CharRotation=900
            aCursor
    .gotoCellByName('A2',False)
            
    aCursor.goDown(2,True)
            
    aCursor.mergeRange()
            
    doc.storeToURL(self.file,())
            
    doc.dispose()
            
    os.system("pkill soffice")


    if 
    __name__=='__main__':
        
    MyTable()
        
    m.ct() 


    سنذكر الاشياء الجديده في الكود ونتجاوز ماتم شرحه سابقا للاختصار

    كود PHP:
    cursor.CharFontName='Liberation Sans' 
    السطر هذا في الداله ct قمنا باختيار نوع خط Liberation Sans

    كود PHP:
    cursor.ParaStyleName "Heading 2" 
    بالنسبه لحجم الخط يوجد مشكله مع النصوص العربيه فقط في الخاصيه cursor.CharHeight = 20 لذا الطريقه اللتي في الاعلى تفي بالغرض

    كود PHP:
    table doc.createInstance"com.sun.star.text.TextTable" )
    table.initialize3,4)
    text.insertTextContentcursortable)
    row0 table.Rows.getByIndex(0)
    row0.BackColor 1533403 
    السطر الاول إنشاء جدول
    السطر الثاني جعلناه يتكون من 3 صفوف و 4 أعمده
    السطر الثالث ادرجنا الجدول في المستند
    السطر الرابع اخترنا الصف بناء على ترتيبه وهو 0
    السطر الخامس غيرنا لون الخلفيه للصف بالكامل

    كود PHP:
    def insertTextIntoCell(selftablecellNametextcolor ):
        
    tableText table.getCellByNamecellName )
        
    cursor tableText.createTextCursor()
        
    cursor.CharColor color
        tableText
    .setStringtext 
    سنشرح عمل الداله insertTextIntoCell ثم نعود للداله ct
    السطر الاول في الداله insertTextIntoCell تستقبل اسم الجدول واسم الخليه والنص واللون
    السطر الثاني وضعنا متغير يبحث في الجدول بناء على اسم الخليه :
    الخلايا تكون تسميتها في الجدول على ترتيب الحروف الابجديه

    A1 B1 C1
    A2 B2 C2
    A3 B3 C3
    وكل مازادت الخلايا تختار الحرف اللذي بعده وهكذا ( الترتيب الحالي RTL )
    في السطر الثالث أنشاءنا مؤشر للتحكم بالخليه
    في السطر الرابع غيرنا لون النص في الخليه
    في السطر الخامس غيرنا النص الظاهر في الخليه

    كود PHP:
    txtcolor 16777215
    self
    .insertTextIntoCelltable"A1""العمود الاول"txtcolor )
    self.insertTextIntoCelltable"B1""العمود الثاني"txtcolor )
    self.insertTextIntoCelltable"C1""العمود الثالث"txtcolor )
    self.insertTextIntoCelltable"D1""المجموع"txtcolor 
    نعود للداله ct
    السطر الاول لون الخط
    السطور الاخرى اعطينا الداله insertTextIntoCell المدخلات وهي اسم الجدول واسم الخليه والنص ولون النص ليتم وضعها في الجدول

    كود PHP:
    table.getCellByName("A2").setValue(22.5)
    table.getCellByName("B2").setValue(5615.3)
    table.getCellByName("C2").setValue(-2315.7)
    table.getCellByName("D2").setFormula("sum <A2:C2>"
    في السطور الثلاثه الاولى وضعنا قيم عباره عن ارقام بناء على اسم الخليه
    في السطر الاخير وضعنا معادلة جمع ووضعنا مدى الخلايا المراد جمع قيمها من A2 الى C2

    كود PHP:
    table2 doc.createInstance"com.sun.star.text.TextTable" )
    table2.initialize4,4)
    text.insertTextContentcursortable2)
    table2.getCellByName('A1').setString('دمج الخليتين A1 & B1')
    table2.getCellRangeByName('A1:B1').BackColor 1533403
    table2
    .getCellRangeByName('A1:B1').CharColor 16777215
    cCursor 
    table2.createCursorByCellName('A1')
    cCursor.gotoCellByName('A1',False)
    cCursor.goRight(1,True)
    cCursor.mergeRange() 
    في السطور الثلاثه الاولى انشاءنا جدول يتكون من 4 صفوف و 4 اعمده ووضعناه في المستند
    السطر الرابع غيرنا النص في الخليه بناء على اسمها
    السطريت الخامس والسادس حددنا مدى الخلايا ثم قمنا بتغيير لون الخلفيه ولون النص
    السطر السابع انشاءنا مؤشر بناء على اسم الخليه
    السطر الثامن حركنا المؤشر للخليه A1
    السطر التاسع اخبرنا المؤشر اننا سنتجه الى اليمين بمقدار خليه واحده
    السطر العاشر دمجنا الخلايا من مكان توقفنا في السطر الثامن الى المقدار المحدد في السطر التاسع

    كود PHP:
    table2.getCellByName('A2').setString('تدوير النص')
    aCursor table2.createCursorByCellName('A2')
    aCursor.ParaAdjust 3
    aCursor
    .CharRotation=900
    aCursor
    .gotoCellByName('A2',False)
    aCursor.goDown(2,True)
    aCursor.mergeRange() 
    الكود تقريبا مشابه لما سبق سنوضح الاختلافات فقط
    في السطر الرابع قمنا بقلب النص بمقدار 90 درجه ( في الكود تكتب 900 وكذلك استبدل 270 ب 2700 )
    في السطر السادس غيرنا في اتجاه تحركنا للاسفل

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

    التصانيف

    تقليص

    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