ActiveX yordamida dasturga PDF ko'ruvchini qo'shing. Delphi pdf o'quvchi komponentlarini PDF fayllarni yaratish bo'yicha insho

Ushbu misol uchun bizga Rave yorlig'ida joylashgan quyidagi komponentlar kerak bo'ladi. Shunday qilib, bizga kerak bo'lgan komponentlarni o'rnatishni boshlaylik, xususan:

  • TRvNDRWriter
  • TRvRenderPdf
  • TB tugmasi

Men ushbu komponentlar haqida bir oz to'xtalib, ular nima xizmat qilishini tushunishni taklif qilaman. Aytgancha, ular haqida men sotib olgan bir nechta kitobdan ma'lumotni olib tashladim. progbook.ru... Shuning uchun, agar siz Delphi-da munosib kitoblarni sotib olishni istasangiz, unda siz ushbu do'konga xush kelibsiz.

Shunday qilib, birinchi navbatda bizda TRvNDRWriter komponenti mavjud. Matn yoki grafikdan qat'i nazar, oqim orqali pdf faylga ma'lumot yozish uchun bizga ushbu komponent kerak.

Protsedura TForm1.Button1Click (Sender: TObject); var Streams: TMemoryStream; Oqimlarni boshlash: = TMemoryStream.create; RvNDrWriter1.Stream:=Oqimlar; RvNDRWriter1.Execute; RvRenderPdf1.PrintRender (Oqimlar, "test.pdf"); ShellExecute (Handle, nil, "test.pdf", "", "", SW_SHOW); FreeAndNil (oqimlar); oxiri;

Keyingi komponent TRvRenderPdf. Bu bizga matnli yoki grafik ma'lumotni yaratish, to'g'rirog'i, ko'rsatish uchun kerak. Shunga ko'ra, tugmani bosganimizdan so'ng, biz pdf faylimizga kerakli ma'lumotlarni yozamiz.

Ammo ko'p gapirmaylik, to'g'ridan-to'g'ri bizni qiziqtirgan mavzuga, ya'ni dasturlashga o'tamiz :)

Birinchidan, biz oddiy bo'sh pdf faylni yaratishimiz va uni dasturimizning ildiz papkasiga joylashtirishimiz kerak.

Aslida, ushbu kod yordamida biz kerakli ma'lumotlarni chizadigan oqim yaratamiz, shundan so'ng biz ko'rsatishni boshlaymiz, ma'lumotlar tushiriladigan yakuniy pdf faylimizni ko'rsatamiz va oxirida oqimni yopamiz.

Buni amalga oshirgandan so'ng, bizga ma'lumotlarni chizishda sodir bo'ladigan hodisa kerak bo'lsa, bu holda biz kerakli ma'lumotlarni ko'rsatamiz.

Keling, kodni tahlil qilaylik. Birinchidan, men * .bmp tasvirini yuklayman, bmp o'zgaruvchisini va TBitmap sinfining ob'ektini yarataman. Men uni pdf-faylimizga chizish uchun yuklayman.

Menimcha, bundan keyin hamma narsani aniq tasvirlab berishning hojati yo'q, shuning uchun PrintHeader protsedurasi - hujjat sarlavhasiga yozuv qo'shadi, PrintFooter protsedurasi - hujjat oxiriga yozuv qo'shadi. PrintBitmap protsedurasi - hujjatga rasm qo'shadi, SetFont protsedurasi - hujjat uchun kerakli shriftni o'rnatadi, FontColor protsedurasi - hujjat uchun kerakli shrift rangini o'rnatadi.

Barcha keyingi grafik funksiyalar va protseduralar chiqish bilan bir xil grafik ma'lumotlar boshqa komponentlarning tuvalida.

Hujjatda yangi varaq yaratish uchun NewPage funksiyasidan foydalanaman. Undan keyin ma'lumot chiqishiga qo'shiladigan hamma narsa hujjatning yangi varag'ida ko'rsatiladi.

Muhim Shunday qilib, barcha modullar: RpRender, RpRenderPDF, RpDefine, RpBase, RpFiler, RpRave, RpCon loyihaga ulangan!

