تبدیل PDF به اکسل با هوش مصنوعی؛ آموزش استخراج جدول از PDF و عکس

در این راهنمای عملی یاد می‌گیرید چگونه جدول‌های PDF متنی، اسکن‌شده و تصویری را با هوش مصنوعی استخراج کنید، خطاهای OCR را اصلاح کنید و خروجی تمیز Excel، CSV یا JSON بگیرید.

Share
تبدیل PDF به اکسل با هوش مصنوعی؛ آموزش استخراج جدول از PDF و عکس

تبدیل PDF به اکسل یکی از نیازهای رایج کاربران اداری، حسابداران، مدیران فروش، پژوهشگران و تحلیلگران داده است. بسیاری از گزارش‌های بانکی، فاکتورها، صورت‌حساب‌ها، لیست قیمت‌ها، گزارش‌های مالی و جداول آماری در قالب PDF منتشر می‌شوند؛ اما تحلیل، فیلترکردن و محاسبه روی اطلاعات آن‌ها در PDF دشوار است.

اگر فایل PDF متنی و دارای جدول منظم باشد، ابزارهای معمولی تبدیل فایل ممکن است نتیجه قابل‌قبولی ارائه دهند. مشکل زمانی شروع می‌شود که PDF اسکن‌شده باشد، جدول چندسطری داشته باشد، سلول‌ها ادغام شده باشند یا اطلاعات فارسی، اعداد، تاریخ و واحد پول در کنار هم قرار گرفته باشند.

هوش مصنوعی می‌تواند علاوه بر تشخیص متن، ساختار جدول را نیز درک کند و تشخیص دهد هر مقدار به کدام سطر و ستون تعلق دارد. همچنین می‌توان از آن خواست اعداد فارسی را استاندارد کند، ستون‌های ناقص را مشخص کند، ردیف‌های تکراری را حذف کند و خروجی آماده Excel، CSV یا JSON بسازد.

در این مقاله یاد می‌گیرید:

  • نوع PDF را تشخیص دهید.
  • جدول‌های PDF متنی را استخراج کنید.
  • PDF اسکن‌شده را با OCR به داده تبدیل کنید.
  • از ChatGPT، Gemini و ابزارهای معتبر برای استخراج جدول استفاده کنید.
  • پرامپت دقیق برای تبدیل PDF به Excel بنویسید.
  • اعداد، تاریخ‌ها و ستون‌های فارسی را کنترل کنید.
  • خطاهای رایج استخراج جدول را پیدا کنید.
  • خروجی CSV و XLSX استاندارد بسازید.
  • فرایند استخراج اطلاعات را با API درواره خودکار کنید.

چرا تبدیل PDF به اکسل دشوار است؟

فایل Excel اطلاعات را در سلول‌های مشخص نگه می‌دارد. هر مقدار دارای شماره سطر و ستون است و برنامه می‌داند کدام داده به کدام سلول تعلق دارد.

اما PDF معمولاً برای نمایش و چاپ ساخته شده است. یک جدول PDF ممکن است در پشت صحنه فقط مجموعه‌ای از متن‌ها با مختصات مختلف باشد. خطوط جدول، عنوان ستون‌ها و ترتیب سطرها الزاماً به‌عنوان ساختار داده ذخیره نشده‌اند.

به همین دلیل، هنگام تبدیل ممکن است مشکلات زیر رخ دهند:

  • چند ستون در یک ستون ادغام شوند.
  • یک سطر به چند سطر شکسته شود.
  • عنوان ستون‌ها جابه‌جا شوند.
  • اعداد منفی بدون علامت استخراج شوند.
  • جداکننده هزارگان با ممیز اشتباه گرفته شود.
  • متن فارسی برعکس یا جداجدا نمایش داده شود.
  • سلول‌های ادغام‌شده ساختار جدول را خراب کنند.
  • جدول‌های چندصفحه‌ای از یکدیگر جدا شوند.
  • اعداد فارسی و انگلیسی در یک ستون مخلوط شوند.
  • تاریخ شمسی به‌عنوان متن ذخیره شود.
  • واحدهای ریال، تومان، درصد و تعداد حذف شوند.

هوش مصنوعی برای حل این مشکلات فقط متن را نمی‌خواند؛ بلکه تلاش می‌کند رابطه میان عنوان‌ها، ردیف‌ها، ستون‌ها و مقادیر را نیز تشخیص دهد.

تفاوت PDF متنی و PDF اسکن‌شده

پیش از انتخاب ابزار باید نوع PDF را مشخص کنید.

PDF متنی

در PDF متنی می‌توانید یک کلمه را با ماوس انتخاب و کپی کنید. این فایل معمولاً مستقیماً از Word، Excel، نرم‌افزار حسابداری یا یک سامانه گزارش‌گیری ساخته شده است.

مزایا:

  • استخراج سریع‌تر
  • دقت بیشتر متن
  • نیاز کمتر به OCR
  • امکان شناسایی بهتر ستون‌ها
  • حجم پردازش کمتر

PDF اسکن‌شده

PDF اسکن‌شده در واقع شامل تصویر صفحات است. حتی اگر در صفحه نوشته و جدول ببینید، نرم‌افزار ممکن است آن را به‌عنوان یک عکس واحد تشخیص دهد.

برای پردازش چنین فایلی ابتدا باید OCR انجام شود. OCR یا Optical Character Recognition فناوری تشخیص متن داخل تصویر است.

PDF ترکیبی

