diff --git a/.gitignore b/.gitignore deleted file mode 100644 index f8b73e7..0000000 --- a/.gitignore +++ /dev/null @@ -1,140 +0,0 @@ -# ---> Python -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ -cover/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ - diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..33b0f12 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +FROM python:3.10 + +# Set the working directory in the container +WORKDIR /app + +# Install poppler-utils for pdf2image +RUN apt-get update && apt-get install -y poppler-utils \ + && apt-get -y install tesseract-ocr + + +# Copy the current directory contents into the container at /app +COPY . /app + +# Install any needed packages specified in requirements.txt +RUN pip install -r requirements.txt + +# Make port 5000 available to the world outside this container +EXPOSE 5000 + +# Run app.py when the container launches +CMD ["python", "app.py"] + diff --git a/app.py b/app.py new file mode 100644 index 0000000..4e6ab0d --- /dev/null +++ b/app.py @@ -0,0 +1,39 @@ +from flask import Flask, request, send_from_directory, abort +import os +from pdf_to_word import pdf_to_word +import logging + +# Configure logging +logging.basicConfig(level=logging.DEBUG, filename='/app/logs/app.log', filemode='w', + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') + +app = Flask(__name__) +UPLOAD_FOLDER = '/app/uploads' +OUTPUT_FOLDER = '/app/outputs' + +if not os.path.exists(UPLOAD_FOLDER): + os.makedirs(UPLOAD_FOLDER) +if not os.path.exists(OUTPUT_FOLDER): + os.makedirs(OUTPUT_FOLDER) + +@app.route('/upload-pdf', methods=['POST']) +def upload_pdf(): + file = request.files['file'] + if file and file.filename.endswith('.pdf'): + pdf_path = os.path.join(UPLOAD_FOLDER, file.filename) + file.save(pdf_path) + logging.info(f'File uploaded and saved to {pdf_path}') + output_path = pdf_to_word(pdf_path, OUTPUT_FOLDER, lang='fas+eng') + if output_path: + logging.info(f'Sending file {output_path}') + return send_from_directory(OUTPUT_FOLDER, os.path.basename(output_path), as_attachment=True) + else: + logging.error('Conversion failed.') + abort(500, 'Conversion failed.') + else: + logging.warning('Invalid file type or no file uploaded.') + abort(400, 'Invalid file type or no file uploaded.') + +if __name__ == '__main__': + app.run(debug=True, host='0.0.0.0', port=5000) + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c56c085 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3.8' + +services: + pdf-converter: + build: . + ports: + - "4000:5000" + volumes: + - ./uploads:/app/uploads + - ./outputs:/app/outputs + - ./logs:/app/logs + + environment: + - FLASK_ENV=development + - FLASK_APP=app.py + - TESSDATA_PREFIX=/app/tessdata diff --git a/logs/pdf_to_word.log b/logs/pdf_to_word.log new file mode 100644 index 0000000..3b5c17e --- /dev/null +++ b/logs/pdf_to_word.log @@ -0,0 +1,318 @@ +werkzeug - WARNING - * Debugger is active! +werkzeug - INFO - * Debugger PIN: 753-842-989 +root - INFO - File uploaded and saved to /app/uploads/np11.pdf +root - INFO - Starting conversion for /app/uploads/np11.pdf +root - INFO - Converted PDF to images, number of pages: 4 +root - DEBUG - Extracted text from page 1 +root - INFO - +------Page 1------ +Van Aarsen + +ماشین‌های پلت مدل ‎C‏ و ‎CU‏ + +نسل جدید ماشین‌های پلت +علاوه بر ماشین پلت ‎LC Joe‏ که امتحان خود را در صنعت خوراک پس داده است. شرکت ‎5B‏ آرسن به‌انازگی مدل جدیدی از ماشین‌های پلت را با +عنوان ‎CU‏ معرفی نموده است:ماشین مدل ‎CU‏ که دارای آخرین تکنولوزی :در ‎die‏ پلت‌سازی می‌باشد:در دو نوع ‎aly‏ وادینامیکی ارائه: شده است: + +نوع دینامیکی ماشین مدل لاح مجهز به تنظیم‌گر غلتک موتوری و کنترل کننده‌ی فعال لغزش غلتک می‌باشد. طراحی مستحکم تنظیم گر غلتک +موتوری به اپراتور این امکان را می‌دهد. تا حتی در زمان کار دستگاه به سادگی فاصله‌ی دلخواه بین غلتک و دای را انتخاب نماید. این سیستم +همراه با نرم افزار هوشمند ‎wot‏ مزایای زیادی را در فرایند ساخت و برنامه‌های تعمیر و نگهداری ارائه می‌کند. + +یکی از این مزایاء افزایش طول عمر دای و غلتک به میزان ۳۰۹۵ است. با ایجاد ارتباط بین پیچ دوزینگ و ‎(SHE‏ زمانی که ماشین پلت تولید نداردء +غلتک به عقب کشیده می‌شود. این سیستم» مجهز به یک گزینه‌ی حالت تمیزکاری دای می‌باشد که اپراتور را قادر می‌سازد پس از ساخت هر @ +دای را تمیز نماید. این امر ‎wile‏ از کلوخه شدن مواد در سطح داخلی دای شده و در نتیجه پس از هر توقف, دستگاه به سرعت به فرایند تولید باز +می‌گردد. + +کنترل کننده‌ی فعال لغزش غلتک. سیستمی هوشمند می‌باشد که به منظور بهینه‌سازی سرعت تولید ماشین پلت طراحی شده است. این سیستم +با شناسایی حرکت لغزشی غلتک به صورت خودکار فعال شده و مانع از خاموشی دستگاه به علت بروز لغزش در غلتک می گردد. + +۹ ارس ‌ژی_وارصوفضی +‎W‏ + +هدف ما سلامتی +نماینده انحصاری در ابران +‎www.ParsJivarSoufi.com‏ +‎PJS@ParsSoufi.com‏ + +تلفن: ۰ ۸۸۰۶۴۴۲۶-۸ + +فکس : ۵ + +------*------ + +root - DEBUG - Extracted text from page 2 +root - INFO - +------Page 2------ +کْوْع» + +VanAarsen + +پلت‌های خوراک دام پس از طی پروسه‌ی آسیاب. مخلوط کردن و فرآوری پخت مواد ‎adsl‏ (کاندیشنینگ»» با قطر و +سختی‌های مختلف تولید می‌شوند. ماشین‌های پلت مدل ۴ و لاح فن آرسن قابلیت تولید خوراک تا ظرفیت ۶۰ تن +بر ساعت را با توجه به پارامترهای مختلف دارا می‌باشد. هزینه‌های عملیاتی این دستگاه‌ها که ‎Joli‏ هزینه‌های دای +غلتک و قطعات در معرض سایش بوده بسیار اندک می‌باشد و می‌تواند تا مقدار یک یورو به ازای هر تن کاهش ‎ab‏ +‏مدل‌ها + +‎as Lon is . nes lock cd .C600 (£500‏ +‎CU900 «ass CU750‏ پایه و ‎CU900XL‏ 4 امکان ساخت ‎pled‏ بخش‌های در تماس با محصول از جنس استیل ضد زنگ + +‏ویزگی ها ومزایا ‎ried‏ استیل - ‎(5S‏ = اختباری + +‏4 سیستم انتقال قدرت دو مرحله‌ای که امکان به کارگیری سوعت‌های مختلف را با + +‏یک موتور فراهم می‌کند +4 تنظیم هیدرولیک غلتک (اختیاری) برای انعطاف پذیری بیشتر و تنظیمات دقیق + +‏فرمول مبتنی بر دستورالعمل + +‎ry 4‏ با کیفیت خوب پات + +‏4 سطح موثر بزرگ دای برای به حداکثر رساندن ظرفیت تولید +۸ و ی ریک سگم یرای پا و رساندن ظرفیت تولید + +‏ظرفیت ‎gon ۹/۳ GE guration oo‏ بر ‎oi wal‏ د کات هام امه ‎us‏ ۴ ا ی +4 دارای قاب - بلیت کنتر ل‌ف رکانس موتور برای تن تنظیم سرعت براساس دستورالعمل محصول ‎ig b‏ ۹ > 2 ۱ (حداکثر ‎Eo pai al a pl‏ +ه. وجود مسیر فرعی در ورودی به منظور جلوگیری از اعمال بار اضافی به دررنگاه ‏ 4 امگان تنظیم میزان چربی ‎SL‏ اختیاری : +۵5 فرع در موارد ترلید ام ‎ie don‏ ۶.۷ ۱ ۱.7 4 بهبود خواص فیزیکی (سختی و پایداری) و شیمیایی (ژلاتینه کردن» حذف میکروب‌های +» وجود مسیر فرعی در موارد تولید مش 63512( شده به منظور بازگردانی آن 1 ۹ ۹ ‎i‏ 1 ”= +به چرخه‌ی ‎Ji‏ ال ‎ok‏ = بیماری زا 9 پلت‌هاء با ایجاد تناسب بین دستورالعمل خوراک 9 ساختار دای +۱ امکان پذیر می‌باشد. + +‎ed 4‏ بالای ماس و وجوه یگ نمایش ۲ اینچی در 4 امکان اضافه نمودن سیستم پاشش مایعات ‎(cascade liquid coater)‏ روی پلت‌های + +‏کنترل اپراتور (صفحه نمایش ‎۹٩‏ اینچیسه اختیاری) +4 امکان مشاهده‌ی این صفحه بر روی یک کامپیوتر در اتاق اپراتور وایا ‎Es)‏ و +4 امکان مشاهده‌ی تغییرات پارامترهای ختلف مانان پار دستگاه» ‎J cles‏ 4 امکان ایزوله ‎oF‏ و ‎L‏ حرارت‌دهی درب دستگاه برای تولید بهداشتی سه اختیاری +ظرفیت دستگاه و ثبت آن‌ها در طول زمان 4 سیستم هوای داغ بهداشتی برای جلوگیری از چگالش و خشک کردن سریع محصولات +پس از تولید سسه اختیاری + +‏داغ سه اختیاری + +‏4 رو اسان وی ترا هی مان انیت ‎BE‏ + +‏4 . کاهش زمان ‎i‏ تسیر وتگهداری بهدلبل ساختا, مستحکم دستگاه 4 طراحی ارگونومیک و کم جاگیر همراه با یک بالابر یکپارچه. جهت تعویض دای +4 روانکاری خودکار یاتاقان‌های غلتشی و بیرینگ‌های شفت اصلی « بالابر موتوری برای دای و غلتک‌ها (برای مدل‌های ‎CU750 «£750 £600 (C500‏ +» سیستم تعویض و جایگذاری سریع دای (زمان تقریبی تعویض دای» ۲۵ دقیقه ‎mn‏ به صورت اختیاری و برای مدل‌های ‎C900XL CU9OOXL ۴1900 C900‏ +می‌باشد) به صورت استاندارد) +4 تکیه‌گاه مخروطی دای به همراه حلقه‌ی نگهدارنده‌ی مقاوم به سایش 4 دسترسی آسان و ایمن از طریق درب بزرگ دستگاه +طراحی و عمر بالا 4 وجود جعبه ابزار برای تعویض ‎lol‏ دای و غلتک‌ها +4 نگهدارنده‌ی دای به همراه تکیه‌گاه حلقه‌ای مقاوم به سایش 4 وجود دستگاه چرخش ‎wal‏ بر روی نگهدارنده‌ی ‎ls‏ برای تعویض و جایگذاری +4 وجود آهنربا در قیف ورودی برای حفاظت از دستگاه اسان و صحیح دای سم اختیاری +4 وجود یک پین که در حالت بیش‌بار» شکسته شده و با قطع جریان مانع از 4 وجود عایق صدا برای دستگاه +بروز آسیب به اجزای دستگاه ‎go‏ شود. 4 طراحی و ساخت دستگاه منطبق بر استانداردهای ایمنی ‎CE‏ و ‎ATEX‏ + +‏طراحی مستحکم و استفاده از مواد باکیفیت در ساخت +4 وجود بیرینگ‌های مستحکم همراه با شفت فورج شده +‎of‏ درب ساخته شده از جنس استیل ضد زنگ (استنلس استیل- 55) به منظور +رد ‎lam sl‏ خوردگی و به حداقل رساندن آلودگی + +‏4 اطلاعات ارائه‌شده در این سند.ء هیچ‌گونه حقی را برای خربدار آبچاد نمی‌کند. توضیحات ۳۳ + + +------*------ + +root - DEBUG - Extracted text from page 3 +root - INFO - +------Page 3------ +VanAarsen + +3ینامیکی علاوه بر ویژگی‌های دستگاه‌های ‎wl CU 3 C Joe‏ دارای مزایای ‎Jd‏ می‌باشد: + +تنظیم گر غلتک موتوری: این تجهیز امکان کاربری آسان دستگاه را به همراه سایش کمتر در دای و غلتک‌ها فراهم کرده +و شرایط فرآوری را برای هر دستورالعمل,ء متناسب با نوع محصول بهینه می‌سازد. + +‎e‏ کنترل کننده‌ی فعال لغزش غلتک: این سیستم» فرآیندی بدون دردسر را در ساخت پلت فراهم آورده و امکان بهینه سازی +فرآیند تولید برای تمامی دستورالعمل‌ها را مهیا می‌نماید. + +‏عملکرد بهینه‌ی مدل ‎CU‏ دینامیکی: حداقل نیروی انسانی و کمترین هزینه‌های عملیاتی + +‏مدل‌ها +‎CU750‏ دینامیکی. 900 دینامیکی و )(900ا دینامیکی +ویژگی‌ها و مزایا ربری آسان و ایمن ۱ +ظرفیت بالا 4 افزایش ‎cols,‏ اپراتور و کاربری آسان + +‎of‏ اسیستم فعال تشخیص لغش غلتکء ‎dy‏ صورت خودکار ‎pile‏ از بروز انسداد @ اعلام هشدار در زمان نیاز به صفر کردن فاصله‌ی بین غلتک‌ها + +‏در دای و کاهش زمان اتلافی ناشی از وقغفه در فرآیند می‌شود. @ اعلام هشدار در زمان نیاز به تنظیم یکی از غلتک‌ها +قابلیت شناسایی بروز لغش فر هریک از غلتک‌ها: @ ‎Ll‏ هدفمند مشکلات دستگاه در زمان بروز خطا. دلایل بروز خطا به +@ پس: از شناسایی لغزش, غلنک‌ها به سمت یکدیگر حرکت کرده» به. تنظیم سرعت مشخص شده و روشی برای حل ارائه می‌شود. +اولیه برگشته و به:اپراتور اطلاع داده می شود عدم ن نیاز به باز ز کردن دستگاه برای رفع مشکلات ‎Of‏ +‏@ در حالت بروز مداوم لغزش» ورود محصول متوقف و به اپراتور هشدار داده می‌شود. نش +4 این سیستم مجهزبه یک گزینه‌ی ‎Cl‏ تمیزکاری دای می‌باشد که اپراتور 4 سیستم تنظیم غلتک مکانیکی از قطعات مکانیکی مستحکمی تشکیل شده +را قادر می‌سازدپس از ساخت هر بچء دای را تمیز تماید. این امر مانع از کلوخه است و امکان بروز آسیب را به حداقل می‌رساند. +شدن مواد در سطح داخلی دای شده و در نتیجه پس از هر ‎(By‏ دستگاه به تمام اجزای سیستم تنظیم غلتک. دارای پوشش آسان تمیزشو بوده که این +سرعت به فرآیند تولید باز می گردد. امر خطر انتقال آلودگی بین بچ‌های مختلف و نیز زمان تمیزکاری را کاهش + +‏4 تنظیم دقیق غلتک‌هاء برای رسیدن به بهترین فاصله‌ی ممکن بین آن‌ها برای +هر دستورالعمل و تنظیمات بهینه به منظور دستیابی به کیفیت مطلوب پلت + +‏4 ۳ فعال لغزش غلتک این امکان را به اپراتور می‌دهد تا به صورت +بی بهثرین فاصله‌ی غلنک‌ها و میزان افزودن بخار به خوراک را به‌منظور + +‏دی ‎SS‏ خوراک و بازده تولید,به :دست آورد. ایراتورها: می توانتد. با + +‏اطمینان از عملکرد این سیستم» تاثیر سایر عوامل را در بهینه‌سازی تولید +بررسی نمایند. + +‏تعویض سریع دای به دلیل وجود سیستم تنظیم خودکار غلتک در زمان تعمیر +« افزایش طول ‎A‏ و غلتک‌ها به میزان ۳۰۹۵ به ‎Jodo‏ عدم تماس مستقیم +فلز با فلز در زمان راه‌اندازی دستگاه +کاهش زمان تمیزکاری به دلیل وجود پوشش آسان تمیز شو در تمامی قطعات +تنظیم غلتک 3 ‎VE WinVNC‏ + +‎Van Aarsen EH 5 +7۲ Ee ng ng [reg Venn 7 + +‎ROLL ADJUSTMENT: + +‎Go to zero [T] +Go to maximum gap [T] +Start zeroing [T] +Disable high speed [T] +Automatic slip prevention +Start cleaning mode 11 + +‎A 3 + +‎[4] nm] +Ea mm + +‏لا لا لا لا ‎OR‏ + +‏4 اطلاعات ارائه‌شده در این ‎aie‏ هیچ‌گونه حقی را برای خربدار ‎dl!‏ نمی‌کند. توضیحات و تصاو + + +------*------ + +root - DEBUG - Extracted text from page 4 +root - INFO - +------Page 4------ +غلتک‌ها تعداد +قطر میلی‌متر +موتور اصلی +‎ 50Hz-1500rpm‏ کیلووات +‎ 60Hz-1800rpm‏ کیلووات + +وزن ‎(Seals Slab‏ کیلوگرم + +۱ +۳ ~~ + +مدل + +C500 +C600 +CU750 - C750 +CU900 - C900 + +C900XL — CU900XL + +مدل + +C500 + +C600 + +CU750 - C750 +CU900 - C900 +C900XL — CU900XL + +C500 +0 +۱۹۰ + +۳۹۸۵ + +۴/۷-۶/ ۰-۷ +۵/۶۷/۲۰ + +3/7 +۸۶-۱۰۳۶ +۴۶۰۰۳۰ + +Y +۳۳۰ + +ابعاد بر حسب میلی‌متر +‎B A‏ +‎VA. ۱۷۳۷۴‏ +‎AYO ۱۵۲‏ +۳۵۰ ۳۰۵ +۵۰ ۲۴۵۷ +۲۱۳/۰ +ابعاد بر حسب میلی‌متر +‎K‏ ۳ +‎yay ۹۵‏ +‎Yo‏ ۱۸۷ +‎Yor‏ ۱۹۲ + +۳۳۵ + +۰ + +۳۳ + +۴/۹۶/۲۴ +۵/۹۵ + +۲ + +۳۸۵ + +۱۶۰ + +۱۱۰-۱۳۳۲- + +۱۳۶۵۳۲ +۵۶۰ + +که + +VanAarsen + +CU900XL CuU900 CU750 +qe. qe. ۷۵۰ +۳۳۵ ۱۷۵-۲۲۵-۵ ۳۵۰ +۹0 ۴۹۵۰-۶۳۶۰۵ OAR +۷/۰-/۴-۴ ۴/۹۷ -۵/۳-۶/۷-۷/۰-0/ ۳۴-۹ /۴ ۰۰۰ ‏۲/عم/۵/۱-۵‎ ۷ +۶/۴-۷/۱-۸/۰-۵ ۶/۴-۷/۱-۸/۰-۵ ۳/۴ +۲ ۲ ۲ +۴۳۵ ۴۳۵ ۳۶۰ +۳۱۵-۳۵۵-۰ ۲۰۰۰-۲۵۰-۳۱۵۵ ۱۳۲-۱۶۰۲۰۰۵۰ +۲۸۵-۳۶۰ -۵ ۳۲۳۸-۲۳۸۵۳۶۰ ۱۵۲-۱۸۴۰ +۱۱۳۵۰ -۰ ۱۳۵ ۷۶۴۵-۰۰ + +1 +‏اک‎ 1 LC +I ۹ +) | +J I H G ۳ +۱۳ ۱۳۰۰ ۱۰۶۰ ۱۴۰ ۱۳۰ +۱۳۵ ۱۳۰۰ ۱۱۶۰ ۱۴۰ Vo. +N52. ۱۵۰ YY. ۰ ۱۳۶۵۰ +YAY. ۱۷۰۰ ۱۳۸۰ ۳ Vero +VAY. ۱۷۰۰ YEA. ۳۳۰ ‏م۳۰‎ + +T S R Q P +BY. ۱۹۶۶ ۱ ۵۵ YY. ۶ +3 Yeo Ye ۶ +‏نما‎ | Yee Yr. ۶ + +ارس ژی_وارصوفضی +هدف ما سلامتی +نماینده انحصاری در ابران +‎www.ParsJivarSoufi.com‏ +‎PJS@ParsSoufi.com‏ + +تلفن : +فکس : + +۸۸۰۶۴۴۲۶-۸ +۵ + + +------*------ + +root - INFO - Document saved to /app/outputs/np11.docx +root - INFO - Sending file /app/outputs/np11.docx +werkzeug - INFO - 172.29.0.1 - - [14/Apr/2024 17:28:51] "POST /upload-pdf HTTP/1.1" 200 - diff --git a/outputs/np11.docx b/outputs/np11.docx new file mode 100644 index 0000000..bc7f38a Binary files /dev/null and b/outputs/np11.docx differ diff --git a/outputs/~$np11.docx b/outputs/~$np11.docx new file mode 100644 index 0000000..1215360 Binary files /dev/null and b/outputs/~$np11.docx differ diff --git a/pdf_to_word.py b/pdf_to_word.py new file mode 100644 index 0000000..4106efb --- /dev/null +++ b/pdf_to_word.py @@ -0,0 +1,46 @@ +import logging +from pdf2image import convert_from_path +import pytesseract +from PIL import Image +import tempfile +from docx import Document +from docx.enum.text import WD_ALIGN_PARAGRAPH +import os + +# Configure logging +logging.basicConfig(level=logging.DEBUG, filename='/app/logs/pdf_to_word.log', filemode='w', + format='%(name)s - %(levelname)s - %(message)s') + +def pdf_to_word(pdf_path, output_dir, lang='eng+fas'): + pdf_name = os.path.basename(pdf_path).split('.')[0] + output_path = os.path.join(output_dir, f'{pdf_name}.docx') + logging.info(f'Starting conversion for {pdf_path}') + + try: + pages = convert_from_path(pdf_path, 300) + logging.info(f'Converted PDF to images, number of pages: {len(pages)}') + + document = Document() + document.add_heading('Document Title', 0) + + for i, page in enumerate(pages): + with tempfile.NamedTemporaryFile(delete=False, suffix='.jpg') as temp_image: + page.save(temp_image.name, 'JPEG') + text = pytesseract.image_to_string(Image.open(temp_image.name), lang=lang, config='--psm 6') + logging.debug(f'Extracted text from page {i+1}') + + heading = document.add_heading(f'Page {i+1}', level=1) + heading.alignment = WD_ALIGN_PARAGRAPH.RIGHT + paragraph = document.add_paragraph(text) + paragraph.alignment = WD_ALIGN_PARAGRAPH.RIGHT + + logging.info("\n------"+f'Page {i+1}'+"------\n"+text+"\n------*------\n") + os.unlink(temp_image.name) + + document.save(output_path) + logging.info(f'Document saved to {output_path}') + return output_path + except Exception as e: + logging.error(f'An error occurred: {e}', exc_info=True) + return None + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2ac04fb --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +Flask +pdf2image +pytesseract +Pillow +python-docx +tqdm diff --git a/tessdata/.DS_Store b/tessdata/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/tessdata/.DS_Store differ diff --git a/tessdata/eng.traineddata b/tessdata/eng.traineddata new file mode 100644 index 0000000..176dc32 Binary files /dev/null and b/tessdata/eng.traineddata differ diff --git a/tessdata/fas.traineddata b/tessdata/fas.traineddata new file mode 100644 index 0000000..326a26e Binary files /dev/null and b/tessdata/fas.traineddata differ diff --git a/uploads/np11.pdf b/uploads/np11.pdf new file mode 100644 index 0000000..ca93e45 Binary files /dev/null and b/uploads/np11.pdf differ