Ushbu maqolada biz o'zingizni qanday yaratishni ko'rib chiqamiz pdf-hujjatlar va keyingi maqolada qanday qilib ko'rishingiz mumkinligini ko'rib chiqamiz pdf-loyihalaridagi hujjatlar, shuningdek, chop etish mazmuni, hujjat bo‘ylab harakatlanish va hokazo.

Buning uchun bizga yorliqdagi komponentlar kerak Rave... Keling, ishlashimiz kerak bo'lgan komponentlarni o'rnatamiz va bular:

  • TRvNDRWriter
  • TRvRenderPdf
  • TB tugmasi

Komponent TRvNDRWriter ichida yozib olish uchun mo'ljallangan pdf-fayl axboroti (matn, grafik) oqim orqali.

Komponent TRvRenderPdf axborotni yaratish, ko'rsatish (matn, grafik va boshqalar) uchun mo'ljallangan. Xo'sh, tugmani bosib, biz o'zimizga biror narsa kiritamiz pdf-fayl.

Biz nazariyadan ko'p yozmaymiz, lekin biz darhol dasturlashga o'tamiz, lekin birinchi navbatda oddiy bo'sh joy yaratishimiz kerak. pdf-fayl va uni dasturning ildiziga qo'ying. Voqea haqida OnClick tugmachamiz uchun quyidagi kodni yozamiz:

TForm 1 protsedurasi. Button1Click (Yuborish: TObject); var Streams: TMemoryStream; Oqimlarni boshlash: = TMemoryStream. yaratmoq; RvNDrWriter1. Oqim: = Oqimlar; RvNDRWriter1. Bajarish; RvRenderPdf1. PrintRender (Oqimlar, "test.pdf"); ShellExecute (Handle, nil, "test.pdf", "", "", SW_SHOW); FreeAndNil (oqimlar); oxiri;

Biz barcha ma'lumotlarni chizadigan oqim yaratamiz, keyin biz renderlashni boshlaymiz, ma'lumotlar ko'rsatiladigan faylni belgilaymiz va oxirida oqimni yo'q qilamiz.

Endi bizga ma'lumotlarni chizishda sodir bo'ladigan voqea kerak bo'ladi, unda biz barcha ma'lumotlarimizni ko'rsatamiz. Komponentni tanlash TRvNDRWriter va ushbu komponentning voqealar ro'yxatidan o'ting, shundan so'ng biz voqeani topamiz OnPrint va bu holatda biz quyidagi kodni yozamiz:

TForm 1 protsedurasi. Chop etish (yuboruvchi: TObject); start bmp: = TBitmap. Yaratmoq; bmp. LoadFromFile ("test.bmp"); RvNDRWriter1 bilan SetFont dasturini ishga tushiring ("Arial", 16); FontColor: = clGreen; Chop etish ("Test matni"); PrintHeader ("PDF faylni boshlang", pjCenter); PrintFooter ("End PDF fayl", pjCenter); LineTo (10, 10); PrintBitmap (1, 1, 1, 1, bmp); oxiri; FreeAndNil (bmp); oxiri;

Xo'sh, avval rasmni yuklaymiz * .bmp tabiiy ravishda o'zgaruvchan bmp, bizda sinf ob'ekti bor TBitmap... Biz uni o'z ichiga chizish uchun yuklaymiz pdf-hujjat.

Va keyin, menimcha, hamma narsa aniq, protsedura Chop etish sarlavhasi- hujjat (sahifa) sarlavhasida, protsedurada yozuvni ko'rsatadi Print Footer- hujjat (sahifa) oxirida yozuvni ko'rsatadi. Jarayon Print Bitmap- hujjatdagi tasvirni, protsedurani aks ettiradi SetFont- hujjat shrifti, protsedurasini o'rnatadi Shrift rangi- hujjatning shrift rangini o'rnatadi.


nashr etilgan sana 23.09.2005 07:00 PDF-fayllarni yaratish bo'yicha insho

So'nggi paytlarda Internetda juda ko'p PDF konvertorlari, o'quvchilari va yozuvlari topildi. Va ularning aksariyati pul uchun taklif etiladi. Dasturning o'zi 10 dan 300 dollargacha. manba kodi ko'proq pul uchun narx 200 dollardan boshlanadi va bir joyda (bu bilan qiziqib, men Internetga chiqdim) 900 evrogacha.

