-
الكتاب
قام الأخ @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")
# إن حدثت مشاكل أرسل الكود لتشات جي بي تي و أخبره بالخطأ