تلوين الأكواد في كتاب المستوى المتقدم

  • الكتاب
    قام الأخ @ahmed_elkattan بعمل كتاب جميل للمستوى المتقدم و كذلك للمستوى الأول
    و هذا كتاب المستوى المتقدم

  • و الكتاب رائع جدا و مفيد للغاية ولكن الأكواد ليست ملونة كالمحررات التي نعمل عليها ،

  • وقد حصلت على كود من تشان جي بي تي يمكنه القيام بتلوين الأكواد

  • لكن المشكلة أنه لا يمكنني تشغيله لأني أستعمل تطبيق pydroid3 و هناك مشكلة في تثبيت أحد المكاتب

  • فأرجو ممن يملكون حاسوبا أن يجربوه عندهم

  • سأضع لكم الكود و المكاتب التي يجب تثبيتها أولا

المكاتب

ضع هذا في شاشة التيرمنال لتثبيت المكتبات

pip install pdfplumber pygments fpdf2 beautifulsoup4
  • الكود
    • ملحوظة قمت بتعديل الكود لأن تشات جي بي تي لم يكن يستخرج الصور من الملف فقط النص و حاليا "input.pdf" معرفهاش في السطر الكام لكن في خيار بحث جربه على الVSC
# ملحوظة مهمة جدا في السطر (٢٦) بدل "input.pdf" بمسار الملف للمستوى المتقدم
# أرسل لي إن لم تعرف كيف تحصل على المسار
import pdfplumberimport pdfplumber
import re
from pygments import highlight
from pygments.lexers import PythonLexer  # Change this if needed for a different language
from pygments.formatters import HtmlFormatter
from fpdf import FPDF
from bs4 import BeautifulSoup
from PIL import Image

# Function to highlight code using Pygments
def highlight_code(code_text):
    lexer = PythonLexer()  # Change this to the appropriate language lexer if needed
    formatter = HtmlFormatter(style="colorful", full=True)
    highlighted_code = highlight(code_text, lexer, formatter)
    return highlighted_code

# Convert HTML from Pygments to plain text with colors removed
def html_to_text(html):
    soup = BeautifulSoup(html, 'html.parser')
    return soup.get_text()

# Regex pattern to detect numbered code snippets (e.g., "1. code snippet")
numbered_code_pattern = re.compile(r'^\d+\.\s')

# Initialize PDF output
pdf_output = FPDF()
pdf_output.add_page()
pdf_output.set_font("Arial", size=12)

# Open the original PDF and process each page
with pdfplumber.open("input.pdf") as pdf:
    for page in pdf.pages:
        # Extract text from the page
        page_text = page.extract_text()
        
        # Process each line of text on the page
        for line in page_text.splitlines():
            # If line is a numbered code snippet
            if re.match(numbered_code_pattern, line):
                highlighted = highlight_code(line)
                pdf_output.multi_cell(0, 10, html_to_text(highlighted))
            else:
                pdf_output.multi_cell(0, 10, line)
        
        # Extract and add images from the current page
        for image_obj in page.images:
            # Get the bounding box for the image
            x0, top, x1, bottom = image_obj["x0"], image_obj["top"], image_obj["x1"], image_obj["bottom"]
            width, height = x1 - x0, bottom - top
            
            # Extract the image
            image = page.within_bbox((x0, top, x1, bottom)).to_image(resolution=150).to_pil()
            
            # Save image temporarily to add it to the PDF
            image.save("temp_image.png", "PNG")
            
            # Calculate placement in the new PDF
            pdf_output.image("temp_image.png", x=x0 / 4, y=pdf_output.get_y() + 5, w=width / 4, h=height / 4)
            pdf_output.ln(height / 4)  # Move down after adding image

# Save the modified PDF with text and images
pdf_output.output("output_highlighted_with_images.pdf")
# إن حدثت مشاكل أرسل الكود لتشات جي بي تي و أخبره بالخطأ
إعجابَين (2)

جميل شكرا لك على هذه المشاركة والتعديل الرائع على الكتاب
احسنت في المشاركة

إعجابَين (2)

أخي بما أنك تستعمل pydroid 3
كيف يمكن التحكم في،ابعاد الشاشة ولونها
عند تحرك المضرب الى اليمين او اليسار لا تظهر لي لوحة التحكم فما الحل لو سمحتم

3 إعجابات

للأسف لم أصل لهذه الوحده حتى الآن جرب تسأل تشات جي بي تي
أو تشوف منتدي لتطبيق pydroid3

أو في ناس بتقول انهم بيستخدموا ريبلت دور على اليوتيوب

إعجاب واحد (1)

جربت replit و اشتغل معي بكفائة مثل الVSC تقريبا
جربه في هذا المشروع فحسب

إعجابَين (2)