Meni bu muammo dasturlash nuqtai nazaridan qiziqtirdi va natijalarini e'tiboringizga havola etaman. (Ushbu natijalarni men PDF-faylni ochganingizda uning ichki qismini o'rganayotganda olinganman umumiy qo'mondon F3 orqali)

Oddiy PDF fayl to'rt qismdan iborat :=

Nima bu

? Bu odatiy eslatma PDF versiyalari spetsifikatsiya. PDF faylining birinchi qatorida mavjud. Masalan, "% PDF-1.3" Yoz boshida chiqqan akrobatning yettinchi versiyasida bu raqam "% PDF-1.7" dir, lekin bu mahsulot versiyasi emas, bu spetsifikatsiya versiyasi. PDF-ning ikkinchi qatori kichik abrokadabra (keyinchalik foydalanish uchun mo'ljallangan) "% ​​vgpu"

Hamma PDF-ning birinchi qismini saralab oldi.

Ikkinchi qism nima deb ataladi ?

Javob juda oddiy: bu ob'ektlar ketma-ketligi bo'lib, ularning tavsifi sarlavha kabi matn shaklida taqdim etiladi.

Har bir ob'ekt, masalan, nomdagi seriya raqami bo'lgan matn qismidir "40 obj"

  • 4 bu ob'ektning seriya raqami
  • 0 bu faylning (qayta) avlod raqami, ya'ni fayl yangilanganda (tahrirlanganda). berilgan raqam ortadi
  • obj bu kodli so'z bo'lib, hujjat tanasida ob'ektga duch kelganimizni bildiradi

Barcha ob'ektlar bilvosita va to'g'ridan-to'g'ri bo'linadi. Hammasi bilvosita va ularning aksariyati so'zdan keyin obj ularning tanasida chegara bor "<<", означающее начало данных объекта. И в конце данных закрывающий делиметер ">> "va kod so'zi endobj

To'g'ridan-to'g'ri ob'ektlarning tanasida ochilish va yopish chegaralari bo'lmasligi kerak "<<", ">> "Barcha bilvosita ob'ektlar orqali kirish mumkin o'zaro mos yozuvlar jadvali... U fayl boshidan ob'ektning boshigacha bo'lgan ofset ko'rinishidagi havolalarni taqdim etadi (ob'ektdagi ma'lumotlar (chiziqlar) ajratilgan). #13#10 yoki #13 )

PDF-fayl tanasidagi "eng muhim" ob'ektning turi mag'rur nomga ega "/ Katalog"

4 0 obj<< /Type /Catalog /Pages 2 0 R /OpenAction [ 5 0 R /XYZ null 364 1 ] /PageMode /UseNone >> endobj

Aslida, "Salom dunyo" tipidagi minimal PDF-faylning tanasida 3 ta "asosiy" ob'ekt bo'lishi kerak. Men ularni turlari bo'yicha sanab o'taman:

  • "/ Katalog" havolani o'z ichiga oladi: sahifa daraxtiga ( / Sahifalar)
  • "/ Sahifalar" Hujjat sahifalari guruhiga havolani o'z ichiga oladi (masalan, 2 0 obj> endobj)
  • "/ sahifa" ma'lum bir sahifaga tegishli ob'ektlarga havolani o'z ichiga oladi. (Masalan, 3 0 obj> / Rotate 0 >>)
Va bir nechta "kichik"

Keling, sahifa obyektini tahlil qilaylik:

  • / Aylantirish dasturda ko'rsatilganda sahifa tasvirini necha darajaga aylantirish kerakligini ko'rsatadigan maydon
  • / MediaBox va / CropBox sahifa hajmini tavsiflovchi maydonlar
  • / Ota-ona ota-ona ma'lumotnomasi "/ Sahifalar"
  • / Manbalar bu maydon sahifani ko'rsatishda qaysi shriftdan foydalanish kerakligini tavsiflaydi (shrift alohida ob'ektdir) va ProcSet sozlamalari ushbu sahifaning ma'lumotlar oqimining qaysi mazmunini ko'rsatadi (maydon sifatida emas, balki ob'ekt sifatida ham belgilanishi mumkin)
  • / Tarkib"Sahifa" ob'ektidagi eng qiziqarli maydon ushbu sahifaning kontent ob'ektiga havolani beradi, bundan tashqari: agar "sahifa" ob'ektida bu maydon bo'lmasa, sahifa bo'sh.
Sahifa tarkibi:
Ob'ekt "oqim" 4 0 obj> oqim BT / F12 9 Tf 10 782 TD 0 -12,5 TD (Maks Fokin) Tj 0 -12,5 TD (mnb) Tj 0 -12,5 TD () Tj 0 -12,5 TD (Maks Privet) Tj 0 -12,5 TD (1) Tj 0 -12,5 TD (1) Tj 0 -12,5 TD (2) Tj 0 -12,5 TD (3) Tj 0 -12,5 TD (45) Tj ET endstream endobj / Uzunlik 305 bu maydon adan qancha baytni ko'rsatadi so'z oqim so'zga oxirgi oqim

Eng oddiy variant ob'ektdagi kodlanmagan va siqilmagan ma'lumotlar oqimidir oqim... Bu operatorlar bilan cheklangan BT va ET

BT matn ob'ektini boshlaydi - matnning boshlanishini tavsiflaydi ET matn ob'ektini tugatadi. - matnning oxirini tavsiflaydi / F12 9 Tf

  • / F12 bu ushbu sahifada ishlatiladigan shriftni tavsiflovchi ob'ektning kod nomi
  • 9 bu shrift o'lchami
  • Tf bu buni tavsiflovchi operatordir berilgan qator bug 'ob'ektida shrift va o'lcham sozlamalari mavjud
10 782 TD bu berilgan satr boshlanadigan raqamlar (sanoq yuqori chap burchakdan amalga oshiriladi) Tj - yangi qator operatori Xo'sh, qavs ichida bizning matnimiz

Men bu erda kod oqimini tushuntirmayman. U RC4, RC5, MD5 algoritmlariga asoslangan.

Ob'ekt nima Shrift 12 0 obj>

  • / Turi / Shrift Tabiiyki, turning nomi
  • / Subtip / Tur 1 pastki tur nomi
  • / Ism / F7 F7 bu kod nomi

PDF bir necha turdagi shriftlarni qo'llab-quvvatlaydi. Ular quyida keltirilgan

  • 1-turi, jumladan, quyi toʻplamlar va bir nechta asosiy “oniy suratlar”
  • 3-turi
  • TrueType, shu jumladan quyi to'plamlar
  • 0 yozing
Rostini aytsam, men 3-toifa, TrueType, jumladan pastki to'plamlarni, 0-toifani tushunmadim, ular haqida hech narsa deya olmayman.
1-turi esa quyidagi shriftlardir.

20 0 obj> endobj Bu birinchi turdagi shriftlar uchun kod nomlari bo'lgan ob'ekt. Ushbu kod nomi bilan siz ob'ektning o'zini osongina olishingiz mumkin shrift... 6 0 obj>

HAMMA: ya'ni minimal Quyidagi ob'ektlardan iborat: "katalog", "sahifalar", "sahifa", "Resurslar"(ixtiyoriy ravishda sahifa ob'ektida maydon sifatida mavjud bo'lishi mumkin), yozilmagan ob'ekt "oqim", ob'ektlar guruhi "shrift"

Nima ? Aslida, bu odatiy hol matn jadvali, so'zi bilan boshlanadi xref va uning tanasi hujjatdagi barcha bilvosita ob'ektlarga havolalarga ega. Bu erda 0000000016 00000 n 0000000105 00000 n 0000000169 00000 n 0000000356 00000 n 0000000713 00000 n 0000000892 00000 n 0000001006 00000 n 0000001125 00000 n 0000001247 00000 n 0000001373 00000 n 0000001486 00000 n 000000 n1604 00000 n 0000001486 00000 n 000000 f 0 27 0000000021 65535 xref bir misol n1604 0018 0000001967 00000 n 0000002084 00000 n 0000002203 00000 n 0000002326 00000 n 0000002439 00000 n 0000002558 00000 n 0000000024 00001 0000002751 00000 n 0000002831 00000 n 0000000000 00001 00000 n 0000002955 00000 0000002915 f n f 0 27 Bu raqamlar quyidagilarni bildiradi:

  • 0 - jadvaldagi birinchi ob'ekt raqami
  • 27 - jadvaldagi elementlar soni

Jadvalning birinchi elementi har doim "shaklga ega. XXXXXXXXX 65535 f"Bu erda X - raqam va 65535 - jadvalning birinchi elementi uchun sukut bo'yicha." f "belgisi" ozod", ya'ni ob'ekt ishlatilmaydi

Keling, ushbu jadvalning elementini tahlil qilaylik.

  • Birinchi 10 ta raqam fayl boshidan ob'ekt boshigacha bo'lgan ofsetdir.
  • 0000000016 fayl boshidan 16 baytdan keyin sizni ob'ekt haqida birinchi eslatma kutib olishini anglatadi, ya'ni, masalan, 4 0 obj

Ikkinchi beshta raqam fayl yaratish raqamidir. Agar fayl endigina yaratilgan bo'lsa, ular har doim nolga teng. Agar fayl o'zgartirilsa, bu raqam bittaga oshiriladi. Ya'ni, 0000000024 00001 f

Hozirgina yaratilgan kanonik PDF faqat bitta jadvalga ega. Ammo, agar fayl tahrir qilinayotgan bo'lsa, unda bunday jadvallar juda ko'p bo'lishi mumkin.

Jadvallarning aloqasi oxirgi element yordamida amalga oshiriladi va kodli so'z startxref

Kanonik, yangi yaratilgan PDF faylida faqat bitta jadval mavjud, jadvaldan keyin element mavjud treyler Va treylerdan keyin kod so'zi keladi startxref faylning boshidan jadvalning boshigacha bo'lgan ofsetni ko'rsatib, bu erda bir misol. treyler> startxref 173 %% EOF Bu shuni anglatadiki, hujjat boshidan boshlab 173 baytdan keyin kod so'zi bo'ladi. xref... Lekin, agar fayl tahrirlangan boʻlsa, fayldagi oxirgi treyler quyidagicha koʻrinadi: xref 0 3 0000000000 65535 f 0000003609 00000 n 0000003832 00000 n treyler]1 >> agar startx% OF ga aylantirilsa, E. havola qayerga ishora qiladi startxref 173, keyin biz maydonga ega bo'lgan treylerdan keyin keyingi jadvalni topamiz / Oldingi 3896 00000 n 0000001811 00000 n 0000001992 00000 n 0000002180 00000 n 0000002360 00000 n 3 16 0000000016 00000 n 0000000664 00000 n 0000000936 00000 n 0000001106 00000 n 0000001133 00000 n 0000001250 00000 n 0000001395 0000002760 00000 n 0000003438 006 00000 n 0000000 trailer] >> startxref 567% % EOF

