Skip to content

Instantly share code, notes, and snippets.

@sepsol
Last active October 8, 2023 16:22
Show Gist options
  • Save sepsol/b68c8e7f62140484228ce83c5b9e4ee1 to your computer and use it in GitHub Desktop.
Save sepsol/b68c8e7f62140484228ce83c5b9e4ee1 to your computer and use it in GitHub Desktop.

فراخوان جذب نیروی برنامه‌نویس جاوا‌اسکریپت و Node.js برای افزودن قابلیت «ستون‌های مرتبط» به پکیج pdfmake

مقدمه:

ما به دنبال یک برنامه‌نویس باتجربه برای یک پروژه هستیم که هدف آن افزودن یک قابلیت به بسته‌ی متن‌باز pdfmake در NPM است.

صورت مسئله:

بسته‌ی pdfmake در حال حاضر فاقد قابلیت ستون‌های مرتبط است که در issue #604 به مدت زیادی درخواست شده است.

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

Screenshot

Problem Showcase

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

برای درک عملی این موضوع، می‌توانید با استفاده از نمونه‌ی document definition پیوست در pdfmake playground این رفتار را آزمایش کنید.

Sample Document Definition
var dd = {
    content: [
        {
            columns: [
                {
                    table: {
                        widths: ['*', '*'],
                        headerRows: 1,
                        body: [
                            ['Col1', 'Col2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                            ['1', '2'],
                        ],
                    },
                },
                {
                    table: {
                        widths: ['*', '*'],
                        body: [
                            ['Col3', 'Col4'],
                            ['3', '4'],
                            ['3', '4'],
                        ],
                    },
                },
            ],
        },
    ],
};

اهداف پروژه:

وظیفه‌ی اصلی شما پیاده‌سازی ویژگی «ستون‌های مرتبط» در pdfmake است. ما به پیاده‌سازی‌های همگن که با API موجود بسته همخوانی داشته باشند ارزش می‌دهیم. همچنین ما شما را تشویق می‌کنیم که پس از اتمام کار، برای پکیج اصلی یک PR ثبت کنید و کاملاً اعتبار کار خود را دریافت کنید. در واقع، راه‌حل شما باید چیزی باشد که بتواند issue ذکر شده را رسما ببندد و با پکیج ادغام شود.

راه‌حل شما نباید مثال ارائه شده یا هر داده‌ی ورودی‌ای را مستقیماً تغییر دهد. به جای آن، باید API و عملکرد اصلی پکیج را گسترش دهد تا با هر ورودی معتبر pdfmake (جدول، متن و غیره) به صورت dynamic کار کند. پیاده‌سازی شما باید الهام گرفته شده از منطق پردازش و چاپ اطلاعات در داخل پکیج pdfmake و نحوه‌ی جاری شدن مطالب طویل از یک صفحه به صفحه دیگر در این پکیج باشد، با این تفاوت که برای ستون‌های داخل یک صفحه هم کار کند.

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

تجربه مورد نیاز:

  • تسلط به دستور زبان قدیمی JavaScript ES5.
  • درک قوی از وراثت در JavaScript با استفاده از prototypes.
  • درک برنامه‌نویسی شیءگرا یا OOP.
  • آشنایی با ماژول fs (FileSystem) در Node.js و کار با فایل PDF.
  • تجربه در ساخت پکیج NPM مفید است.
  • کار قبلی با خود پکیج pdfmake یا وابستگی آن pdfkit هم یک امتیاز است.
  • مشارکت قبلی در پروژه‌های متن‌باز بسیار مطلوب است.
  • باید کار کردن با ابزار کنترل ورژن Git را بلد باشید.
  • حداقل یک سال تجربه‌ی کار حرفه‌ای برنامه‌نویسی.

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment