از تجزیه PDF در زمان رندر کردن دست بردارید
اکثر ابزارهای استخراج PDF در سمت فرانتاند شکست میخورند.
توسعهدهندگان سعی میکنند ساختار سند را از خروجی بصری حدس بزنند. آنها برای یافتن ستونها، جداول یا لیستها، به پیکسلهای رندر شده نگاه میکنند. آنها از بینایی ماشین یا مجاورت پیکسلها استفاده میکنند تا تصمیم بگیرند یک کادر از کجا شروع میشود.
این روش اشتباهی برای ساختن است.
یک PDF از قبل حاوی دادههای ساختاری صریح در جریان اپراتور (operator stream) خود است. یک جدول فقط مجموعهای از پیکسلهای نزدیک به هم نیست؛ بلکه با دستورات خاصی مانند moveTo ،lineTo یا rectangle ترسیم شده است. مرزهایی که میخواهید پیدا کنید، از قبل در منبع کدگذاری شدهاند.
اگر استخراجکننده شما در زوم ۱۰۰٪ در مقایسه با زوم ۱۵۰٪، ستونهای متفاوتی به شما میدهد، شما در حال استخراج ساختار نیستید، بلکه در حال تطبیق الگو با آثار بصری (visual artifacts) هستید.
استفاده از روشهای اکتشافی بصری (visual heuristics) را متوقف کنید. تجزیه جریان اپراتور را شروع کنید.
چرا جریان اپراتور بهتر است:
- قطعی (deterministic) است. بدون توجه به مقیاس یا فونتهینتینگ (font hinting)، به یک شکل عمل میکند.
- از دادههای واقعی استفاده میکند. شما از مسیرها و مختصات واقعی تعریف شده توسط سازنده استفاده میکنید.
- از خطاهای ریاضی جلوگیری میکند. برای مثال، استفاده از نقاط میانی بین مراکز متن برای یافتن نواحی، منجر به باگهای گرد کردن (rounding bugs) میشود. استفاده از لبه بالایی واقعی یک کادر محدودکننده (bounding box)، تنها راه صحیح است.
مسیر سخت، مسیر درست است.
شما باید پشته CTM را درک کنید. باید وضعیتهای ماتریس را دنبال کرده و زیرمسیرها (subpaths) را طبقهبندی کنید. برای تسلط بر آن، باید مشخصات PDF و کد منبع را مطالعه کنید.
این کار در ابتدا تلاش بیشتری میطلبد، اما برای هر PDF که کاربر آپلود میکند کار میکند. ابزارهای مبتنی بر پیکسل فقط برای تعداد کمی از فایلها در مجموعه تست شما کار میکنند.
یک استخراجکننده واقعی بسازید، نه یک نسخه نمایشی (demo).