برخی فایل‌ها شامل متن قابل‌انتخاب، تصویر، نمودار و جدول اسکن‌شده هستند. برای این نوع فایل باید روش ترکیبی استفاده شود:

  1. استخراج متن دیجیتال
  2. تشخیص صفحات تصویری
  3. انجام OCR روی بخش‌های اسکن‌شده
  4. ترکیب نتایج
  5. کنترل ساختار جدول با هوش مصنوعی

چگونه نوع PDF را تشخیص دهیم؟

ساده‌ترین آزمایش:

  1. فایل را باز کنید.
  2. روی یک کلمه داخل جدول کلیک و آن را انتخاب کنید.
  3. متن را کپی و در Notepad یا یک ویرایشگر ساده Paste کنید.

اگر متن درست کپی شد، PDF احتمالاً متنی است.

اگر کل صفحه مانند یک تصویر انتخاب شد یا امکان انتخاب متن وجود نداشت، فایل اسکن‌شده است.

اگر متن انتخاب شد اما ترتیب کلمات و ستون‌ها خراب بود، PDF دارای لایه متنی نامنظم است و احتمالاً به پردازش ساختاری نیاز دارد.

بهترین روش تبدیل PDF به Excel چیست؟

بهترین روش به نوع فایل بستگی دارد.

وضعیت فایلروش پیشنهادی
PDF متنی با جدول سادهتبدیل مستقیم با Acrobat یا ابزارهای جدولی
PDF متنی با جدول پیچیدهاستخراج مستقیم و بازسازی با هوش مصنوعی
PDF اسکن‌شده واضحOCR جدول و سپس کنترل با هوش مصنوعی
اسکن کم‌کیفیتبهبود تصویر، OCR و بازبینی دستی
جدول فارسیOCR فارسی همراه با کنترل سطر و ستون
تعداد زیاد فایلپردازش خودکار با API
اطلاعات حساسپردازش در زیرساخت کنترل‌شده و بررسی شرایط سرویس
جدول چندصفحه‌ایاستخراج صفحه‌به‌صفحه و ادغام با کلید مشترک

روش اول: تبدیل مستقیم PDF به Excel با Adobe Acrobat

Adobe Acrobat امکان تبدیل PDF به فایل XLSX را فراهم می‌کند. براساس راهنمای رسمی Adobe، می‌توانید از بخش Convert، فرمت Microsoft Excel و سپس XLSX را انتخاب کنید.

مراحل کلی:

  1. فایل PDF را در Acrobat باز کنید.
  2. وارد بخش Convert شوید.
  3. گزینه Microsoft Excel را انتخاب کنید.
  4. فرمت XLSX را مشخص کنید.
  5. تنظیمات تبدیل را بررسی کنید.
  6. فایل را تبدیل و دانلود کنید.
  7. نتیجه را در Excel بازبینی کنید.

این روش برای PDFهای متنی، تمیز و دارای جدول‌های منظم مناسب است.

چه زمانی تبدیل مستقیم نتیجه خوبی نمی‌دهد؟

  • جدول بدون خط‌کشی مشخص باشد.
  • چند جدول در یک صفحه وجود داشته باشد.
  • سلول‌های زیادی ادغام شده باشند.
  • فایل از روی کاغذ اسکن شده باشد.
  • متن فارسی با فونت یا کدگذاری نامناسب ذخیره شده باشد.
  • عنوان ستون در صفحات بعد تکرار شده باشد.
  • برخی مقادیر در چند خط نوشته شده باشند.
  • توضیحات در میان سطرهای جدول قرار گرفته باشند.

در این شرایط می‌توانید خروجی اولیه Acrobat را به هوش مصنوعی بدهید و از آن بخواهید ساختار جدول را اصلاح کند.

روش دوم: تبدیل PDF به اکسل با ChatGPT

ChatGPT می‌تواند فایل‌های رایج از جمله PDF، XLSX و CSV را دریافت و محتوای آن‌ها را تحلیل کند. براساس راهنمای رسمی File Uploads، استخراج اطلاعات مشخص از اسناد و بررسی داده‌های فایل از کاربردهای قابلیت بارگذاری فایل است.

مراحل پیشنهادی:

  1. فایل PDF را بارگذاری کنید.
  2. نوع جدول و صفحات موردنظر را مشخص کنید.
  3. ساختار ستون‌های خروجی را بنویسید.
  4. از مدل بخواهید هیچ مقدار نامشخصی را حدس نزند.
  5. ابتدا یک پیش‌نمایش جدولی بگیرید.
  6. چند ردیف را با PDF اصلی مقایسه کنید.
  7. پس از تأیید، فایل Excel یا CSV درخواست کنید.

پرامپت ساده

جدول‌های موجود در این فایل PDF را استخراج کن
و به یک جدول قابل‌استفاده در Excel تبدیل کن.

عنوان ستون‌ها را حفظ کن.
ترتیب سطرها را تغییر نده.
اعداد و تاریخ‌ها را دقیقاً مطابق فایل وارد کن.
اگر مقداری خوانا نیست، آن را خالی نگذار و عبارت «نیازمند بررسی» بنویس.
در پایان خروجی XLSX ارائه کن.

پرامپت دقیق‌تر

صفحات ۳ تا ۱۲ این PDF را بررسی کن و جدول فروش را استخراج کن.

ستون‌های خروجی باید دقیقاً شامل موارد زیر باشند:
ردیف، کد کالا، نام کالا، تعداد، قیمت واحد، تخفیف،
مالیات، مبلغ نهایی و تاریخ.