Bu maydon / Oldingi 3896 bizni oldingi jadvalga va havolaga ishora qiladi startxref 567 keyingi jadvalga ishora qiladi va shunga o'xshash deyarli cheksiz, keyingi maydonda bo'lganda startxref ko'rmaymiz 0 ... Bu biz barcha jadvallarni o'qib chiqdik degan ma'noni anglatadi.

Bu inshoda, albatta, manba kodi yo'q. Mana: ikkita asosiy modul mavjud " PDF hujjat"va yordamchi" PDFBaseFonts"

Fayllar materialga biriktirilgan:

  • PDFDocument.pas va PDFBaseFonts.pas modullarining manba kodi (16 K) Yangilash 23.09.2005 7:02:00

Materialning muhokamasi [31-07-2006 06:33] 7 ta xabar

Ishlab chiquvchilar tomonidan e'lon qilingan komponentning xususiyatlari:

  • Vektor uchun qo'llab-quvvatlash va bitmap grafiklari PDF hujjatlarida
  • PDF hujjatlarini parol bilan himoyalash
  • AcroForms / PDF shakllarini qo'llab-quvvatlash
  • Suv belgilari
  • Avlod PDF hujjatlar ichki va tashqi havolalar, veb-havolalar va xatcho'plar bilan
  • To'liq Unicode qo'llab-quvvatlash
  • Bir nechta shriftni qo'llab-quvvatlash, matn formatlash, ko'p ustunli matn tartibi
  • TCanvas-ni qo'llab-quvvatlash
  • Hujjatdagi matn va grafik ma'lumotlarni siqish uchun o'rnatilgan arxivator
  • TIFF-ni PDF-ga aylantiring

Misol tariqasida, men komponent bilan birga kelgan demo ilovasini yaratishga qaror qildim THotPDF... Ilova juda oddiy - u ikkita havola va oddiy matnli PDF-ni yaratadi. Kod ham sodda va tushunarli:

TForm 1 protsedurasi. HelloWorldButtonClick (Yuborish: TObject); HPDF ni ishga tushiring. BeginDoc; HPDF. Joriy sahifa. PrintHyperlink (20, 35, "Veb-sayt:" + MainEdit. Matn, MainEdit. Text); HPDF. Joriy sahifa. SetFont ("Times New Roman", 16); HPDF. Joriy sahifa. SetRGBHyperlinkColor (clRed); HPDF. Joriy sahifa. PrintHyperlink (20, 50, "Buyurtma sahifasi:" + Xarid qilish tahrirlash. Matn, Xarid qilish. Matn); HPDF. Joriy sahifa. SetFont ("Times New Roman", 14); HPDF. Joriy sahifa. TextOut (20, 75, 0, "navigatsiya qilish uchun havolani bosing"); HPDF. EndDoc; oxiri;

Komponentning nozik tomonlariga kirmasdan ham, ushbu demo misolida nima sodir bo'layotganini va qandayligini tushunishingiz mumkin. Biz boshlaymiz, qaraymiz tashqi ko'rinish yaratilgan hujjat:

