Skip to content

Repository files navigation

עורך מנחם — המרה לטקסט (גרסת פייתון)

כלי עצמאי הממיר קובצי Word (‎.docx) לקובצי טקסט עם תגיות עיצוב בפורמט של אוצריא — שכתוב בפייתון של לוגיקת ההמרה שבתבנית עורך מנחם.dotm (המודול EXPORT_TO_TEXT, הפעולות TAGS_ADDING + SAVE_AS_TEXT).

הכלי אינו זקוק ל‑Word מותקן ותומך בהמרת אצווה של הרבה קבצים בבת אחת.

מה נשמר בהמרה (זהה למאקרו)

בקובץ Word בפלט
סגנונות כותרת 1‑9 <h1>…</h1><h9>…</h9>
מודגש (כתב מורכב) <b>…</b>
נטוי (כתב מורכב) <i>…</i>
קו תחתון <u>…</u>
עילי / תחתי <sup>…</sup> / <sub>…</sub>
גדול יותר מהרגיל <big>…</big>
קטן יותר מהרגיל <small>…</small>
הפניה להערת שוליים <sup>מספר</sup>
הערות השוליים עצמן קובץ נפרד: הערות על <שם>.txt
  • גודל הפונט נמדד יחסית לגודל שמגדירים ("טקסט רגיל" / "הערות רגיל"): גדול יותר → <big>, קטן יותר → <small>, שווה → ללא תגית.
  • מודגש/נטוי/גודל נבדקים לפי מאפייני הכתב המורכב (עברית) — בדיוק כמו BoldBi/ItalicBi/SizeBi שבמאקרו.
  • הפלט: UTF‑8 עם BOM, שורות CRLF, שורה אחת לכל פסקה (שורות ריקות מושמטות).

התקנה

מתקינים את התלויות פעם אחת:

pip install -r requirements.txt

הפעלה (ממשק גרפי)

לוחצים פעמיים על הפעלה.bat, או מריצים:

python app.py

בדיקות אוטומטיות ב-GitHub

הקובץ .github/workflows/tests.yml מריץ את כל הבדיקות בכל push ובכל Pull Request. הוא אינו בונה EXE ואינו נוגע ב-Releases.

בניית EXE נייד ב-GitHub

הקובץ .github/workflows/release.yml רץ בהרצה ידנית בלבד: נכנסים ללשונית Actions, בוחרים Build and release EXE, לוחצים Run workflow, ומזינים מספר גרסה כגון 1.2.3. בסיום ההרצה נוצר Release עם התגית v1.2.3 ועם OrechMenachem_v1.2.3.exe להורדה. עותק נוסף נשמר כ-artifact בשם OrechMenachem-Windows-portable. הזרימה הזו אינה מריצה בדיקות.

מספר הגרסה שמזינים הוא מקור האמת היחיד, וממנו נגזרים שלושה דברים: תגית ה-Release, שם קובץ ה-EXE, ומידע הגרסה שווינדוס מציג במאפייני הקובץ. הסנכרון האחרון נעשה ב-stamp_version.py, שמעתיק את version_info.txt ומחליף בו את שדות הגרסה לפני הבנייה — כך שאי אפשר שיהיה פער בין המספר שבשם הקובץ למספר שבמאפייניו. את version_info.txt עצמו לא צריך לעדכן בכל שחרור; המספר הכתוב בו משמש רק כברירת מחדל לבנייה מקומית.

גודל הקובץ

הבנייה מוגדרת ב-OrechMenachem.spec, שמשאיר בחבילה רק את חלקי Qt ו-lxml שהאפליקציה באמת טוענת — כך ה-EXE שוקל כ-18MB במקום כ-70MB. אין להוסיף --collect-all PyQt5: הוא גורר את כל Qt, כולל Qt5WebEngineCore.dll (97MB), OpenGL בתוכנה וכל התרגומים. שלב האימות בזרימה נכשל אם הקובץ עובר 30MB, כדי שנסיגה כזו לא תעבור בשקט.

אייקון

האייקון מופיע בשלושה מקומות, ולכל אחד מהם מגיע בדרך אחרת:

מקום איך
קובץ ה-EXE בסייר הקבצים משאב של הקובץ — הפרמטר icon ב-OrechMenachem.spec
פס הכותרת של החלון MainWindow.setWindowIcon()
שורת המשימות QApplication.setWindowIcon() + SetCurrentProcessExplicitAppUserModelID

שני האחרונים טוענים את הקובץ בזמן ריצה, ולכן assets/icon.ico נארז גם כקובץ (datas) ולא רק כמשאב — משאב של EXE אינו נגיש דרך נתיב קובץ. ב-onefile הקבצים נפרשים לתיקייה זמנית, ולכן app.resource_path() משתמש ב-sys._MEIPASS. אם הקובץ חסר, התוכנה עולה בלי אייקון ואינה נופלת.

SetCurrentProcessExplicitAppUserModelID נדרש כי בלעדיו ווינדוס מקבץ את החלון תחת המפרש שהריץ אותו ומציג בשורת המשימות את האייקון של python.exe.

יצירת הקובץ מחדש

assets/icon.ico מיוצר מהאיור על ידי make_icon.py, ולא נשמר ביד:

python make_icon.py --source "assets/אייקון לעורך מנחם בפייתון.jpeg"