قواعد:
1. هر قلم کالا فقط یک ردیف باشد.
2. سطرهای عنوان تکرارشده در صفحات بعد حذف شوند.
3. اعداد فارسی به عدد انگلیسی تبدیل شوند.
4. جداکننده هزارگان حذف شود.
5. مبالغ به‌صورت عدد ذخیره شوند، نه متن.
6. تاریخ شمسی بدون تغییر معنایی در قالب YYYY/MM/DD ثبت شود.
7. هیچ عددی را حدس نزن.
8. موارد ناخوانا را در ستون «وضعیت بررسی» علامت بزن.
9. مجموع مبلغ نهایی را با جمع درج‌شده در PDF مقایسه کن.
10. خروجی نهایی را به‌صورت فایل XLSX تحویل بده.

روش سوم: تبدیل PDF به اکسل با Gemini

Gemini امکان بارگذاری و تحلیل اسناد و فایل‌های صفحه‌گسترده را فراهم می‌کند. در راهنمای رسمی Gemini، امکان بارگذاری اسناد، Spreadsheetها، تصاویر و سایر فایل‌ها برای دریافت پاسخ و تحلیل توضیح داده شده است.

مراحل کلی:

  1. فایل PDF را در Gemini بارگذاری کنید.
  2. صفحات یا جدول موردنظر را مشخص کنید.
  3. نام ستون‌ها و قواعد تبدیل را بنویسید.
  4. ابتدا خروجی را به‌صورت جدول Markdown یا CSV بخواهید.
  5. جدول را کنترل کنید.
  6. نتیجه را وارد Google Sheets یا Excel کنید.

پرامپت پیشنهادی:

این PDF شامل چند جدول فارسی است.
تمام جدول‌ها را صفحه‌به‌صفحه استخراج کن.

برای هر جدول این اطلاعات را بنویس:
- شماره صفحه
- عنوان جدول
- عنوان ستون‌ها
- تعداد ردیف‌ها
- داده‌های استخراج‌شده
- موارد ناخوانا یا مشکوک

متن فارسی را راست‌به‌چپ حفظ کن.
اعداد را به انگلیسی استاندارد تبدیل کن.
خروجی اصلی را در قالب CSV معتبر قرار بده.
مقادیر عددی را داخل گیومه نگذار مگر اینکه بخشی از متن باشند.
هیچ سلول ناقصی را با مقدار احتمالی پر نکن.

روش چهارم: استخراج جدول از PDF اسکن‌شده

برای PDF اسکن‌شده، فرایند بهتر شامل چند مرحله است.

مرحله اول: افزایش کیفیت اسکن

اگر تصویر تار یا کج باشد:

  • صفحه را صاف کنید.
  • زاویه کج را اصلاح کنید.
  • کنتراست را افزایش دهید.
  • سایه حاشیه را حذف کنید.
  • رزولوشن را افزایش دهید.
  • نویز پس‌زمینه را کم کنید.
  • از فشرده‌سازی مجدد شدید خودداری کنید.

مرحله دوم: تبدیل صفحه PDF به تصویر

برای مدل‌های چندوجهی بهتر است صفحات موردنظر به PNG یا JPEG باکیفیت تبدیل شوند. فرمت PNG برای متن و جدول معمولاً لبه‌های واضح‌تری حفظ می‌کند.

مرحله سوم: اجرای OCR

مدل باید متن و ساختار جدول را تشخیص دهد. در پرامپت مشخص کنید:

  • زبان جدول فارسی است.
  • اعداد ممکن است فارسی یا انگلیسی باشند.
  • جدول راست‌به‌چپ است.
  • واحد پول باید حفظ شود.
  • سلول‌های ادغام‌شده باید تکرار یا علامت‌گذاری شوند.
  • مقادیر ناخوانا نباید حدس زده شوند.

مرحله چهارم: بازسازی جدول

نتیجه OCR ممکن است فقط مجموعه‌ای از متن‌ها باشد. در مرحله بازسازی، هوش مصنوعی باید هر مقدار را در ستون درست قرار دهد.

مرحله پنجم: اعتبارسنجی

حداقل این موارد را کنترل کنید:

  • تعداد ردیف‌ها
  • عنوان ستون‌ها
  • جمع مبالغ
  • اعداد منفی
  • درصدها
  • تاریخ‌ها
  • شماره حساب یا شناسه‌ها
  • ردیف‌های تکراری
  • صفحات جاافتاده

پرامپت استخراج جدول فارسی از تصویر

تصویر بارگذاری‌شده یک جدول فارسی است.
جدول را با دقت استخراج و به داده ساختاریافته تبدیل کن.

قواعد:
- ترتیب راست‌به‌چپ ستون‌ها را درک کن.
- تمام عنوان‌ها و مقادیر را دقیقاً از تصویر بخوان.
- اعداد فارسی و عربی را به اعداد انگلیسی تبدیل کن.
- جداکننده هزارگان را از مقادیر عددی حذف کن.
- واحدهای ریال، تومان، درصد و عدد را در ستون جداگانه حفظ کن.
- سطرهای چندخطی را به یک ردیف تبدیل کن.
- سلول‌های ادغام‌شده را براساس ساختار جدول مدیریت کن.
- هیچ مقدار ناخوانایی را حدس نزن.
- برای سلول ناخوانا مقدار null ثبت کن.
- شماره سطر و شماره صفحه را نیز اضافه کن.

خروجی را فقط به‌صورت JSON معتبر ارائه کن.

پرامپت استخراج جدول چندصفحه‌ای

این فایل شامل یک جدول چندصفحه‌ای است.
عنوان ستون‌ها در ابتدای هر صفحه تکرار شده‌اند.

تمام صفحات را به یک جدول واحد تبدیل کن.