Hujjatdagi bu ikkita ko'k to'rtburchaklar ikkita sahifaga havolalar ... va "navigatsiya qilish uchun havolani bosing" oddiy matni umuman ko'rinmaydi. Garchi, men bunga ishonch bildirishim kerak bo'lsa-da, to'rtburchakni bosganingizda, havola ochiladi. Umuman olganda, ishlab chiquvchilar Delphi-ni XE3gacha qo'llab-quvvatlashni e'lon qilishga shoshilishdi yoki sinov versiyasi juda qiziq ishlaydi, ammo bu demoni ishga tushirgandan so'ng, men qandaydir tarzda THotPDF-dan bepul foydalanish istagini yo'qotdim. Keling, davom etaylik.

4. PDF Creator Pilot

Narxi: manbalarsiz 450 $ dan manbalar bilan 9950 $ (!!!) gacha
5-XE4
http://www.colorpilot.com/pdflibrary.html#download

Narxi deyarli Delphi XE3 Professional kabi kutubxona... Xo'sh, keling, bu kutubxona nima ekanligini ko'rib chiqaylik.

Ishlab chiquvchilar tomonidan e'lon qilingan xususiyatlar:

  • Oson PDF yaratish uchun kengaytirilgan usullar va xususiyatlar to'plami;
  • Mavjud PDF hujjatlarini o'qish va birlashtirish;
  • PDF hujjat sahifalarini qo'shish va o'chirish;
  • Unicode qo'llab-quvvatlash;
  • Har bir sahifa uchun moybo'yoqli belgilar yaratish;
  • PDF hujjatiga eskiz qo'shish;
  • Shriftlardan foydalanish va joylashtirish (TrueType, OpenType, Type1 va boshqalar);
  • JavaScript va giperhavolalar yordamida interaktiv PDF hujjatlarini yaratish;
  • AcroForm interaktiv elementlarini qo'llab-quvvatlash: matn kiritish maydonlari, tugmalar, radio tugmalar, ochiladigan ro'yxatlar, belgilash katakchalari;
  • yaratilgan PDF hujjatlarini shifrlash va parol bilan himoyalash;
  • Hujjat mazmunini yaratish va boshqarish;
  • WinAPI funksiyalaridan foydalangan holda PDF sahifalarida chizish uchun HDC-ga kirish.
  • Turli formatdagi tasvirlardan foydalanish (JPEG, TIFF, PNG, BMP, GIF);
  • Izohlarni yaratish va ulardan foydalanish;
  • Diskda yoki xotirada PDF hujjatlarini yaratish;
  • PDF hujjatlaridan matnni chiqarib oling;

