diff --git a/.DS_Store b/.DS_Store index 2abf7db..a39e758 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6ce2b26 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,24 @@ +**/__pycache__ +**/*.pyc +**/*.pyo +**/*.pyd +**/.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST +**/.pytest_cache +**/.vscode +**/.idea +**/*.log diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..19267ba --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +uploads +callbacks +logs +outputs +.env diff --git a/Dockerfile b/Dockerfile index 33b0f12..f9478a0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,26 @@ -FROM python:3.10 +# Use an official Python runtime as a parent image +FROM python:3.10-slim # 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 +# Install system dependencies +RUN apt-get update && apt-get install -y \ + poppler-utils \ + tesseract-ocr \ + && rm -rf /var/lib/apt/lists/* +# Copy only the files necessary for pip installations +COPY requirements.txt . -# Copy the current directory contents into the container at /app -COPY . /app +# Install Python dependencies +RUN pip install --upgrade pip && pip install -r requirements.txt watchdog -# Install any needed packages specified in requirements.txt -RUN pip install -r requirements.txt +# Copy the rest of the application +COPY . . # Make port 5000 available to the world outside this container EXPOSE 5000 -# Run app.py when the container launches +# Run the app using Python directly CMD ["python", "app.py"] - diff --git a/app.py b/app.py index 4e6ab0d..b3dd46f 100644 --- a/app.py +++ b/app.py @@ -1,39 +1,125 @@ -from flask import Flask, request, send_from_directory, abort +from flask import Flask, request, send_from_directory, jsonify, abort import os -from pdf_to_word import pdf_to_word import logging +import requests +from pdf_to_word import pdf_to_word_txt, pdf_to_word_docx +from datetime import datetime +from threading import Thread -# Configure logging -logging.basicConfig(level=logging.DEBUG, filename='/app/logs/app.log', filemode='w', +# Set up logging +logging.basicConfig(level=logging.INFO, filename='/app/logs/app.log', filemode='w', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') +# Configure specific logger for potentially noisy libraries or modules +watchdog_logger = logging.getLogger('watchdog') +watchdog_logger.setLevel(logging.ERROR) # Show only errors from watchdog + app = Flask(__name__) UPLOAD_FOLDER = '/app/uploads' OUTPUT_FOLDER = '/app/outputs' +CALLBACK_FOLDER = '/app/callbacks' if not os.path.exists(UPLOAD_FOLDER): os.makedirs(UPLOAD_FOLDER) if not os.path.exists(OUTPUT_FOLDER): os.makedirs(OUTPUT_FOLDER) +if not os.path.exists(CALLBACK_FOLDER): + os.makedirs(CALLBACK_FOLDER) + + + + + +def process_pdf_in_background(pdf_path, output_folder, callback_url=None): + try: + # Convert PDF to text (assuming you have a function that does this) + output_path = pdf_to_word_docx(pdf_path, output_folder) + + if output_path and callback_url: + with open(output_path, 'rb') as f: + files = {'file': (os.path.basename(output_path), f)} + response = requests.post(callback_url, files=files) + response.raise_for_status() + + except Exception as e: + logging.error(f'Background processing error: {e}', exc_info=True) + +def start_background_task(target, *args): + thread = Thread(target=target, args=args) + thread.start() @app.route('/upload-pdf', methods=['POST']) def upload_pdf(): file = request.files['file'] + callback_url = request.form.get('callback_url') if file and file.filename.endswith('.pdf'): - pdf_path = os.path.join(UPLOAD_FOLDER, file.filename) + + pdf_filename = os.path.splitext(file.filename)[0] + '_' + datetime.now().strftime("%Y%m%d_%H%M%S") + '.pdf' + pdf_path = os.path.join(UPLOAD_FOLDER, pdf_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.') + logging.info(f'PDF uploaded and saved to {pdf_path}') + + # Start the PDF processing in a background thread + start_background_task(process_pdf_in_background, pdf_path, OUTPUT_FOLDER, callback_url) + + # Respond immediately + return jsonify({'message': 'File upload accepted, processing started'}), 202 + else: - logging.warning('Invalid file type or no file uploaded.') - abort(400, 'Invalid file type or no file uploaded.') + logging.warning('Invalid file upload attempt') + abort(400, 'Invalid file type or no file uploaded') + + + + + +# @app.route('/upload-pdf', methods=['POST']) +# def upload_pdf(): +# file = request.files['file'] +# callback_url = request.form.get('callback_url') +# if file and file.filename.endswith('.pdf'): + +# pdf_filename = os.path.splitext(file.filename)[0] + '_' + datetime.now().strftime("%Y%m%d_%H%M%S") + '.pdf' +# pdf_path = os.path.join(UPLOAD_FOLDER, pdf_filename) +# file.save(pdf_path) + +# logging.info(f'PDF uploaded and saved to {pdf_path}') + +# # Convert PDF to text +# #output_path = pdf_to_word_txt(pdf_path, OUTPUT_FOLDER) +# output_path = pdf_to_word_docx(pdf_path, OUTPUT_FOLDER) +# if output_path: +# logging.info(f'Text file created at {output_path}') +# if callback_url: +# try: +# with open(output_path, 'rb') as f: +# files = {'file': (os.path.basename(output_path), f)} +# response = requests.post(callback_url, files=files) +# response.raise_for_status() # Will raise an HTTPError for bad requests +# return jsonify({'message': 'File processed and sent successfully'}), 200 +# except requests.exceptions.RequestException as e: +# logging.error(f'Failed to send file to callback URL: {e}') +# abort(500, 'Failed to send file to callback URL') +# else: +# return send_from_directory(OUTPUT_FOLDER, os.path.basename(output_path), as_attachment=True) +# else: +# logging.error('Failed to convert PDF') +# abort(500, 'Conversion failed') +# else: +# logging.warning('Invalid file upload attempt') +# abort(400, 'Invalid file type or no file uploaded') + +@app.route('/callback', methods=['POST']) +def callback(): + file = request.files['file'] + if file: + filepath = os.path.join(CALLBACK_FOLDER, file.filename) + file.save(filepath) + logging.info(f'File received and saved at {filepath}') + return jsonify({'message': 'File received and saved successfully'}), 200 + else: + logging.error('No file received at callback') + abort(400, 'No file received') if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=5000) - diff --git a/celery_worker.py b/celery_worker.py new file mode 100644 index 0000000..e69de29 diff --git a/converted.docx b/converted.docx new file mode 100644 index 0000000..5641e6f --- /dev/null +++ b/converted.docx @@ -0,0 +1,116 @@ +9 +9 که +‎[Cd‏ +‎VanAarsen im joss f‏ +هدف ساء ‎The vital link to your feed chain mst‏ +‎p‏ : و : اس ۰ ۳ +‎th, na " 7 8‏ - +‎re‏ 1 ۰ و مه +‎f ۰ i : = 9‏ +از بخ و ی +اش ‎ok‏ رو +‎er AW Ed 4‏ ۱ +‎J‏ ی 7 ‎A‏ ات ۸ ۱ : ام ۴۲ ۳ +‎IE © x= 4 al 8‏ +‎A‏ 3 و !22 ‎Li SE.‏ ( +0 و \ 11 > ‎a > ۵ Ss ۸ : = “a‏ موم £ +چگونگی افزایش بازده ‎Claw! aul yd‏ و کاهش هزینه‌های آن +در این مقاله به معرفی دستگاه آسیاب چکشی مدل ‎GD‏ شرکت فن آرسن باقابلیت سیستم تعویض خودکار الک +و کنترل فرکانس موتور پرداخته می‌شود. این دستگاه راه‌حلی ایده آل برای دستیابی به فرآیند آسیاب بهینه و +آسیاب‌های چکشی جهت آسیاب مواد اولیه خوراک دام به کار برده می‌شوند. مواد ‎adsl‏ وارد شده به دستگاه آسیاب +چکشی در برخورد با چکش‌های خردکن که با سرعت بالایی در حال چرخش هستند» به ذرات کوچک‌تری تبدیل +می‌شوند. بازده فرآیند آسیاب به متغیرهای مختلفی مانند نحوه طراحی صفحات 59,5( سرعت نوک چکش‌ها و +صفحات الک بستگی دارد. +شرکت فن آرسن آسیاب چکشی دارای صفحات خردکن را اولین بار ۶۵ سال پیش طراحی نمود. آسیاب‌های +چکشی جدید این شرکت به صفحات خردکن بزرگ‌تری در بخش بالایی محفظه آسیاب مجهز شده‌اند. این امر +منجر به افزایش دفعات برخورد ذرات به این صفحات می‌شود. امروزه این طراحی به‌عنوان یک روش بسیار مور +برای دستیابی به کیفیت بالا و آسیاب سریع محصولات در نظر گرفته می‌شود. ذرات با برخوردهای متعدد به +تلفشن: ۲۶-۸ ۶۶ ۰۶ ‎AN‏ +‎ol pg‏ خیابان سید جمال ‎orl‏ اسد آبادی, خیابان هفتاد و دوم. پلاک ۰۲ واحد ۳ کدپستی: ۱۶۲۶۹۶۵۱۶۸ فاکس: ۵ ۰۶ ‎AN‏ + +> 9 ان +‎[Cg‏ +‏سارس‌ژی_وارصوفسی ‎VanAarsen‏ +‎sd‏ ما سلامتسی ‎The vital link to your feed chain‏ +دستگاه خارج می‌شوند. این نوع از ‎bo hb‏ پیشگیری از چرخش ‎(Circulation)‏ ذرات خرد شده در داخل +محفظه دستگاه از کاهش بازده دستگاه و افزایش خاکه شدن محصول جلوگیری به عمل می‌آورد. عمر طولانی‌تر +صفحات الک و چکش‌ها از دیگر مزایای این دستگاه است. +اندازه و تعداد سوراخ‌های صفحات الک +و فضای باز (تعداد سوراخ‌ها) صفحات الک. تعیین کننده اندازه ‎(ld‏ ناهمگنی ذرات و ظرفیت دستگاه است. +هرچقدر که اندازه سوراخ‌های صفحات الک بزرگ‌تر ‎wil‏ محصول درشت‌تر خواهد بود و به هر میزان که ‎lad‏ +‏باز ‎slows)‏ سوراخ‌ها) بیشتر باشد ظرفیت آسیاب افزایش می‌یاید. +علاوه بر اندازه سوراخ‌های صفحات الک. سرعت نوک چکش‌ها نیز در تعیین اندازه ذرات نقش مهمی دارد. سرعت +بیشتر چرخش نوک چکش‌ها یعنی اصابت بیشتر ذرات به صفحات خردکن و درنتیجه آسیاب بهتر محصولات. +سرعت کمتر نوک چکش‌ها منجر به آسیاب شدن ذرات در اندازه درشت‌تر می‌شود. در چنین شرایطی ظرفیت +آسیاب چکشی به میزان قابل‌توجهی کاهش می‌یابد. لازم به ذکر است که پارامتری به‌عنوان سرعت ایده آل برای +سرعت نوک چکش‌ها وجود ندارد؛ این سرعت باید بر مبنای نوع مواد ‎adsl‏ و محصول نهایی تنظیم شود. سرعت +چرخش نوک چکش‌ها می‌تواند توسط کنترل فرکانس موتور دستگاه تنظیم شود که این خود باعث بهبود فرآیند +آسیاب می‌شود. +انتخاب مناسب صفحات الک در استفاده مداوم و سرعت چرخش نوک چکش‌ها جهت افزایش کیفیت +محصول. کاهش زمان فرآیند آسیاب و مصرف کم انرژی +می‌توان با مدیریت دقیق در استفاده از چندین صفحه الک (با سایزهای سوراخ مختلف) به محصول با کیفیت بالا +به همراه افزایش سرعت ‎REA‏ آسیاب 9 مصرف کم انرژی دست یافت. شرکت فن آرسن سیستم تعویض خودکار +الک باقابلیت نگهداری ۳ مدل الک را پیشنهاد می‌دهد. با توجه به دستورالعمل خوراک. سیستم تعویض الک +به‌صورت خودکار صفحه الک مناسب را در داخل دستگاه آسیاب چکشی قرار می‌دهد؛ بنابراین زمان تعویض الک +از ۲۰ دقیقه به ۱ دقیقه کاهش می‌یابد. این امر موجب افزایش ظرفیت ‎ade‏ و ‎als‏ هزینه‌های نیروی کار +‎EE ۲۶-۸ —‏ ۰۶ ۸۸ + +9 +‎Cd 9‏ +‎CS‏ +‏ارس‌ژی_وارصوفی ‎Van Aarsen‏ +‎mt tl‏ سلامتشی ‎The vital link to your feed chain‏ +می‌شود. برای انعطاف پذیری بیشترء امکان استفاده از یک سیستم تعویض خودکار صفحه الک همراه با یک +کنترل‌گر فرکانس که سرعت نوک چکش را تنظیم می‌کند.ء وجود دارد. با تنظیم سرعت نوک چکش متناسب با +صفحات ‎«SUI‏ امکان انتخاب تنظیمات ایده ‎JT‏ برای دستیابی به اندازه مناسب ذرات همراه با حفظ ظرفیت در حد +دلخواه و صرفه جویی در مصرف انرژی فراهم می‌گردد. مصرف انرژی آسیاب چکشی مدل ‎BD‏ شرکت فن آرسن +تقریباً برأبر ۷ کیلو ‎lg‏ ساعت بر تن است که این مقدار پایین یکی از ویژگی‌های این دستگاه محسوب می‌شود. +سریع‌تر و کاهش اندازه +۱ ۱ بالاتر پایین‌تر +ذرات موْثرتر +تعیین کننده اندازه ذرات و ۱ به منظور دستیابی به کیفیت و ظرفیت بهینه. +تغییرات ذرات صفحه الک و سرعت نوک چکش بایستی با هم +‎politi‏ پاشند, +هرچه سرعت نوک چکش +بیشتر ‎cal‏ اندازه ذرات در هنگام تولید دستورالعمل‌های متفاوت. بان + +‎Fowl‏ +‏کوچک‌تر خواهد بود و با بالاترین ظرفیت ‎BB‏ دستیابی برای یک +کاهش سرعت. اندازه ذرات ۱ کیفیت مشخص با ترکیب سیستم تعویض +درشت‌تر خواهد شد. خودکار الک و سیستم کنترل سرعت نوک +چکش از طریق فرکانس ‎JB‏ دستیایی است. +طراحی هوشمند و هزینه تعمیر و نگهداری پایین +علاوه بر فاکتورهای ذکر شده» کیفیت و موقعیت قرارگیری چکش‌هاء دستگاه تغذیه و سیستم مکش هوا بر عملکرد +‎oll‏ چکشی تأثیرگذارند. به ‎Ls‏ طراحی هوشمند.ء آسیاب چکشی مدل ‎GD‏ در تمامی این ‎baie;‏ دارای +* یکی از ‎slo Shy‏ منحصربه‌فرد آسیاب‌های چکشی فن آرسن امکان چرخش يا تعویض سریع و آسان +تلفضن: ۲۶-۸ ‎EE‏ ۸۸۰۶ +‎(ol us‏ خیابان سید جمال ‎(pall‏ اسد آبادی, ‎bla‏ هفتاد و دوم پلاک ۲. واحد ۳.کدپستی: ۱۶۳۶۹۶۵۱۶۸ فاکس: ۶۵ ۰۶ ‎AN‏ + +9 ۳۳ +‎Cl‏ +‏)مس ‎VanAarsen‏ +‏هدف ساء سلامتشی ‎The vital link to your feed chain‏ +© نوع طراحی چکش‌هاء سطح تماس و در نتیجه بازده آسیاب را افزایش می‌دهد. فاصله بین چکش‌ها و +صفحات الک برابر ‎YO‏ میلی‌متر است. این امر موجب پیشگیری از چرخش ‎(Circulation)‏ محصول در +محفظه آسیاب و در نتیجه هدر رفت انرژی می‌شود. +@ _چکش‌های مورد استفاده برای آسیاب چکشی ‎GD‏ بسیار مستحکم بوده و دارای عمر طولانی می‌باشند. +تنها در هنگام خوردگی هر ۴ طرف چکش‌ها نیاز به تعویض آن‌ها می‌باشد. این امر در ترکیب با وجود +صفحات خردکن که موجب کاهش خوردگی دستگاه ‎cig oo‏ هزینه چکش‌ها را تا مقدار ۲ سنت ‎lil‏ +‏هر تن خوراک کاهش می‌دهد. +@ دستگاه تغذیه می‌بایست یک جریان روان از مواد ‎adsl‏ را برای آسیاب فراهم نماید. به دلیل تفاوت +ویژگی‌های مواد مختلف در آسیاب, وجود سیستم. کتترل فرکانس روی دستگاه 43005 آسیاب. ‎eel‏ +‏صحیح مواد را تضمین می‌کند. +* مطابق استاندارد و به منظور افزایش ایمنی و طول عمر صفحات الک دستگاه تغذیه مجهز به یک آهنربا +و جدا کننده ذرات ستگین می‌باشد. +به دلیل طراحی کم جاگیر آسیاب چکشی مدل ‎GD‏ امکان استفاده از این دستگاه در کارخانه‌های جدید و نیز در +حال کار فراهم است. +آسیاب: یک مرحله مهم در فرآیند +فرآیند تولید خوراک تأثیر زیادی بر ارزش غذایی خوراک دام دارد. عمل آسیاب در این فرآیند تأثیر زیادی بر +کیفیت پلت تولیدی و نیز قابلیت هضم خوراک دارد. کاهش اندازه مواد ‎adsl‏ موجب افزایش تعداد ذرات و سطح +بر واحد حجم شده که این امر موجب بهبود همگنی در فرآیند میکس می‌شود. علاوه بر ‎ol‏ کاهش اندازه ذرات +به ژلاتینه شدن نشاسته کمک کرده و باعث بهبود کیفیت پلت و افزایش ظرفیت دستگاه پلت می‌شود. +اطلاعات بیشتر +شرکت فن آرسن توسعه دهنده» سازنده و ‎els‏ کننده ماشین‌آلات به‌روز و ارائه دهنده راهکارهای اجرایی کارخانه +خوراک جهت تولید خوراک دام و پرمیکس در سراسر ‎Lid‏ می‌باشد. اطلاعات بیشتر از دستگاه آسیاب چکشی مدل +‎GD‏ و سیستم تعویض خودکار الک در ‎Sid‏ زیر موجود است: +‎www.aarsen.com/machines/hammer-mills/‏ +‎whys‏ خیابان سید جمال الدین اسد آبادی, خیابان هفتاد و دوم پلاک ۰۲ واحد ۳.کدپستی: ۱۶۳۶۹۶۵۱۶۸ ‎x 1 ch fis a‏ diff --git a/docker-compose.yml b/docker-compose.yml index c56c085..50cf6f5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,16 +1,20 @@ -version: '3.8' +version: "3.8" services: pdf-converter: - build: . + build: + context: . + dockerfile: Dockerfile ports: - "4000:5000" volumes: - ./uploads:/app/uploads - ./outputs:/app/outputs - ./logs:/app/logs - + - .:/app environment: - FLASK_ENV=development - FLASK_APP=app.py - TESSDATA_PREFIX=/app/tessdata + command: > + sh -c "watchmedo auto-restart --directory=./ --pattern=*.py --recursive -- python app.py" diff --git a/logs/app.log b/logs/app.log new file mode 100644 index 0000000..0eeac6e --- /dev/null +++ b/logs/app.log @@ -0,0 +1,6 @@ +2024-04-15 15:08:16,260 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://192.168.192.2:5000 +2024-04-15 15:08:16,261 - werkzeug - INFO - Press CTRL+C to quit +2024-04-15 15:08:16,272 - werkzeug - INFO - * Restarting with watchdog (inotify) diff --git a/logs/pdf_to_word.log b/logs/pdf_to_word.log index 3b5c17e..2cd6ef0 100644 --- a/logs/pdf_to_word.log +++ b/logs/pdf_to_word.log @@ -1,318 +1,116 @@ -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 - +2024-04-15 15:52:22,961 - werkzeug - WARNING - * Debugger is active! +2024-04-15 15:52:22,964 - werkzeug - INFO - * Debugger PIN: 134-865-457 +2024-04-15 15:52:49,089 - root - INFO - PDF uploaded and saved to /app/uploads/sample_input_20240415_155249.pdf +2024-04-15 15:52:49,094 - werkzeug - INFO - 192.168.208.1 - - [15/Apr/2024 15:52:49] "POST /upload-pdf HTTP/1.1" 202 - +2024-04-15 15:52:49,743 - root - INFO - Converted PDF to images, number of pages: 1 +2024-04-15 15:52:53,031 - root - INFO - PDF uploaded and saved to /app/uploads/sample_input_20240415_155253.pdf +2024-04-15 15:52:53,036 - werkzeug - INFO - 192.168.208.1 - - [15/Apr/2024 15:52:53] "POST /upload-pdf HTTP/1.1" 202 - +2024-04-15 15:52:53,727 - root - INFO - Converted PDF to images, number of pages: 1 +2024-04-15 15:52:54,146 - root - INFO - ------Page 1------ -Van Aarsen +9 که +‎Van/Xarsen mb fmf‏ -ماشین‌های پلت مدل ‎C‏ و ‎CU‏ +هدف ‎hs‏ سلامتشی -نسل جدید ماشین‌های پلت -علاوه بر ماشین پلت ‎LC Joe‏ که امتحان خود را در صنعت خوراک پس داده است. شرکت ‎5B‏ آرسن به‌انازگی مدل جدیدی از ماشین‌های پلت را با -عنوان ‎CU‏ معرفی نموده است:ماشین مدل ‎CU‏ که دارای آخرین تکنولوزی :در ‎die‏ پلت‌سازی می‌باشد:در دو نوع ‎aly‏ وادینامیکی ارائه: شده است: +The vital link to your feed chain -نوع دینامیکی ماشین مدل لاح مجهز به تنظیم‌گر غلتک موتوری و کنترل کننده‌ی فعال لغزش غلتک می‌باشد. طراحی مستحکم تنظیم گر غلتک -موتوری به اپراتور این امکان را می‌دهد. تا حتی در زمان کار دستگاه به سادگی فاصله‌ی دلخواه بین غلتک و دای را انتخاب نماید. این سیستم -همراه با نرم افزار هوشمند ‎wot‏ مزایای زیادی را در فرایند ساخت و برنامه‌های تعمیر و نگهداری ارائه می‌کند. +چگونگی افزایش بازده فرآیند آسیاب و کاهش هزینه‌های ‎of‏ -یکی از این مزایاء افزایش طول عمر دای و غلتک به میزان ۳۰۹۵ است. با ایجاد ارتباط بین پیچ دوزینگ و ‎(SHE‏ زمانی که ماشین پلت تولید نداردء -غلتک به عقب کشیده می‌شود. این سیستم» مجهز به یک گزینه‌ی حالت تمیزکاری دای می‌باشد که اپراتور را قادر می‌سازد پس از ساخت هر @ -دای را تمیز نماید. این امر ‎wile‏ از کلوخه شدن مواد در سطح داخلی دای شده و در نتیجه پس از هر توقف, دستگاه به سرعت به فرایند تولید باز -می‌گردد. +در این مقاله به معرفی دستگاه آسیاب چکشی مدل ‎GD‏ شرکت فن آرسن باقابلیت سیستم تعویض خودکار الک +و کنترل فرکانس موتور پرداخته می‌شود. این دستگاه راه‌حلی ایده ‎JT‏ برای دستیابی به فرآیند آسیاب بهینه و +ظرفیت بالا است. -کنترل کننده‌ی فعال لغزش غلتک. سیستمی هوشمند می‌باشد که به منظور بهینه‌سازی سرعت تولید ماشین پلت طراحی شده است. این سیستم -با شناسایی حرکت لغزشی غلتک به صورت خودکار فعال شده و مانع از خاموشی دستگاه به علت بروز لغزش در غلتک می گردد. +آسیاب‌های چکشی جهت آسیاب مواد اولیه خوراک دام به کار برده می‌شوند. مواد ‎adsl‏ وارد شده به دستگاه آسیاب +چکشی در برخورد با چکش‌های خردکن که با سرعت بالایی در حال چرخش هستند. به ذرات کوچک‌تری تبدیل +می‌شوند. بازده فرآیند آسیاب به متغیرهای مختلفی مانند نحوه طراحی صفحات خردکن. سرعت نوک چکش‌ها و -۹ ارس ‌ژی_وارصوفضی -‎W‏ +صفحات الک بستگی دارد. -هدف ما سلامتی -نماینده انحصاری در ابران -‎www.ParsJivarSoufi.com‏ -‎PJS@ParsSoufi.com‏ +شرکت فن آرسن آسیاب چکشی دارای صفحات خردکن را اولین بار ۶۵ سال پیش طراحی نمود. آسیاب‌های +چکشی جدید این شرکت به صفحات خردکن بزرگ‌تری در بخش بالایی محفظه آسیاب مجهز شده‌اند. این امر +منجر به افزایش دفعات برخورد ذرات به این صفحات می‌شود. امروزه این طراحی به‌عنوان یک روش بسیار مور +برای دستیابی به کیفیت بالا و آسیاب سریع محصولات در نظر گرفته می‌شود. ذرات با برخوردهای متعدد به +صفحات خردکن در بخش بالایی محفظه دستگاه به اندازه مناسب می‌رسند و سپس از طریق صفحات الک از زیر -تلفن: ۰ ۸۸۰۶۴۴۲۶-۸ - -فکس : ۵ +تلفضن: ۲۶-۸ ۶۶ ۰۶ ‎AN‏ +‎ls‏ خیابان سید جمال الدین اسد آبادی, خیابان هفتاد و دوم پلاک ۲. واحد ۳.کدپستی: ۱۶۳۶۹۶۵۱۶۸ فاکس: ۵ ۰۶ ‎AN‏ ------*------ -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‏ +2024-04-15 15:52:54,190 - root - INFO - Successfully converted /app/uploads/sample_input_20240415_155249.pdf to a .docx file at /app/outputs/sample_input_20240415_155249_20240415_155249.docx +2024-04-15 15:52:54,205 - root - INFO - File received and saved at /app/callbacks/sample_input_20240415_155249_20240415_155249.docx +2024-04-15 15:52:54,206 - werkzeug - INFO - 127.0.0.1 - - [15/Apr/2024 15:52:54] "POST /callback HTTP/1.1" 200 - +2024-04-15 15:52:54,683 - root - INFO - PDF uploaded and saved to /app/uploads/sample_input_20240415_155254.pdf +2024-04-15 15:52:54,684 - werkzeug - INFO - 192.168.208.1 - - [15/Apr/2024 15:52:54] "POST /upload-pdf HTTP/1.1" 202 - +2024-04-15 15:52:55,235 - root - INFO - Converted PDF to images, number of pages: 1 +2024-04-15 15:52:58,441 - root - INFO - +------Page 1------ +9 که +‎Van/Xarsen mb fmf‏ -‎Van Aarsen EH 5 -7۲ Ee ng ng [reg Venn 7 +هدف ‎hs‏ سلامتشی -‎ROLL ADJUSTMENT: +The vital link to your feed chain -‎Go to zero [T] -Go to maximum gap [T] -Start zeroing [T] -Disable high speed [T] -Automatic slip prevention -Start cleaning mode 11 +چگونگی افزایش بازده فرآیند آسیاب و کاهش هزینه‌های ‎of‏ -‎A 3 +در این مقاله به معرفی دستگاه آسیاب چکشی مدل ‎GD‏ شرکت فن آرسن باقابلیت سیستم تعویض خودکار الک +و کنترل فرکانس موتور پرداخته می‌شود. این دستگاه راه‌حلی ایده ‎JT‏ برای دستیابی به فرآیند آسیاب بهینه و +ظرفیت بالا است. -‎[4] nm] -Ea mm +آسیاب‌های چکشی جهت آسیاب مواد اولیه خوراک دام به کار برده می‌شوند. مواد ‎adsl‏ وارد شده به دستگاه آسیاب +چکشی در برخورد با چکش‌های خردکن که با سرعت بالایی در حال چرخش هستند. به ذرات کوچک‌تری تبدیل +می‌شوند. بازده فرآیند آسیاب به متغیرهای مختلفی مانند نحوه طراحی صفحات خردکن. سرعت نوک چکش‌ها و -‏لا لا لا لا ‎OR‏ +صفحات الک بستگی دارد. -‏4 اطلاعات ارائه‌شده در این ‎aie‏ هیچ‌گونه حقی را برای خربدار ‎dl!‏ نمی‌کند. توضیحات و تصاو +شرکت فن آرسن آسیاب چکشی دارای صفحات خردکن را اولین بار ۶۵ سال پیش طراحی نمود. آسیاب‌های +چکشی جدید این شرکت به صفحات خردکن بزرگ‌تری در بخش بالایی محفظه آسیاب مجهز شده‌اند. این امر +منجر به افزایش دفعات برخورد ذرات به این صفحات می‌شود. امروزه این طراحی به‌عنوان یک روش بسیار مور +برای دستیابی به کیفیت بالا و آسیاب سریع محصولات در نظر گرفته می‌شود. ذرات با برخوردهای متعدد به +صفحات خردکن در بخش بالایی محفظه دستگاه به اندازه مناسب می‌رسند و سپس از طریق صفحات الک از زیر +تلفضن: ۲۶-۸ ۶۶ ۰۶ ‎AN‏ +‎ls‏ خیابان سید جمال الدین اسد آبادی, خیابان هفتاد و دوم پلاک ۲. واحد ۳.کدپستی: ۱۶۳۶۹۶۵۱۶۸ فاکس: ۵ ۰۶ ‎AN‏ ------*------ -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‏ ۱۹۲ - -۳۳۵ - -۰ - -۳۳ - -۴/۹۶/۲۴ -۵/۹۵ - -۲ - -۳۸۵ - -۱۶۰ - -۱۱۰-۱۳۳۲- - -۱۳۶۵۳۲ -۵۶۰ - -که +2024-04-15 15:52:58,488 - root - INFO - Successfully converted /app/uploads/sample_input_20240415_155253.pdf to a .docx file at /app/outputs/sample_input_20240415_155253_20240415_155253.docx +2024-04-15 15:52:58,508 - root - INFO - File received and saved at /app/callbacks/sample_input_20240415_155253_20240415_155253.docx +2024-04-15 15:52:58,509 - werkzeug - INFO - 127.0.0.1 - - [15/Apr/2024 15:52:58] "POST /callback HTTP/1.1" 200 - +2024-04-15 15:53:00,753 - root - INFO - +------Page 1------ +9 که +‎Van/Xarsen mb fmf‏ -VanAarsen +هدف ‎hs‏ سلامتشی -CU900XL CuU900 CU750 -qe. qe. ۷۵۰ -۳۳۵ ۱۷۵-۲۲۵-۵ ۳۵۰ -۹0 ۴۹۵۰-۶۳۶۰۵ OAR -۷/۰-/۴-۴ ۴/۹۷ -۵/۳-۶/۷-۷/۰-0/ ۳۴-۹ /۴ ۰۰۰ ‏۲/عم/۵/۱-۵‎ ۷ -۶/۴-۷/۱-۸/۰-۵ ۶/۴-۷/۱-۸/۰-۵ ۳/۴ -۲ ۲ ۲ -۴۳۵ ۴۳۵ ۳۶۰ -۳۱۵-۳۵۵-۰ ۲۰۰۰-۲۵۰-۳۱۵۵ ۱۳۲-۱۶۰۲۰۰۵۰ -۲۸۵-۳۶۰ -۵ ۳۲۳۸-۲۳۸۵۳۶۰ ۱۵۲-۱۸۴۰ -۱۱۳۵۰ -۰ ۱۳۵ ۷۶۴۵-۰۰ +The vital link to your feed chain -1 -‏اک‎ 1 LC -I ۹ -) | -J I H G ۳ -۱۳ ۱۳۰۰ ۱۰۶۰ ۱۴۰ ۱۳۰ -۱۳۵ ۱۳۰۰ ۱۱۶۰ ۱۴۰ Vo. -N52. ۱۵۰ YY. ۰ ۱۳۶۵۰ -YAY. ۱۷۰۰ ۱۳۸۰ ۳ Vero -VAY. ۱۷۰۰ YEA. ۳۳۰ ‏م۳۰‎ +چگونگی افزایش بازده فرآیند آسیاب و کاهش هزینه‌های ‎of‏ -T S R Q P -BY. ۱۹۶۶ ۱ ۵۵ YY. ۶ -3 Yeo Ye ۶ -‏نما‎ | Yee Yr. ۶ +در این مقاله به معرفی دستگاه آسیاب چکشی مدل ‎GD‏ شرکت فن آرسن باقابلیت سیستم تعویض خودکار الک +و کنترل فرکانس موتور پرداخته می‌شود. این دستگاه راه‌حلی ایده ‎JT‏ برای دستیابی به فرآیند آسیاب بهینه و +ظرفیت بالا است. -ارس ژی_وارصوفضی -هدف ما سلامتی -نماینده انحصاری در ابران -‎www.ParsJivarSoufi.com‏ -‎PJS@ParsSoufi.com‏ +آسیاب‌های چکشی جهت آسیاب مواد اولیه خوراک دام به کار برده می‌شوند. مواد ‎adsl‏ وارد شده به دستگاه آسیاب +چکشی در برخورد با چکش‌های خردکن که با سرعت بالایی در حال چرخش هستند. به ذرات کوچک‌تری تبدیل +می‌شوند. بازده فرآیند آسیاب به متغیرهای مختلفی مانند نحوه طراحی صفحات خردکن. سرعت نوک چکش‌ها و -تلفن : -فکس : +صفحات الک بستگی دارد. -۸۸۰۶۴۴۲۶-۸ -۵ +شرکت فن آرسن آسیاب چکشی دارای صفحات خردکن را اولین بار ۶۵ سال پیش طراحی نمود. آسیاب‌های +چکشی جدید این شرکت به صفحات خردکن بزرگ‌تری در بخش بالایی محفظه آسیاب مجهز شده‌اند. این امر +منجر به افزایش دفعات برخورد ذرات به این صفحات می‌شود. امروزه این طراحی به‌عنوان یک روش بسیار مور +برای دستیابی به کیفیت بالا و آسیاب سریع محصولات در نظر گرفته می‌شود. ذرات با برخوردهای متعدد به +صفحات خردکن در بخش بالایی محفظه دستگاه به اندازه مناسب می‌رسند و سپس از طریق صفحات الک از زیر +تلفضن: ۲۶-۸ ۶۶ ۰۶ ‎AN‏ +‎ls‏ خیابان سید جمال الدین اسد آبادی, خیابان هفتاد و دوم پلاک ۲. واحد ۳.کدپستی: ۱۶۳۶۹۶۵۱۶۸ فاکس: ۵ ۰۶ ‎AN‏ ------*------ -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 - +2024-04-15 15:53:00,798 - root - INFO - Successfully converted /app/uploads/sample_input_20240415_155254.pdf to a .docx file at /app/outputs/sample_input_20240415_155254_20240415_155254.docx +2024-04-15 15:53:00,806 - root - INFO - File received and saved at /app/callbacks/sample_input_20240415_155254_20240415_155254.docx +2024-04-15 15:53:00,814 - werkzeug - INFO - 127.0.0.1 - - [15/Apr/2024 15:53:00] "POST /callback HTTP/1.1" 200 - diff --git a/pdf_to_word.py b/pdf_to_word.py index 4106efb..1752eba 100644 --- a/pdf_to_word.py +++ b/pdf_to_word.py @@ -3,44 +3,74 @@ 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 +from docx import Document +from datetime import datetime # Configure logging -logging.basicConfig(level=logging.DEBUG, filename='/app/logs/pdf_to_word.log', filemode='w', - format='%(name)s - %(levelname)s - %(message)s') +logging.basicConfig(level=logging.INFO, filename='/app/logs/pdf_to_word.log', filemode='w', + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') -def pdf_to_word(pdf_path, output_dir, lang='eng+fas'): +def pdf_to_word_txt(pdf_path, output_dir, lang='fas+eng'): 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}') + + current_time = datetime.now().strftime("%Y%m%d_%H%M%S") + output_path = os.path.join(output_dir, f'{pdf_name}_{current_time}.txt') try: - pages = convert_from_path(pdf_path, 300) + pages = convert_from_path(pdf_path, 600) logging.info(f'Converted PDF to images, number of pages: {len(pages)}') - - document = Document() - document.add_heading('Document Title', 0) - + all_text = [] for i, page in enumerate(pages): - with tempfile.NamedTemporaryFile(delete=False, suffix='.jpg') as temp_image: + with tempfile.NamedTemporaryFile(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 - + text = pytesseract.image_to_string(Image.open(temp_image.name), lang=lang, config='--oem 3 --psm 3') logging.info("\n------"+f'Page {i+1}'+"------\n"+text+"\n------*------\n") - os.unlink(temp_image.name) + all_text.append(text) + + with open(output_path, 'w', encoding='utf-8') as f: + f.write("\n".join(all_text)) - document.save(output_path) - logging.info(f'Document saved to {output_path}') + logging.info(f'Successfully converted {pdf_path} to text at {output_path}') return output_path except Exception as e: - logging.error(f'An error occurred: {e}', exc_info=True) + logging.error(f'Error converting PDF to text: {e}', exc_info=True) return None + + + +def pdf_to_word_docx(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') + current_time = datetime.now().strftime("%Y%m%d_%H%M%S") + output_path = os.path.join(output_dir, f'{pdf_name}_{current_time}.docx') + + try: + # Increase DPI for higher image quality + pages = convert_from_path(pdf_path, 300) + logging.info(f'Converted PDF to images, number of pages: {len(pages)}') + + # PSM 4 might be more suitable for mixed content like your provided image + custom_config = r'--oem 3 --psm 4' + # custom_config = r'' + all_text = [] + + for i, page in enumerate(pages): + with tempfile.NamedTemporaryFile(suffix='.jpg') as temp_image: + page.save(temp_image.name, 'JPEG') + text = pytesseract.image_to_string(Image.open(temp_image.name), lang=lang, config=custom_config) + logging.info("\n------"+f'Page {i+1}'+"------\n"+text+"\n------*------\n") + all_text.append(text) + + # Save to a .docx file using a library like python-docx + doc = Document() + for text in all_text: + doc.add_paragraph(text) + doc.save(output_path) + + logging.info(f'Successfully converted {pdf_path} to a .docx file at {output_path}') + return output_path + except Exception as e: + logging.error(f'Error converting PDF to text: {e}', exc_info=True) + return None diff --git a/requirements.txt b/requirements.txt index 2ac04fb..cfd855b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,6 @@ pytesseract Pillow python-docx tqdm +watchdog +regex +requests \ No newline at end of file diff --git a/response.json b/response.json new file mode 100644 index 0000000..f8648ca --- /dev/null +++ b/response.json @@ -0,0 +1,3 @@ +{ + "message": "File processed and sent successfully" +} diff --git a/uploads/sample_input.pdf b/uploads/sample_input.pdf index c2d4357..6b73120 100644 Binary files a/uploads/sample_input.pdf and b/uploads/sample_input.pdf differ