اگر تا به حال خواسته باشید با pdfmake یک فایل PDF فارسی تولید کنید، احتمالاً اولین کاری که انجام میدهید این است:
rtl: true
من هم دقیقاً همین کار را کردم.
و مطمئن بودم مشکل حل شده است.
اما نتیجه چیزی نبود که انتظارش را داشتم.
متن فارسی کاملاً برعکس نمایش داده میشد!
نه فقط راستچین نبود، بلکه ترتیب کلمات هم برعکس شده بود و خروجی عملاً غیرقابل استفاده بود.
همان لحظه فهمیدم که قرار نیست این مشکل با یک گزینه ساده حل شود.
در حال توسعه قابلیت تولید PDF برای پروژه SaaS خودم بودم؛ یک پلتفرم ساخت سیستمهای رزرو نوبت برای کسبوکارها.
همه چیز آماده بود.
دادهها از دیتابیس خوانده میشدند.
فونت فارسی هم اضافه شده بود.
فقط کافی بود متنها به درستی نمایش داده شوند.
به نظر ساده میآمد.
ولی نبود.
rtl: trueوقتی مستندات pdfmake را دیدم و گزینه RTL را پیدا کردم، با خودم گفتم:
عالیه! دقیقاً همون چیزیه که لازم دارم.
اما خروجی شوکهکننده بود.
متن فارسی برعکس چاپ میشد.
نه فونت مشکل داشت.
نه دادهها.
نه Encoding.
مشکل از خود نحوه پردازش متنهای RTL بود.
مثل هر برنامهنویس دیگری شروع کردم به جستجو.
GitHub Issueها...
Stack Overflow...
پکیجهای مختلف...
پاسخهای قدیمی...
راهکارهای عجیب مثل برعکس کردن رشتهها قبل از ارسال به pdfmake...
حتی چند کتابخانه جایگزین را هم امتحان کردم.
بعضیها اصلاً کار نمیکردند.
بعضیها فقط بخشی از مشکل را حل میکردند.
بعضیها سالها بود بهروزرسانی نشده بودند.
هر بار فکر میکردم «این یکی حتماً جواب میدهد» و هر بار دوباره به نقطه اول برمیگشتم.
صادقانه بگویم، بیشتر زمانم صرف جنگیدن با PDF شد تا توسعه خود محصول.
بعد از ساعتها جستجو، بالاخره به پکیجی رسیدم که اسمش به طرز عجیبی ساده بود:
pdfmake-rtl
همین.
بدون ترفند.
بدون دستکاری رشتهها.
بدون برعکس کردن متن.
بعد از جایگزین کردن آن، همان دادههایی که تا چند دقیقه قبل برعکس چاپ میشدند، کاملاً درست نمایش داده شدند.
حروف به هم متصل بودند.
ترتیب کلمات طبیعی بود.
و خروجی دقیقاً همان چیزی بود که انتظار داشتم.
لحظهای بود که فقط با خودم گفتم:
«کاش زودتر پیدایش کرده بودم!»
گاهی اوقات مستندات رسمی همه جواب را ندارند.
گاهی گزینهای که اسمش دقیقاً همان چیزی است که میخواهی (rtl)، در عمل مشکل تو را حل نمیکند.
و گاهی راهحل واقعی را نه در صفحه اول گوگل، بلکه وسط یک Issue قدیمی یا یک پکیج کمتر شناختهشده پیدا میکنی.
این یکی از همان روزهایی بود که یادم انداخت توسعه نرمافزار فقط نوشتن کد نیست؛ بخش بزرگی از آن پیدا کردن راهحل مناسب است.
اگر از pdfmake استفاده میکنید و متن فارسی یا عربی در خروجی PDF برعکس نمایش داده میشود، قبل از اینکه ساعتها وقتتان را صرف دستکاری رشتهها یا نوشتن راهحلهای موقت کنید، نگاهی به pdfmake-rtl بیندازید.
ممکن است همان راهحلی باشد که من بعد از ساعتها جستجو در اینترنت پیدایش کردم.
اگر این مقاله باعث شود حتی یک توسعهدهنده کمتر آن مسیر خستهکننده را تکرار کند، ارزش نوشتنش را داشته است.