Umuman olganda, xususiyatlarning juda ta'sirli ro'yxati. Keling, ushbu xususiyatlarning ba'zilari amalda qanday ishlashini ko'rib chiqaylik. Demo versiyasini yuklab oling, o'rnating.

O'rnatishdan so'ng, Delphi-ni ishga tushiring (mening holimda bu Delphi XE3) va menyuga o'ting:

Komponent - Import komponenti - Import turi kutubxonasi

Biz ro'yxatda kutubxona qidirmoqdamiz

Import qilish, yaratish yangi loyiha va birlikni foydalanishga kiriting PDFCreatorPilotLib_TLB.

Endi biz kutubxonani jonli misol yordamida sinab ko'rishimiz mumkin. Birinchidan, oddiy matnli hujjat yaratishga harakat qilaylik:

TForm 1 protsedurasi. Button1Click (Yuborish: TObject); var fnt: integer; boshlash (boshlash) PDF: = TPDFDocument4. Yaratish (nol); PDF. SetLicenseData ("demo", "demo"); fnt: = pdf. AddFont ("Verdana", noto'g'ri, noto'g'ri, noto'g'ri, noto'g'ri, fcANSI); PDF. UseFont (fnt, 14); PDF. ShowTextAt (20, 40, "SAlom, PDF!"); (saqlash) PDF. SaveToFile ("HelloPDF.pdf", rost); PDF. Yo'q qilish; oxiri;

Biz dasturni ishga tushiramiz va yaratilgan PDF hujjatiga qaraymiz:

Endi faylga ruscha matn yozishga harakat qilaylik:

TForm 1 protsedurasi. Button1Click (Yuborish: TObject); boshlash (boshlash) (...) PDF. ShowTextAt (20, 40, "Salom PDF!"); (saqlash) (...) tugatish;


Ehtimol, sinfning biron bir joyida siz biron bir narsani sozlashingiz kerak, Unicode qo'llab-quvvatlashini hali ham faollashtiradigan usulni chaqirishingiz kerak, ammo bunday pul evaziga men sozlamalar va burilishlar bilan hech qanday muammosiz ishlaydigan kutubxonani olishni xohlayman .. Aytgancha, havolani kiritish usuli (AddHyperLink) ham ishlamadi - havola kiritilganiga qaramay, hujjat tozaligicha qoldi. Lekin, biz o'lpon to'lash kerak, kiritish uchun urinish yangi hujjat ilgari yaratilgan PDF-ku - u portlash bilan ishladi - hujjat yangi sahifaga kerak bo'lganidek, tiqilib qolmasdan kiritildi.

5. PDFtoolkit VCL v4.0.1.293

Narxi: manbalarsiz 349 dollardan manbalar bilan 499 dollargacha
Qo'llab-quvvatlanadigan Delphi versiyalari: 6-XE4
Sinov versiyasini yuklab olish sahifasi: http://www.gnostice.com/PDFtoolkit_VCL.asp?show=downloads

Internetda Gnostice-dan ushbu komponentlar kutubxonasi haqida bir nechta ijobiy sharhlar mavjud.

Imkoniyatlar bo'yicha PDF asboblar to'plami deyarli 1 dan 1 ga to'g'ri keladi PDF yaratuvchisi uchuvchisi, bular. PDF-fayllarni "yopishtira oladi", matnni taniy oladi, havolalar qo'ya oladi, hujjatlarni qidiradi va hokazo. Ammo, PDF Creator Pilotdan farqli o'laroq, PDFtoolkit, agar gtPDFDocument1. IsLoaded keyin gtPDFDocument1 ni ishga tushiring. TextOut ( "Hey, Tinchlik!" , IntToStr (gtPDFDocument1. PageCount), // matn kiritiladigan sahifalar diapazoni gtPDFDocument1. GetPageSize (gtPDFDocument1. PageCount, muPixels). Kengligi / 2, // sahifaning o'rtasiga matn qo'ying gtPDFDocument1. GetPagesize (gtPDFDocument1. PageCount, muPixels). Balandligi / 2); (hujjatni saqlang) gtPDFDocument1. SaveToFile ("modified_doc.pdf"); oxiri; nihoyat gtPDFDocument1. Erkin tugatish;

Albatta, mening vazifamga kelsak, PDFtoolkit deyarli foydasiz bo'lib chiqdi Men PDF-fayllarni noldan yaratishga qiziqaman, lekin o'zlarining PDF tomoshabinlarini yozadiganlar uchun bu kutubxona ko'proq mos bo'lishi kerak deb o'ylayman.

Shunday qilib, bizda oxirida nima bor. Ha 5 turli yechimlar Delphida PDF hujjatlarini yaratish va ular bilan ishlash uchun. Har bir yechim o'zining afzalliklariga (bepul, "xushbichim") va kamchiliklarga (ot narxi, Unicode bilan bog'liq muammolar va boshqalar) ega. Mening vazifamga kelsak, barcha echimlar "fayl bilan ishlash" kerak bo'ladi. Boshqa tomondan, pullik va tonna bor bepul xizmatlar PDF yaratish, lekin bunday xizmatlar to'satdan olish va o'lish qobiliyatiga ega ekanligini yodda tutib, negadir u ular bilan torting emas. Albatta, yana bir yechim bor - o'z-o'zidan yozilgan va butunlay Delphi mavzusida emas, lekin keyingi safar bu haqda ko'proq ma'lumot beraman, lekin hozircha men DelphiFeeds mijozi bilan nima qilish haqida o'ylayman.


Onlaynda ko'rishguncha!

Dasturda PDF hujjatlarini ko'rishni tashkil qilishning ikkita asosiy usuli mavjud.

  • ActiveX texnologiyasidan foydalanish;
  • Maxsus komponentlardan foydalanish.

PDF bilan ishlash uchun komponentlar barcha Delphi nashrlarida mavjud emas va ko'pincha ularni qidirish va qo'shimcha ravishda o'rnatish kerak. Shu bilan birga, ActiveX-dan foydalanish uchun siz faqat mos keladigan narsaga ega bo'lishingiz kerak dasturiy ta'minot... Ushbu holatda Adobe acrobat Reader (bepul) yoki Adobe Acrobat.

ActiveX bilan ishlashni taxminan ikki bosqichga bo'lish mumkin.

  • Turlar yoki komponentlar kutubxonasini import qilish;
  • Aslida, ilovada import qilingan mablag'lardan foydalanish.
Komponentlarni import qilishActiveX

Komponentlarni import qilish uchun Delphi bosh menyusidagi “Komponent” – “Import komponent” buyrug‘idan foydalaning. Import jarayonining o'zi sehrgar sifatida amalga oshiriladi.

Sehrgarning birinchi sahifasida "Import ActiveX Control" -ni tanlang.

Shundan so'ng, import qilingan komponentlar bilan nima qilish kerakligini hal qilishingiz kerak. Ulardan Delphi komponentlari shaklida foydalanish rejalashtirilganligi sababli, biz "Yangi paketga o'rnatish" ni tanlaymiz.

Endi faqat yangi yaratilgan paket nomini ko'rsatish qoladi.

"Finish" tugmasini bosgandan so'ng, PDF-ni ko'rish uchun ActiveX komponentlari Delphi-ga import qilinadi.

Ko'rinishIlova ichida PDF

ActiveX yordamida dasturda PDF-fayllarni ko'rishni yaratish uchun TAcroPDF komponenti talab qilinadi. Import jarayoni yuqorida batafsil tavsiflangan.

Misol tariqasida quyidagi ilovani yaratamiz. TAcroPDF, TOpenDialog va TButton komponentlarini quyidagi skrinshotda ko'rsatilganidek shaklga joylashtiring.

Tugmani bosganingizda, biz tanlash uchun faylni ochish dialogini chaqiramiz PDF fayl ko'rish uchun.

Buni baham ko'ring