1. Kirish
Loyihani bajarish jarayonida foydalanuvchi hisob-kitob va hujjat ma'lumotlarini PDF shaklida yuklab olish imkoniyatiga ehtiyoj sezdi.
Boshida oddiygina PDF faylini yaratish kifoya deb o'ylagan edim, lekin asl ko'rib chiqish jarayonida bir nechta e'tiborga olish kerak bo'lgan masalalar bor edi.
-
Haqiqiy yozuvni qo'llab-quvvatlash
-
Tashkiliy o'zgarish qulayligi
-
Litsenziya muammosi
-
tarkibiy ishlab chiqarish
-
saqlash quvvati
Xususan, hujjat shaklini o'zgartirish so'rovlari tez-tez yuzaga keladigan ish xususiyatiga ko'ra, PDF yaratishning o'zidan ko'ra, layoutni qanchalik oson o'zgartirish mumkinligi muhim talab bo'ldi.
Shu bilan birga, bir nechta PDF kutubxonalarini ko'rib chiqib, loyiha uchun mos texnologiyani tanlash jarayonini davom ettirdik.
2. Kutubxona ko'rikdan o'tdi
iText
iText Java sohasida eng keng tarqalgan PDF kutubxonasi hisoblanadi.
Fonksiyalari boy va ko'p manbalar mavjudligi tufayli, amalga oshirishning qiyinligi pastroq edi.
Ammo tijorat foydalanishida litsenziya cheklovlari mavjud bo'lganligi sababli loyiha qo'llanilganda alohida ko'rib chiqish zarur edi.
OpenPDF
OpenPDF iText asosidagi ochiq manba kutubxonasi bo'lib, bepul foydalanish imkoniyatini berdi.
Biroq, uslublarni ob'ektlar darajasida to'g'ridan-to'g'ri yozish zarurligi mavjud edi.
Hujjat tuzilishi murakkablashgan sari kod hajmi oshadi va saqlash yukini ko'paytiradi deb hisobladik.
Apache PDFBox
PDFBox ishlash va barqarorlik jihatidan mukammal edi.
Biroq, ko'pgina joylashuvlarni koordinata asosida yozish zarurati bo'lganligi sababli, rivojlantirish xarajatlari yuqori edi.
Oddiy joylashuv o'zgarishlari uchun ham koordinatalarni o'zgartirish zarur bo'lganligi uchun ekran dizaynini o'zgartirishga moslashuvchanlikni ta'minlash qiyin deb hisobladik.
OpenHTMLtoPDF
OpenHTMLtoPDF HTMLni PDFga aylantiruvchi kutubxona hisoblanadi.
HTML va CSSni to'liq ishlatish imkoniyati eng katta afzalligi edi.
Xususan, mavjud nashr aktivlarini qayta ishlatish va joylashuvni HTML darajasida o'zgartirish mumkinligi saqlash davrida kuchli saqlashni ta'minlaydi deb hisobladik.
Biroq, brauzer darajasida barcha CSSni qo'llab-quvvatlamaydi, shuning uchun ba'zi ilg'or joylashuvlarda cheklovlar mavjud.
3. Yakuniy tanlov
Yakuniy natijada OpenPDF va OpenHTMLtoPDFga asoslangan holda taqqoslash amalga oshirildi.
|
Element |
OpenPDF |
OpenHTMLtoPDF |
|---|---|---|
|
Oʻqitish murakkabligi |
Oʻrtacha |
Past |
|
Tuzilishi oʻzgartirish |
Qiyin |
Oson |
|
HTMLdan foydalanish |
Imkoni yoʻq |
Imkoni bor |
|
Bepul foydalanish |
Imkoni bor |
Imkoni bor |
|
Texnik xizmat ko'rsatish |
Odatda |
Yuqori |
Loyihaning xususiyatlari sababli PDF formati tez-tez o'zgarishi mumkinligi sababli, ishlab chiqarish samaradorligini va texnik xizmat ko'rsatishni muhim omil sifatida hisobga oldik.
Shu sababli OpenHTMLtoPDF-ni oxirgi tanlov sifatida qabul qildik.
4. Amalga oshirish jarayoni
Amalga oshirish asosan uch bosqichdan iborat.
-
Biznes ma'lumotlarni ko'rish.
-
Ma'lumotlarga asoslanib HTML shablonini yaratish.
-
OpenHTMLtoPDF orqali PDF fayliga o'zgartirish.
Ushbu tuzilmani qo'llash orqali PDF yaratish mantiqini va ekran ko'rsatish mantiqini ajratish imkoniyatiga ega bo'ldik va kelajakda yangi shakllar qo'shilsa, faqat HTML shablonini qo'shib, bir xil yaratish mantiqini qayta ishlatish imkonini yaratdik.
5. Muammo va xavfsizlikni ko'rib chiqish masalalari
OpenHTMLtoPDF asosiy shriftlari koreys tilini qo'llab-quvvatlamaydi.
Shuning uchun koreys tilida havola qo'shish muammolari yuzaga kelishi mumkin, buni hal qilish uchun koreys tilini qo'llab-quvvatlovchi shriftlarni resurslarga qo'shish vabuilder.useFont()Usuldan foydalanib, builder yaratilishi paytida shriflarni aniq belgilab, ushbu muammoni hal qilish mumkin.
Shuningdek, OpenHTMLtoPDF HTMLni rendering qilib, PDF yaratish uchun kutubxona hisoblanadi.
Shu sababli, foydalanuvchi kiritgan qiymatlarni HTMLga to‘g‘ridan-to‘g‘ri kiritish hollarda, kutilmagan HTML teglarining mavjudligi mumkinligi tufayli hujjat tuzilishi o‘zgarishi mumkin.
Buni oldini olish uchun HTML yaratilishi vaqtida barcha foydalanuvchi kiritilgan qiymatlarga HtmlUtils.htmlEscape() qo‘llanildi, bunday qilib HTML teglar matn sifatida o‘zgartiriladi va foydalanuvchi kiritgan qiymat HTML tuzilishiga ta'sir qila olmaydi.
Shuningdek, HTML shablonlari serverda boshqariladi va foydalanuvchi kiritishlari faqat shablon ichidagi belgilangan joylarda qo'shilishi uchun mo'ljallangan.
Xususan, tasvir(img), uslub(style), tashqi resurs URL’lari kabi HTML rendering jarayonida tashqi resurslarni ishtirok etishiga imkon beruvchi maydonlarda foydalanuvchi kiritilgan qiymatlar aks etmasligi uchun tashkil etilgan, shunda kutilmagan resurslarga kirish yuz bermasin.
Shu tarzda, foydalanuvchi kiritgan qiymatlar tufayli HTML tuzilishining o'zgarish ehtimolini minimallashtirish va PDF yaratish jarayonidagi xavf-xatarlarni kamaytirish imkoniyatiga ega bo'ldik.
6. Qo'llanish natijalari
OpenHTMLtoPDF ni joriy qilganidan so'ng, quyidagi samaralarga erishish mumkin edi.
-
HTML/CSS asosida tez rivojlanish mumkin
-
Loyihalash xarajatlarini kamaytirish
-
Nashr resurslaridan foydalanishni qayta tiklash
-
Bepul ochiq manbani ishlatish orqali litsenziya yukini kamaytirish
Javobgacha o'zgartirish talab qilinганда Java kodini o'zgartirmasdan faqat HTML shablonini o'zgartirish kerakligi saqlar osonligi nuqtai nazaridan eng katta afzallik edi.
7. Xulosa
PDF yaratish funksiyasi o'z-o'zidan nisbatan oddiy talablar kabi ko'rinishi mumkin.
Biroq, aslida litsenziya, saqlanish jihati, xavfsizlik, koreys tilini qo'llab-quvvatlash kabi turli elementlarni birga hisobga olishimiz kerak edi.
Ushbu ish orqali texnologiya tanlashda faqat funksiyani emas, balki uzoq muddatli saqlash xarajatlari va operatsiya qulayligini ham hisobga olish muhimligini yana bir bor his qildim.
Manba
1. https://github.com/danfickle/openhtmltopdf
Novin