قواعد:
1. عنوان‌های تکراری را به‌عنوان داده وارد نکن.
2. ردیف‌های شکسته‌شده میان دو صفحه را به هم متصل کن.
3. ترتیب اصلی ردیف‌ها حفظ شود.
4. شماره صفحه منبع هر ردیف ثبت شود.
5. پاورقی، شماره صفحه و سربرگ اداری حذف شوند.
6. تمام ستون‌ها در همه صفحات ساختار یکسان داشته باشند.
7. اگر یک صفحه ستون متفاوتی داشت، آن را در گزارش خطا ثبت کن.
8. هیچ مقدار مفقودی را حدس نزن.

فرمت مناسب خروجی: Excel، CSV یا JSON؟

Excel یا XLSX

مناسب برای:

  • کاربران اداری
  • حسابداری
  • فیلتر و مرتب‌سازی
  • فرمول‌نویسی
  • گزارش‌گیری
  • استفاده از چند Sheet
  • حفظ قالب‌بندی

CSV

مناسب برای:

  • انتقال داده
  • واردکردن در نرم‌افزارهای دیگر
  • پردازش با Python
  • فایل‌های ساده و سبک
  • پایگاه داده

CSV از چند Sheet، فرمول، رنگ یا قالب‌بندی پیچیده پشتیبانی نمی‌کند.

JSON

مناسب برای:

  • API
  • نرم‌افزارهای تحت وب
  • ساختارهای تو‌در‌تو
  • استخراج چند جدول
  • ذخیره اطلاعات اطمینان و خطا
  • پردازش خودکار

یک گردش کار حرفه‌ای معمولاً ابتدا JSON ساختاریافته تولید می‌کند و سپس آن را به Excel تبدیل می‌کند.

ساختار JSON پیشنهادی

{
  "document_name": "report.pdf",
  "tables": [
    {
      "page": 3,
      "title": "گزارش فروش",
      "columns": [
        "row_number",
        "product_code",
        "product_name",
        "quantity",
        "unit_price",
        "total_price"
      ],
      "rows": [
        {
          "row_number": 1,
          "product_code": "A-101",
          "product_name": "محصول نمونه",
          "quantity": 2,
          "unit_price": 1500000,
          "total_price": 3000000,
          "review_status": "verified"
        }
      ]
    }
  ],
  "warnings": []
}

این ساختار علاوه بر داده اصلی، شماره صفحه و وضعیت بررسی را نیز نگه می‌دارد.

نکات مهم اعداد فارسی

در استخراج اطلاعات فارسی ممکن است سه نوع رقم مشاهده شود:

فارسی: ۰۱۲۳۴۵۶۷۸۹
عربی: ٠١٢٣٤٥٦٧٨٩
انگلیسی: 0123456789

بهتر است تمام ارقام برای Excel به انگلیسی استاندارد تبدیل شوند؛ اما مقدار خام نیز در فرایندهای حساس نگه داشته شود.

نمونه:

مقدار خاممقدار استاندارد
۱٬۲۵۰٬۰۰۰1250000
٣٥٠٠3500
۱۲٫۵٪12.5
۱۴۰۵/۰۵/۰۷1405/05/07

تبدیل اعداد فارسی در Python

PERSIAN_DIGITS = "۰۱۲۳۴۵۶۷۸۹"
ARABIC_DIGITS = "٠١٢٣٤٥٦٧٨٩"
ENGLISH_DIGITS = "0123456789"

translation_table = str.maketrans(
    PERSIAN_DIGITS + ARABIC_DIGITS,
    ENGLISH_DIGITS + ENGLISH_DIGITS
)

def normalize_digits(value):
    if value is None:
        return None

    return str(value).translate(translation_table)

پاک‌سازی جداکننده‌های عددی

def normalize_number(value):
    if value is None:
        return None

    text = normalize_digits(value)
    text = text.replace("٬", "")
    text = text.replace(",", "")
    text = text.replace(" ", "")
    text = text.replace("٫", ".")

    try:
        return float(text) if "." in text else int(text)
    except ValueError:
        return value

این تابع برای همه داده‌ها مناسب نیست. برای شماره حساب، شماره تلفن، کد ملی، کد کالا یا شناسه‌هایی که صفر ابتدایی دارند نباید مقدار را به عدد تبدیل کنید. این اطلاعات باید به‌صورت متن ذخیره شوند.

تشخیص ستون عددی و متنی

نوع دادهفرمت مناسب در Excel
مبلغNumber
تعدادNumber
درصدPercentage یا Number
کد کالاText
شماره حسابText
شناسه پرداختText
شماره تلفنText
تاریخ شمسیText یا نوع سفارشی
توضیحاتText
کد پستیText

اگر کد 00125 به عدد تبدیل شود، Excel آن را به 125 تبدیل می‌کند. به همین دلیل باید نوع هر ستون قبل از ساخت فایل مشخص شود.

کنترل تاریخ‌های شمسی

مدل ممکن است میان تاریخ‌های زیر سردرگم شود:

۱۴۰۵/۰۵/۰۷
۱۴۰۵-۵-۷
07/05/1405
۷ مرداد ۱۴۰۵

فرمت استاندارد پیشنهادی:

YYYY/MM/DD

پرامپت:

تمام تاریخ‌های شمسی را بدون تبدیل به میلادی،
در قالب YYYY/MM/DD استاندارد کن.
اگر ترتیب اجزای تاریخ مبهم است، مقدار اصلی را حفظ
و ستون date_review_required را برابر true قرار بده.

هوش مصنوعی نباید بدون درخواست صریح تاریخ شمسی را به میلادی تبدیل کند.

چگونه صحت خروجی را بررسی کنیم؟

تبدیل موفق فقط به معنی ساخته‌شدن فایل Excel نیست. داده باید با فایل اصلی مطابقت داشته باشد.

کنترل تعداد ردیف‌ها

تعداد ردیف‌های PDF و Excel را مقایسه کنید. اختلاف می‌تواند نشان‌دهنده موارد زیر باشد:

  • ردیف جاافتاده
  • عنوان تکرارشده
  • تقسیم یک ردیف به دو ردیف
  • ادغام دو ردیف
  • حذف ردیف خالی معنادار

کنترل جمع مبالغ

اگر جدول دارای جمع کل است، مجموع ستون Excel را با مقدار داخل PDF مقایسه کنید.

نمونه فرمول Ghost و Excel:

=SUM(H2:H251)

کنترل نمونه‌گیری

حداقل موارد زیر را بررسی کنید:

  • پنج ردیف اول
  • پنج ردیف میانی
  • پنج ردیف آخر
  • ردیف‌های دارای مبلغ بزرگ
  • ردیف‌های دارای مقدار منفی
  • ردیف‌های چندخطی
  • ردیف‌های شروع و پایان صفحات

کنترل ستون‌های حساس

ستون‌هایی مانند مبلغ، تعداد، درصد، تاریخ، شناسه و کد کالا باید جداگانه بررسی شوند.

گزارش اطمینان

در فرایند خودکار می‌توانید برای هر ردیف یک وضعیت ثبت کنید:

  • verified
  • low_confidence
  • missing_value
  • format_warning
  • manual_review

پرامپت کنترل کیفیت خروجی

پس از استخراج، PDF و فایل Excel را دوباره در اختیار مدل قرار دهید:

فایل PDF منبع و فایل Excel استخراج‌شده را مقایسه کن.

این موارد را بررسی کن:
- ردیف‌های حذف‌شده
- ردیف‌های اضافه یا تکراری
- جابه‌جایی ستون‌ها
- اختلاف مبالغ
- اختلاف تعداد
- تاریخ‌های اشتباه
- اعداد منفی بدون علامت
- سلول‌های خالی غیرمنتظره
- کدهایی که صفر ابتدایی آن‌ها حذف شده است

خود داده‌ها را بدون گزارش تغییر نده.
ابتدا یک گزارش اختلاف با شماره صفحه،
شماره ردیف PDF و شماره سطر Excel ارائه کن.

تبدیل PDFهای بزرگ

برای فایل‌های چندصدصفحه‌ای بهتر است PDF را یکجا به مدل ندهید. روش مناسب:

  1. صفحات حاوی جدول را شناسایی کنید.
  2. فایل را به بخش‌های کوچک تقسیم کنید.
  3. هر بخش را جداگانه پردازش کنید.
  4. شماره صفحه اصلی را حفظ کنید.
  5. خروجی‌های JSON را ترکیب کنید.
  6. ردیف‌های تکراری مرزی را حذف کنید.
  7. کنترل مجموع و تعداد انجام دهید.
  8. فایل Excel نهایی را بسازید.

تقسیم فایل علاوه بر کاهش خطا، امکان اجرای مجدد فقط بخش ناموفق را فراهم می‌کند.

تبدیل خودکار PDF به Excel با API درواره

اگر تعداد فایل‌ها زیاد است یا می‌خواهید این قابلیت را به نرم‌افزار خود اضافه کنید، می‌توانید از API درواره استفاده کنید.

معماری پیشنهادی:

  1. دریافت PDF از کاربر
  2. بررسی نوع فایل
  3. استخراج مستقیم متن از PDF متنی
  4. تبدیل صفحات اسکن‌شده به تصویر
  5. ارسال تصویر به مدل چندوجهی
  6. دریافت خروجی JSON
  7. اعتبارسنجی ساختار
  8. استانداردسازی اعداد و تاریخ‌ها
  9. ساخت فایل Excel
  10. ارائه گزارش خطا و فایل خروجی

برای این کار باید مدلی را انتخاب کنید که از ورودی تصویر یا Vision پشتیبانی کند. شناسه و قابلیت مدل‌ها را در صفحه مدل‌های درواره بررسی کنید.

نمونه درخواست تحلیل تصویر جدول با API درواره

Endpoint مدل‌های چندوجهی:

POST https://api.darvareh.ir/v1/chat/completions

نمونه cURL:

curl https://api.darvareh.ir/v1/chat/completions \
  -H "Authorization: Bearer YOUR_DARVAREH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "YOUR_MODEL_ID",
    "temperature": 0,
    "messages": [
      {
        "role": "system",
        "content": "You extract tables from document images. Never guess unreadable values. Return valid JSON only."
      },
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "Extract the Persian table from this page. Convert Persian digits to English digits. Preserve product codes as strings. Return page_number, columns, rows and warnings. Use null for unreadable values."
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "data:image/png;base64,YOUR_PAGE_IMAGE_BASE64"
            }
          }
        ]
      }
    ]
  }'

مقدار YOUR_DARVAREH_API_KEY را با کلید API خود جایگزین کنید. برای YOUR_MODEL_ID نیز یک مدل چندوجهی دارای قابلیت ورودی تصویر از صفحه مدل‌های درواره انتخاب کنید.

پروژه عملی با Python

در این نمونه:

  • صفحات PDF به تصویر تبدیل می‌شوند.
  • تصویر هر صفحه به API ارسال می‌شود.
  • مدل جدول را به JSON تبدیل می‌کند.
  • داده‌ها در فایل Excel ذخیره می‌شوند.

نصب کتابخانه‌ها

pip install pymupdf requests pandas openpyxl

کد کامل نمونه

import os
import re
import json
import base64
from io import BytesIO

import fitz
import pandas as pd
import requests


API_URL = "https://api.darvareh.ir/v1/chat/completions"
API_KEY = os.getenv(
    "DARVAREH_API_KEY",
    "YOUR_DARVAREH_API_KEY"
)
MODEL_ID = "YOUR_MODEL_ID"


def render_pdf_page(page, zoom=2.0):
    matrix = fitz.Matrix(zoom, zoom)
    pixmap = page.get_pixmap(
        matrix=matrix,
        alpha=False
    )

    return pixmap.tobytes("png")


def to_data_url(image_bytes):
    encoded = base64.b64encode(
        image_bytes
    ).decode("utf-8")

    return f"data:image/png;base64,{encoded}"


def clean_json_response(content):
    content = content.strip()

    if content.startswith("```"):
        content = re.sub(
            r"^```(?:json)?\s*",
            "",
            content
        )
        content = re.sub(
            r"\s*```$",
            "",
            content
        )

    return json.loads(content)


def extract_page_table(image_bytes, page_number):
    prompt = f"""
این تصویر مربوط به صفحه {page_number} یک PDF فارسی است.

تمام جدول‌های صفحه را استخراج کن.

قواعد:
- خروجی فقط JSON معتبر باشد.
- ترتیب منطقی ستون‌های فارسی را تشخیص بده.
- اعداد فارسی و عربی را به انگلیسی تبدیل کن.
- کدها و شناسه‌ها را به صورت string نگه دار.
- جداکننده هزارگان مبلغ‌ها را حذف کن.
- هیچ مقدار ناخوانایی را حدس نزن.
- مقدار ناخوانا را null قرار بده.
- سربرگ، پاورقی و شماره صفحه را داده جدول تلقی نکن.
- برای هر هشدار، شماره سطر را ثبت کن.

ساختار خروجی:
{{
  "page": {page_number},
  "tables": [
    {{
      "title": null,
      "columns": [],
      "rows": [],
      "warnings": []
    }}
  ]
}}
"""

    payload = {
        "model": MODEL_ID,
        "temperature": 0,
        "messages": [
            {
                "role": "system",
                "content": (
                    "You are a precise document table "
                    "extraction engine. Return valid JSON only."
                )
            },
            {
                "role": "user",
                "content": [
                    {
                        "type": "text",
                        "text": prompt
                    },
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": to_data_url(
                                image_bytes
                            )
                        }
                    }
                ]
            }
        ]
    }

    response = requests.post(
        API_URL,
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json"
        },
        json=payload,
        timeout=180
    )

    response.raise_for_status()

    content = response.json()[
        "choices"
    ][0]["message"]["content"]

    return clean_json_response(content)


def pdf_to_tables(pdf_path):
    document = fitz.open(pdf_path)
    results = []

    for index, page in enumerate(document):
        page_number = index + 1
        image_bytes = render_pdf_page(page)

        try:
            page_result = extract_page_table(
                image_bytes,
                page_number
            )
            results.append(page_result)

        except Exception as error:
            results.append({
                "page": page_number,
                "tables": [],
                "error": str(error)
            })

    document.close()
    return results


def save_tables_to_excel(results, output_path):
    sheet_index = 1
    warnings = []

    with pd.ExcelWriter(
        output_path,
        engine="openpyxl"
    ) as writer:

        for page_result in results:
            page_number = page_result.get("page")

            if page_result.get("error"):
                warnings.append({
                    "page": page_number,
                    "warning": page_result["error"]
                })
                continue

            for table in page_result.get(
                "tables",
                []
            ):
                rows = table.get("rows", [])

                if not rows:
                    continue

                dataframe = pd.DataFrame(rows)
                dataframe.insert(
                    0,
                    "source_page",
                    page_number
                )

                sheet_name = f"Table_{sheet_index}"
                dataframe.to_excel(
                    writer,
                    sheet_name=sheet_name,
                    index=False
                )

                for warning in table.get(
                    "warnings",
                    []
                ):
                    warnings.append({
                        "page": page_number,
                        "table": sheet_index,
                        "warning": warning
                    })

                sheet_index += 1

        if warnings:
            pd.DataFrame(warnings).to_excel(
                writer,
                sheet_name="Warnings",
                index=False
            )


if __name__ == "__main__":
    input_pdf = "input.pdf"
    output_excel = "output.xlsx"

    extracted_results = pdf_to_tables(
        input_pdf
    )

    save_tables_to_excel(
        extracted_results,
        output_excel
    )

    print(f"Saved: {output_excel}")

اجرای برنامه

کلید API را در متغیر محیطی قرار دهید.

در Linux و macOS:

export DARVAREH_API_KEY="YOUR_DARVAREH_API_KEY"
python app.py

در PowerShell:

$env:DARVAREH_API_KEY="YOUR_DARVAREH_API_KEY"
python app.py

در کد، مقدار YOUR_MODEL_ID را با شناسه یک مدل چندوجهی فعال در درواره جایگزین کنید.

بهبود نسخه عملیاتی

کد نمونه برای آموزش است. در پروژه واقعی بهتر است قابلیت‌های زیر اضافه شوند:

  • محدودیت حجم فایل
  • بررسی نوع MIME
  • اسکن فایل ورودی
  • Retry کنترل‌شده
  • Timeout مناسب
  • صف پردازش برای فایل‌های بزرگ
  • ذخیره وضعیت هر صفحه
  • امکان ادامه پردازش پس از خطا
  • Structured Outputs در مدل‌های پشتیبانی‌شده
  • ثبت نسخه پرامپت
  • ثبت Model ID
  • کنترل هزینه
  • حذف خودکار فایل موقت
  • جلوگیری از پردازش تکراری
  • بازبینی انسانی برای داده‌های حساس
  • گزارش Confidence
  • مقایسه خودکار جمع ستون‌ها

استفاده از Structured Outputs

اگر مدل انتخابی از Structured Outputs یا JSON Schema پشتیبانی می‌کند، ساختار خروجی را به‌صورت Schema تعریف کنید. این کار احتمال دریافت JSON ناقص یا دارای ستون‌های متغیر را کاهش می‌دهد.

ساختار مفهومی:

{
  "type": "object",
  "properties": {
    "page": {
      "type": "integer"
    },
    "columns": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "rows": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "page",
    "columns",
    "rows",
    "warnings"
  ]
}

پارامترهای دقیق Structured Outputs به مدل انتخابی وابسته‌اند. قبل از استفاده، مشخصات همان مدل را بررسی کنید.

کاهش هزینه پردازش

برای تبدیل اقتصادی فایل‌های زیاد:

PDF متنی را به تصویر تبدیل نکنید

اگر متن و جدول مستقیماً قابل‌استخراج هستند، ابتدا از ابزارهای محلی استفاده کنید و فقط بخش نامنظم را به مدل بفرستید.

فقط صفحات جدول را پردازش کنید

صفحات جلد، مقدمه و توضیحات را برای استخراج جدول ارسال نکنید.

کیفیت تصویر را منطقی نگه دارید

رزولوشن بسیار بالا همیشه دقت بیشتری ایجاد نمی‌کند و می‌تواند حجم ورودی را افزایش دهد.

خروجی‌ها را ذخیره کنید

اگر یک صفحه قبلاً پردازش شده است، نتیجه را Cache کنید تا در اجرای مجدد دوباره هزینه نشود.

پردازش را دو مرحله‌ای کنید

  1. مدل سریع‌تر برای استخراج اولیه
  2. مدل دقیق‌تر فقط برای ردیف‌های مشکوک

برای مشاهده قیمت به‌روز مدل‌ها به صفحه مدل‌های درواره مراجعه کنید.

خطاهای رایج تبدیل PDF به Excel

اعتماد کامل به خروجی OCR

OCR ممکن است ۰ را با ۶، ۱ را با ۷ یا نقطه و ممیز را با یکدیگر اشتباه بگیرد.

حذف صفر ابتدایی

کد 00158 نباید به عدد 158 تبدیل شود.

تبدیل اشتباه ریال و تومان

مدل نباید واحد مبلغ را بدون دستور شما تغییر دهد. بهتر است واحد در یک ستون جداگانه ثبت شود.

حدس‌زدن سلول ناخوانا

در داده‌های واقعی، مقدار null همراه با هشدار بهتر از یک عدد ساختگی است.

نادیده‌گرفتن عنوان تکراری صفحات

عنوان ستون‌ها ممکن است در ابتدای هر صفحه تکرار شود و به‌اشتباه وارد داده‌ها شود.

ادغام تمام جدول‌ها بدون بررسی

ممکن است PDF چند جدول با ساختارهای متفاوت داشته باشد. ابتدا Schema هر جدول را شناسایی کنید.

ذخیره همه ستون‌ها به‌صورت متن

در این حالت مرتب‌سازی عددی، فرمول و جمع مبالغ درست کار نمی‌کنند.

ذخیره شناسه‌ها به‌صورت عدد

این کار می‌تواند صفر ابتدایی یا دقت شناسه‌های طولانی را از بین ببرد.

ارسال کل فایل بزرگ در یک درخواست

پردازش مرحله‌ای، قابل‌کنترل‌تر و قابل‌اعتمادتر است.

چک‌لیست نهایی

پیش از تحویل فایل Excel بررسی کنید:

  • تمام صفحات موردنظر پردازش شده‌اند.
  • تعداد جدول‌ها صحیح است.
  • عنوان ستون‌ها کامل هستند.
  • ترتیب ردیف‌ها حفظ شده است.
  • اعداد فارسی استاندارد شده‌اند.
  • واحد پول حذف نشده است.
  • اعداد منفی علامت دارند.
  • درصدها درست استخراج شده‌اند.
  • تاریخ‌ها تغییر معنایی نکرده‌اند.
  • صفر ابتدایی کدها حفظ شده است.
  • ردیف‌های عنوان تکراری حذف شده‌اند.
  • ردیف‌های چندصفحه‌ای درست ادغام شده‌اند.
  • سلول‌های ناخوانا علامت‌گذاری شده‌اند.
  • جمع مبالغ با PDF مطابقت دارد.
  • ستون‌های عددی واقعاً Number هستند.
  • شناسه‌ها و کدها به‌صورت Text ذخیره شده‌اند.
  • فایل دارای Sheet هشدار یا گزارش خطاست.
  • چند ردیف به‌صورت دستی با منبع مقایسه شده‌اند.

سوالات متداول

چگونه PDF را به اکسل تبدیل کنیم؟

برای PDF متنی می‌توانید از قابلیت Export در Adobe Acrobat استفاده کنید. برای PDF اسکن‌شده ابتدا OCR انجام دهید و سپس با هوش مصنوعی ساختار سطرها و ستون‌ها را بازسازی کنید.

آیا هوش مصنوعی می‌تواند جدول فارسی PDF را استخراج کند؟

بله. مدل‌های چندوجهی می‌توانند تصویر جدول فارسی را تحلیل کنند؛ اما اعداد، تاریخ‌ها، کدها و سطرهای چندخطی باید پس از استخراج کنترل شوند.