הכלי עושה שני דברים שעורך תמונות רגיל אינו עושה בקלות:

  • שבעה גדלים (16, 24, 32, 48, 64, 128, 256) בהקטנה מדורגת. ווינדוס מבקש גודל אחר לפי ההקשר, וקובץ שמכיל רק 256×256 מאלץ אותו להקטין בזמן אמת — והתוצאה מרוחה.
  • הסרת הרקע במילוי מהשוליים פנימה בלבד, כך שהלבן שבתוך האיור (דפי הספר) נשאר. האיור הוא JPEG שאינו יכול להכיל שקיפות, ובלי זה האייקון מופיע בשורת המשימות כריבוע לבן.

--keep-background, --no-crop ו---sizes מאפשרים לשלוט בכל שלב.

חתימה דיגיטלית

אם מוגדרים הסודות SIGNING_CERT_BASE64 (תוכן קובץ ה-pfx בקידוד base64) ו-SIGNING_CERT_PASSWORD, הזרימה חותמת את ה-EXE ב-signtool עם SHA256 וחתימת זמן. בלעדיהם הבנייה מצליחה ורושמת אזהרה שהקובץ לא נחתם.

קובץ ה-pfx לא נכנס למאגר — הוא מכיל מפתח פרטי, ומי שמשיג אותו יכול לחתום בשמכם על כל קובץ. .gitignore חוסם *.pfx/*.p12/*.key.

להעלאת התעודה כסוד, מריצים ב-PowerShell מתיקיית הפרויקט:

[Convert]::ToBase64String([IO.File]::ReadAllBytes("certificate.pfx")) |
    Set-Clipboard

ואז נכנסים ל-Settings → Secrets and variables → Actions → New repository secret, שם SIGNING_CERT_BASE64, ומדביקים. אם ל-pfx יש סיסמה, מוסיפים סוד שני בשם SIGNING_CERT_PASSWORD; אם אין לו סיסמה — פשוט לא יוצרים אותו.

עדיף Set-Clipboard על שמירה לקובץ: Out-File בפאוורשל 5.1 כותב UTF-16 עם BOM, ו-BOM שנדבק לתוך הסוד מפיל את הפענוח. (הזרימה מנקה BOM ורווחים בכל מקרה.) קובץ base64 של תעודה הוא מפתח פרטי לכל דבר — base64 אינו הצפנה; .gitignore חוסם *base64* ו-*.b64, וכדאי למחוק אותו אחרי השימוש.

כשמחדשים את התעודה חייבים לעדכן גם את הסוד — אחרת הזרימה תמשיך לחתום (או להיכשל) עם התעודה הקודמת.

הזרימה בודקת את תוקף התעודה לפני החתימה ונכשלת בהודעה מובנת אם היא פגה (signtool עצמו מדווח רק "No certificates were found that met all the given criteria"), ומזהירה אם נותרו לה פחות מ-30 יום.

שימו לב: תעודה עצמית (self-signed) נחתמת בהצלחה אך אינה נאמנת באף מחשב, ולכן ווינדוס ימשיך להציג אזהרת SmartScreen. רק תעודת OV/EV מרשות מוכרת מסירה את האזהרה.

בנייה מקומית

pip install -r requirements.txt "pyinstaller>=6,<7"
python -m PyInstaller --noconfirm --clean OrechMenachem.spec

שלושה משתני סביבה משנים את התוצר: OM_EXE_NAME (שם הקובץ ללא סיומת), OM_VERSION_FILE (מידע גרסה) ו-OM_ICON (אייקון).

בדיקות מקומיות

להרצת הבדיקות המקומית מתקינים את תלויות הפיתוח ומריצים:

pip install -r requirements.txt -r requirements-dev.txt
python -m pytest -q

בממשק:

  1. בחירת קבצים… — בוחרים קובץ אחד או כמה קובצי ‎.docx.
  2. מגדירים גודל טקסט רגיל וגודל הערות רגיל (אפשר ללחוץ "זהה גדלים מהקובץ הראשון" לזיהוי אוטומטי).
  3. אופציונלי: בוחרים תיקיית פלט (ריק = הפלט נשמר ליד קובץ המקור).
  4. לוחצים "המר לטקסט".

לכל קובץ נוצר <שם>.txt, ואם יש הערות שוליים — גם הערות על <שם>.txt.

שימוש משורת הפקודה (אצווה / אוטומציה)

python converter.py "ספר.docx" --normal 16 --notes 14
python converter.py *.docx --normal 11.5 --notes 12 --out "C:\פלט"
דגל משמעות
--normal גודל הטקסט הרגיל (חובה)
--notes גודל ההערות הרגיל
--out תיקיית פלט (ברירת מחדל: תיקיית המקור)
--no-bom שמירה ללא BOM

קבצים

קובץ תפקיד
converter.py מנוע ההמרה (ניתן לייבוא ולהרצה משורת פקודה)
app.py הממשק הגרפי (PyQt5)
הפעלה.bat מפעיל את הממשק בלחיצה כפולה
requirements.txt רשימת התלויות

הערות

  • הכלי מטפל בכיוון הזרימה של Word → טקסט בלבד (כמו TAGS_ADDING+SAVE_AS_TEXT). כפתורי העריכה שבמאקרו (עיצוב ידני, יצירת כותרות וכו') לא נכללו — לפי הבקשה.
  • להבדיל מהמאקרו, שם הקובץ נלקח משם קובץ המקור (ולא מהכותרת הראשונה), כדי שיתאים להמרת אצווה.
  • קובצי ‎.doc ישנים אינם נתמכים ישירות — יש לשמור אותם קודם כ‑‎.docx.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages