اگه تا حالا خواسته باشی یه PDF رو دقیقاً همون جایی که می خوای توی صفحه نشون بدی، می دونی که iframe و تگ embed همه جا یکسان رفتار نمی کنن. بعضی مرورگرهای موبایل فقط یه دکمه دانلود نشون می دن و ظاهر نمایشگر هم دست خودت نیست. pdfjs-dist برای همین مشکل به درد می خوره. فایل PDF رو توی جاوااسکریپت می خونه و صفحه ها رو روی canvas می کشه. نتیجه اینه که نمایش توی مرورگرهای مختلف تقریباً شبیه هم می شه و ظاهرش دست خودته.
pdfjs-dist همون بسته توزیعی PDF.js هست؛ پروژه ای که موزیلا برای نمایشگر PDF داخلی فایرفاکس نگه می داره. برای همین لازم نیست سورس پروژه رو بیلد کنی. فقط بسته رو نصب می کنی یا فایل ها رو کنار سایتت می ذاری. پردازش سنگین فایل روی یه worker جدا انجام می شه و صفحه قفل نمی کنه. برای متن قابل انتخاب و جستجو هم می شه یه لایه متنی روی تصویر صفحه انداخت. یه نسخه سازگارتر با مرورگرهای قدیمی هم کنار نسخه اصلی هست. اگه بین مخاطب هات مرورگر کهنه زیاده، سراغ اون برو.
این کتابخانه برای توسعه دهنده ها و تیم هایی خوبه که نمایشگر اختصاصی لازم دارن: پیش نمایش فاکتور و قرارداد توی پنل کاربری، کتاب و جزوه توی سایت آموزشی، یا کاتالوگ محصول توی یه قالب سفارشی. یه نکته ایرانی هم داره. نمایشگرهایی که به سرویس خارجی وصلن، مثلاً iframe از یه سرویس بیرونی، توی روزهای محدودیت اینترنت بین الملل ممکنه کند بشن یا اصلاً باز نشن. وقتی خودِ کتابخانه روی هاست خودته، نمایشگر هم تا وقتی سایتت بالاست کار می کنه.
ولی همه جا به این کتابخانه نیاز نداری. اگه فقط می خوای کاربر PDF رو دانلود کنه، یه لینک ساده کافیه. pdfjs-dist افزونه آماده وردپرس هم نیست. یه کتابخانه است و خودت یا برنامه نویس تیمت باید کدش رو وصل کنید. فایل های بزرگ رو هم بهتره صفحه به صفحه رندر کنی، نه همه رو یکجا.
چند نکته موقع استفاده: فایل اصلی و فایل worker باید هم نسخه باشن، وگرنه خطای ناسازگاری می گیری. اگه PDF روی دامنه دیگه ای باشه، تنظیم CORS رو چک کن. توی PDFهای فارسی معمولاً فونت ها داخل فایل جاسازی شدن و نمایش مشکلی نداره، اما استخراج متن فارسی رو حتماً با چند نمونه واقعی امتحان کن. مجوز کتابخانه Apache هست و استفاده تجاری ازش آزاده، به شرط رعایت شرط های مجوز. نسخه های رسمی و بدون تغییر pdfjs-dist توی مخزن داخلی ما هم در دسترسه و برای دریافتش لازم نیست به منبع خارجی وصل بشی.
راهنمای استفاده
راه انداختن pdfjs-dist توی یه صفحه معمولی چند قدم بیشتر نیست. کد آماده اش پایین همین صفحه هست، اینجا فقط ترتیب کار رو می گم:
- فایل اصلی کتابخانه و فایل worker رو از همین مخزن بگیر و کنار فایل های سایتت بذار، مثلاً توی پوشه js قالب یا افزونه ات. اگه با npm کار می کنی، بسته pdfjs-dist رو نصب کن و با باندلرت استفاده اش کن.
- فایل اصلی رو توی صفحه لود کن و مسیر فایل worker رو توی GlobalWorkerOptions.workerSrc بده. مسیر باید درست باشه و فایل worker هم نسخه فایل اصلی باشه.
- یه تگ canvas توی HTML بذار.
- با getDocument فایل PDF رو باز کن. ورودیش آدرس فایل یا داده خام فایله.
- با getPage شماره صفحه رو بگیر، با getViewport اندازه و بزرگنمایی رو تعیین کن و بعدش render رو روی canvas صدا بزن.
- برای دکمه های قبلی و بعدی، شماره صفحه رو عوض کن و دوباره رندر کن.
توی وردپرس فایل ها رو با wp_enqueue_script توی قالب یا افزونه خودت لود کن و آدرس PDF رو از کتابخانه رسانه بگیر. بعد از اولین تست، کنسول مرورگر رو نگاه کن. بیشتر خطاهای اول کار از مسیر اشتباه worker یا مشکل CORS می آد.