چگونه PDF اسکن‌شده را به Excel تبدیل کنیم؟

صفحات را به تصویر واضح تبدیل کنید، OCR اجرا کنید، خروجی را به ساختار JSON یا CSV تبدیل کنید و پس از اعتبارسنجی فایل XLSX بسازید.

بهترین فرمت واسط برای استخراج جدول چیست؟

JSON برای فرایندهای خودکار مناسب‌تر است، زیرا علاوه بر ردیف‌ها می‌تواند شماره صفحه، هشدارها، مقدارهای نامشخص و عنوان جدول را نیز نگه دارد.

آیا ChatGPT می‌تواند PDF را به Excel تبدیل کند؟

در صورت پشتیبانی حساب از بارگذاری و تحلیل فایل، می‌توانید PDF را بارگذاری و خروجی ساختاریافته یا فایل Spreadsheet درخواست کنید. نتیجه باید با سند اصلی کنترل شود.

آیا Gemini فایل PDF را تحلیل می‌کند؟

Gemini از بارگذاری و تحلیل انواع اسناد پشتیبانی می‌کند. می‌توانید صفحات و ستون‌های موردنظر را مشخص و خروجی CSV یا جدول درخواست کنید.

چرا ستون‌های خروجی جابه‌جا می‌شوند؟

PDF ممکن است ساختار واقعی جدول نداشته باشد یا ترتیب بصری ستون‌های فارسی با ترتیب ذخیره‌شده متفاوت باشد. نام و ترتیب ستون‌ها را صریحاً در پرامپت مشخص کنید.

چگونه اعداد فارسی را در Excel درست کنیم؟

اعداد فارسی و عربی را به رقم انگلیسی تبدیل کنید، جداکننده هزارگان را حذف و نوع سلول را براساس کاربرد روی Number یا Text تنظیم کنید.

چگونه از حذف صفر ابتدایی جلوگیری کنیم؟

ستون‌هایی مانند کد کالا، شماره حساب، کد پستی و شناسه را به‌صورت Text ذخیره کنید.

آیا می‌توان چند PDF را هم‌زمان پردازش کرد؟

بله. در یک سامانه خودکار بهتر است هر فایل و هر صفحه به‌عنوان یک Job جداگانه پردازش شود و نتایج پس از اتمام در یک فایل Excel ادغام شوند.

آیا API درواره برای OCR و استخراج جدول مناسب است؟

از طریق API درواره می‌توانید به مدل‌های چندوجهی دارای قابلیت Vision دسترسی داشته باشید و تصاویر صفحات را برای استخراج ساختاریافته ارسال کنید. مدل مناسب را براساس قابلیت ورودی تصویر، دقت و هزینه انتخاب کنید.

جمع‌بندی

تبدیل PDF به اکسل فقط تغییر پسوند فایل نیست. برای تولید یک خروجی قابل‌اعتماد باید نوع PDF، ساختار جدول، کیفیت اسکن، زبان، اعداد، تاریخ‌ها، واحدها و سلول‌های ادغام‌شده را در نظر بگیرید.

برای PDF متنی و ساده، تبدیل مستقیم با Adobe Acrobat ممکن است کافی باشد. برای PDF اسکن‌شده یا جدول‌های پیچیده، ترکیب OCR و هوش مصنوعی نتیجه بهتری ارائه می‌دهد. در این روش مدل ساختار جدول را تشخیص می‌دهد، داده‌ها را به JSON یا CSV تبدیل می‌کند و سپس خروجی Excel ساخته می‌شود.

مهم‌ترین اصل این است که مدل نباید مقادیر ناخوانا را حدس بزند. موارد مشکوک باید علامت‌گذاری شوند و خروجی با تعداد ردیف‌ها، جمع مبالغ و نمونه‌گیری از صفحات اصلی اعتبارسنجی شود.

اگر می‌خواهید فرایند استخراج جدول از PDF را در نرم‌افزار، سامانه حسابداری، پنل سازمانی یا گردش کار اسناد خود پیاده‌سازی کنید، درواره امکان دسترسی یکپارچه به مدل‌های هوش مصنوعی را از طریق API فراهم می‌کند. برای انتخاب مدل و مشاهده قیمت‌های به‌روز، صفحه مدل‌های درواره را ببینید.

مقالات مرتبط

برای مطالعه شرایط استفاده و محدودیت‌های مسئولیت، صفحه «سلب مسئولیت» را مشاهده کنید.

Read more

اتوماسیون هوش مصنوعی چیست؟ کاربردها و آموزش ساخت AI Automation

اتوماسیون هوش مصنوعی چیست؟ کاربردها و آموزش ساخت AI Automation

اتوماسیون هوش مصنوعی با ترکیب گردش‌کارهای خودکار و مدل‌های هوش مصنوعی، پردازش متن، دسته‌بندی، استخراج اطلاعات و تصمیم‌های پیشنهادی را خودکار می‌کند. در این راهنما، معماری و ساخت نمونه عملی آن با API درواره را می‌آموزید.

Agentic Commerce چیست؟ آینده خرید با ایجنت هوش مصنوعی

Agentic Commerce چیست؟ آینده خرید با ایجنت هوش مصنوعی

Agentic Commerce شیوه‌ای جدید برای خرید اینترنتی است که در آن ایجنت هوش مصنوعی می‌تواند نیاز کاربر را بفهمد، محصولات را جست‌وجو و مقایسه کند و فرایند خرید را پیش ببرد. در این راهنما با معماری، UCP، ACP و پیاده‌سازی آن با API درواره آشنا می‌شوید.