Delphi pdf-lesekomponenter. Legge til en PDF-leser til programmet ved hjelp av ActiveX

Komponentfunksjoner deklarert av utviklerne:

  • Støtte for vektor- og rastergrafikk i PDF-dokumenter
  • Beskytt PDF-dokumenter med et passord
  • Støtte for AcroForms/PDF-skjemaer
  • Vannmerker
  • Generer PDF-dokumenter med interne og eksterne lenker, nettlenker og bokmerker
  • Full støtte for Unicode
  • Støtte for ulike fonter, tekstformatering, tekstoppsett med flere kolonner
  • TCanvas-støtte
  • Innebygd arkiver for å komprimere tekst og grafisk informasjon i et dokument
  • Konverter TIFF til PDF

Som et eksempel bestemte jeg meg for å bygge en demoapplikasjon som følger med komponenten THotPDF. Applikasjonen er ganske enkel - den genererer en PDF med to lenker og enkel tekst. Koden er også enkel og tydelig:

prosedyre TForm1. HelloWorldButtonClick(Sender: TObject); begynne HPDF. BeginDoc ; HPDF. Nåværende side. PrintHyperlink(20, 35, "Nettsted: " + MainEdit. Text, MainEdit. Text); HPDF. Nåværende side. SetFont("Times New Roman", , 16); HPDF. Nåværende side. SetRGBHyperlinkColor(clRed); HPDF. Nåværende side. PrintHyperlink (20, 50, "Bestillingsside: " + BuyEdit. Text, BuyEdit. Text); HPDF. Nåværende side. SetFont("Times New Roman", , 14); HPDF. Nåværende side. TextOut(20, 75, 0, "Klikk på lenken for å navigere"); HPDF. EndDoc ; slutt ;

Selv uten å gå inn på vanskelighetene ved komponentens drift, kan du forstå hva og hvordan som skjer i dette demoeksemplet. La oss kjøre det og se på utseendet til det genererte dokumentet:

Disse to blå rektanglene i dokumentet er lenker til to sider... og den enkle teksten "Klikk på lenken for å navigere" er ikke synlig noe sted i det hele tatt. Selv om vi må hylle, når du klikker på rektangelet, åpnes faktisk lenken. Generelt sett, enten hadde utviklerne det travelt med å kunngjøre støtte for Delphi opp til XE3, eller prøveversjonen fungerer så interessant, men etter å ha kjørt denne demoen mistet jeg på en eller annen måte lysten til å bruke THotPDF selv gratis. La oss gå videre.

4. PDF Creator Pilot

Pris: fra $450 uten kildekoder til $9950 (!!!) med kildekoder
5-XE4
http://www.colorpilot.com/pdflibrary.html#nedlasting

Biblioteket koster nesten det samme som Delphi XE3 Professional... Vel, ok, la oss se hva dette biblioteket er.

Funksjoner oppgitt av utviklerne:

  • Et utvidet sett med metoder og egenskaper for enkel PDF-oppretting;
  • Les og slå sammen eksisterende PDF-dokumenter;
  • legge til og fjerne sider i et PDF-dokument;
  • Unicode-støtte;
  • Lage vannmerker for hver side;
  • Legg til miniatyrbilder til et PDF-dokument;
  • Bruke og bygge inn fonter (TrueType, OpenType, Type1, etc.);
  • Lag interaktive PDF-dokumenter ved hjelp av JavaScript og hyperkoblinger;
  • Støtte for interaktive AcroForm-elementer: tekstinntastingsfelt, knapper, radioknapper, rullegardinlister, avmerkingsbokser;
  • kryptering og passordbeskyttelse av opprettede PDF-dokumenter;
  • Oppretting og administrasjon av dokumentinnhold;
  • Få tilgang til HDC for å tegne på PDF-sider ved hjelp av WinAPI-funksjoner.
  • Bruk av bilder i ulike formater (JPEG, TIFF, PNG, BMP, GIF);
  • Opprette og bruke merknader;
  • Lag PDF-dokumenter på disk eller i minnet;
  • Trekk ut tekst fra PDF-dokumenter;

Alt i alt en ganske imponerende liste over funksjoner. La oss se hvordan noen av disse funksjonene fungerer i praksis. Last ned demoversjonen og installer den.

Etter installasjon, start Delphi (i mitt tilfelle er det Delphi XE3) og gå til menyen:

Komponent - Importer komponent - Importtypebibliotek

Vi ser etter et bibliotek i listen

Vi importerer, oppretter et nytt prosjekt og inkluderer modulen i bruken PDFCreatorPilotLib_TLB.

Nå kan vi teste biblioteket ved å bruke et levende eksempel. La oss først prøve å generere et dokument med enkel tekst:

prosedyre TForm1. Button1Click(Avsender: TObject); var fnt: heltall; begynne (initialisering) PDF := TPDFDocument4. Opprett(null); PDF. SetLicenseData ("demo" , "demo" ); fnt:=pdf. AddFont ("Verdana" , false , false , false , false , fcANSI); PDF. UseFont(fnt, 14); PDF. ShowTextAt(20, 40, "HEI, PDF!"); (lagre) PDF. SaveToFile("HelloPDF.pdf", true); PDF. Ødelegge; slutt ;

Start programmet og se på det opprettede PDF-dokumentet:

La oss nå prøve å skrive russisk tekst til en fil:

prosedyre TForm1. Button1Click(Avsender: TObject); begynne ( initialisering ) (...) PDF. ShowTextAt(20, 40, "Hei, PDF!"); (lagre) (...) slutt;


Kanskje et sted i klasseegenskapene må du konfigurere noe, kalle en metode som vil aktivere Unicode-støtte, MEN for den slags penger vil jeg gjerne ha et bibliotek som fungerer rett ut av esken uten problemer med innstillinger og justeringer. .. Metoden for å sette inn en lenke (AddHyperLink) fungerte forresten heller ikke - dokumentet forble perfekt til tross for at lenken visstnok ble satt inn. Men, vi må hylle, forsøket på å sette inn en tidligere opprettet PDF i et nytt dokument fungerte med et brak – dokumentet ble satt inn på den nye siden som det skulle, uten feil.

5. PDFtoolkit VCL v4.0.1.293

Pris: fra $349 uten kilder til $499 med kilder
Støttede Delphi-versjoner: 6-XE4
Nedlastingsside for prøveversjon: http://www.gnostice.com/PDFtoolkit_VCL.asp?show=downloads

Det er ganske mange positive anmeldelser på Internett om dette komponentbiblioteket fra Gnostice.

Etter muligheter PDF-verktøysett nesten 1 til 1 tilsvarer PDF Creator Pilot, de. kan "lime" PDF-er, gjenkjenne tekst, sette inn lenker, søke i dokumenter osv. Men i motsetning til PDF Creator Pilot, PDFtoolkit hvis gtPDFDocument1. IsLoaded og start deretter gtPDFDocument1. TekstUt( "Hallo, Verden!" , IntToStr (gtPDFDocument1. PageCount ) , //utvalg av sider som teksten skal settes inn i gtPDFDokument1. GetPageSize(gtPDFDocument1. PageCount, muPixels) . Bredde/2 //sett inn tekst i midten av siden gtPDFDokument1. GetPagesize(gtPDFDocument1. PageCount, muPixels) . Høyde/2); (lagre dokumentet) gtPDFDokument1. SaveToFile("modified_doc.pdf"); slutt ; endelig gtPDFDocument1. Fri slutt;

Selvfølgelig, i forhold til oppgaven min, viser PDFtoolkit seg å være praktisk talt ubrukelig, fordi... Jeg er interessert i å lage PDF-er fra bunnen av, men for de som skriver sin egen PDF-leser, synes jeg dette biblioteket burde være mer enn egnet.

Så hva har vi til slutt? Det finnes 5 forskjellige løsninger for å lage og jobbe med PDF-dokumenter i Delphi. Hver løsning har både sine fordeler (gratis, sofistikert) og ulemper (eksorbitante kostnader, problemer med Unicode, etc.). I forhold til problemet mitt, må alle løsninger "arbeides med en fil." På den annen side er det en haug med betalte og gratis tjenester på Internett for å generere PDF-er, men når jeg husker at slike tjenester har en tendens til å plutselig ta opp og dø, føler jeg meg på en eller annen måte ikke tilbøyelig til å bli involvert i dem. Det er selvfølgelig en løsning til - en hjemmelaget og ikke helt i Delphi-temaet, men mer om det en annen gang, men foreløpig skal jeg gå og tenke på hva jeg skal gjøre med klienten for DelphiFeeds


Vi sees på nett!


publiseringsdato 23.09.2005 07:00 Essay om å lage PDF-filer

Nylig har mange PDF-konverterere, -lesere og -skribenter blitt oppdaget på Internett. Og de aller fleste av dem tilbys for penger. Selve programmet varierer fra $10 til $300. Og kildekoden for mye mer penger, prisen starter fra $200 og på ett sted (etter å ha blitt interessert i dette surfet jeg på Internett) for så mye som 900 euro.

Dette problemet interesserte meg når det gjelder programmering, og jeg gjør deg oppmerksom på resultatene. (Disse resultatene ble oppnådd av meg mens jeg studerte innsiden av en PDF-fil når du åpner den i total commander via F3)

En typisk PDF-fil består av fire deler :=

Hva er det

? Dette er en vanlig referanse til PDF-spesifikasjonsversjonen. Som er til stede i den første linjen i PDF-filen. For eksempel "%PDF-1.3" I den syvende versjonen av Acrobat, som ble utgitt et sted på forsommeren i år, er dette tallet "%PDF-1.7", men dette er ikke en produktversjon, dette er en spesifikasjon versjon. Den andre linjen i PDF-en er en liten forkortelse (tilsynelatende ment for fremtidig bruk) "%vgPU"

Alle har funnet ut den første delen av PDF-en.

Hva heter den andre delen ?

Svaret er veldig enkelt: dette er en sekvens av objekter, hvis beskrivelse, så vel som overskriften, presenteres i tekstform.

Hvert objekt er for eksempel et tekstfragment med et serienummer i navnet "4 0 obj"

  • 4 dette er objektets serienummer
  • 0 dette er antallet (re)generering av filen, det vil si at når filen oppdateres (redigeres), øker dette antallet
  • obj dette er et kodeord som betyr at vi møtte et objekt i hoveddelen av dokumentet

Alle objekter er delt inn i indirekte og direkte. Alle er indirekte, og de fleste er etter ordet obj har en delmåler i kroppen"<<", означающее начало данных объекта. И в конце данных закрывающий делиметер ">>" og kodeord endobj

Direkte gjenstander skal ikke ha åpnings- og lukkeavgrensninger i kroppen."<<", ">>>"Alle indirekte objekter er tilgjengelige gjennom kryssreferansetabell. Den representerer referanser i form av en forskyvning fra begynnelsen av filen til begynnelsen av objektet (Data (linjer) i objektet er atskilt #13#10 eller #13 )

Typen av det "viktigste" objektet i hoveddelen av en PDF-fil har et stolt navn "/Katalog"

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

Faktisk bør det være 3 "hoved"-objekter i kroppen til en minimal "Hello world" PDF-fil. La meg liste dem etter type:

  • "/Katalog" inneholder en lenke: til sidetreet ( /Sider)
  • "/Sider" inneholder en lenke til en gruppe med dokumentsider (for eksempel 2 0 obj > endobj)
  • "/Side" inneholder en lenke til objekter relatert til en bestemt side. (For eksempel 3 0 obj > /Roter 0 >>)
Og noen mindre

La oss analysere sideobjektet:

  • /Rotere et felt som angir hvor mange grader sidebildet skal roteres når det vises i programmet
  • /MediaBox Og /CropBox felt som beskriver sidestørrelsen
  • /Foreldre referanse til overordnet objekt "/Sider"
  • /Ressurser dette feltet beskriver hvilken skrift som skal brukes når siden vises (en font er et separat objekt) og ProcSet-innstillingen denne innstillingen indikerer hvilket innhold som er i datastrømmen på denne siden (kan også defineres som et objekt, ikke som et felt )
  • /Innhold Det mest interessante feltet i «page»-objektet gir en lenke til innholdsobjektet på denne siden, og: hvis dette feltet mangler i «page»-objektet, er siden tom
Sideinnhold:
En gjenstand "strøm" 4 0 obj > stream BT /F12 9 Tf 10 782 TD 0 -12,5 TD (Max Fokin) Tj 0 -12,5 TD (mnb) Tj 0 -12,5 TD () Tj 0 -12,5 TD (Max 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 /Lengde 305 dette feltet viser hvor mange byte som er i et ord strøm til ordet sluttstrøm

Det enkleste alternativet er en ukodet og ukomprimert datastrøm i objektet strøm. Det er begrenset til operatører BT Og ET

BT begynner et tekstobjekt - karakteriserer begynnelsen av teksten ET avslutter et tekstobjekt. - karakteriserer slutten av teksten /F12 9 Tf

  • /F12 dette er kodenavnet til objektet som karakteriserer fonten som brukes på denne siden
  • 9 dette er skriftstørrelsen
  • Tf dette er en operator som karakteriserer at denne linjen i steam-objektet er innstillingen for font og størrelse
10 782 TD er tallene der denne linjen begynner (teller fra øvre venstre hjørne) Tj er den nye linjeoperatøren Vel, i parentes står teksten vår

Jeg forklarer ikke den kodede strømmen her. Den er basert på RC4, RC5, MD5 algoritmer.

Hva er en gjenstand Font 12 0 obj >

  • /Skriv /Skrift Naturligvis typenavnet
  • /Undertype /Type1 undertypenavn
  • /Navn /F7 F7 dette er kodenavnet

PDF støtter flere typer fonter. De er listet opp nedenfor

  • Type 1, inkludert undersett og Multiple Master "snapshots"
  • Type 3
  • TrueType, inkludert delsett
  • Skriv 0
For å være ærlig forsto jeg ikke Type 3, TrueType, inkludert delsett, Type 0, jeg kan ikke si noe om dem
Og Type 1 er følgende skrifttyper Courier Courier-Fet Courier-FetOblique Courier-Oblique Helvetica Helvetica-Fet Helvetica-FetOblique Helvetica-Oblique Times-Roman Times-Fet Times-Italic Times-FetItalic Symbol ZapfDingbats

20 0 obj > endobj Dette er et objekt med kodenavn for fonter av den første typen. Ved å bruke dette kodenavnet kan du enkelt få selve objektet font. 6 0 obj >

ALLE: det vil si minimum Består av følgende gjenstander: "katalog", "sider", "side", "ressurser"(kan eventuelt være tilstede som et felt i sideobjektet), utypeobjekt "strøm", gruppe av objekter "font"

Hva har skjedd ? Faktisk er dette en vanlig teksttabell, den begynner med ordet xref og kroppen har lenker til alle indirekte objekter i dokumentet. Her er et eksempel xref 0 27 0000000021 65535 f 0000000016 00000 n 0000000105 00000 n 0000000169 00000 n 00000000000 0 0 0 0 0 0 0 0 0 0 n 0000 000892 00000 n 0000001006 00000 n 0000001125 00000 n 0000001247 00000 n 0000001373 0 0000 0 0 0 0 0 0 0 0 0 0 0 01604 00000 n 0 000001725 00000 n 0000001850 00000 n 0000001967 00000 n 0000002084 00000 n 0000002203 00000 n 0000002326 00000 0 0 0 0 0 0 0 0 0 0 0 0 0 02558 00000 n 00000000024 00 001 f 0000002751 00000 n 0000002831 00000 n 0000000000 00001 f 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 n 0 27 Disse tallene betyr følgende:

  • 0 - første objektnummer i tabellen
  • 27 - antall tabellelementer

Det første elementet i tabellen har alltid formen " XXXXXXXXXX 65535 f" hvor X er et siffer og 65535 er standardverdien for det første elementet i tabellen. Symbolet "f" står for " gratis", det vil si at objektet ikke brukes

La oss analysere elementet i denne tabellen.

  • De første 10 sifrene er forskyvningen fra begynnelsen av filen til begynnelsen av objektet.
  • 0000000016 betyr at 16 byte fra begynnelsen av filen vil du møte den første omtalen av objektet, det vil si f.eks. 4 0 obj

De andre fem sifrene er filgenereringsnummeret. Hvis filen nettopp er opprettet, er de alltid null. Hvis filen endres, øker dette tallet med én. Det er, 0000000024 00001 f

Den kanoniske PDF-filen vi nettopp har laget har bare én tabell. Men hvis filen er redigert, kan det være mange slike tabeller.

Forholdet mellom tabeller utføres ved å bruke det siste elementet og kodeord startxref

Den kanoniske, nyopprettede PDF-filen har bare én tabell, etter tabellen er det et element tilhenger Og etter traileren kommer kodeordet startxref, som indikerer forskyvningen fra starten av filen til starten av tabellen, her er et eksempel. trailer > startxref 173 %%EOF Dette betyr at etter 173 byte fra begynnelsen av dokumentet vil kodeordet være tilstede xref. Men hvis filen har blitt redigert, vil den siste traileren i filen se slik ut: xref 0 3 0000000000 65535 f 0000003609 00000 n 0000003832 00000 n trailer<7a15ab3ed3999575ff2f3034104a82c1>] >> startxref 173 %%EOF Men hvis vi refererer til tabellen hvor koblingen peker startxref 173, så finner vi følgende tabell, og bak den en tilhenger som skal ha et felt /Forrige 3896 3 16 0000000016 00000 n 0000000664 00000 n 0000000936 00000 n 0000001106 00000 n 0000001133 000 0 0 0 0 000013 95 00000 n 0000001811 00000 n 0000001992 00000 n 0000002180 00000 n 0000002360 000000 n 00 0 0 0 0 0 0 0 0 0 00000 n 00000 03516 00000 n 0000000776 00000 n 0000000916 00000 n trailer<7a15ab3ed3999575ff2f3034104a82c1>] >> startxref 567 %%EOF

Dette jordet /Forrige 3896 peker oss til forrige tabell, og lenken startxref 567 peker på neste tabell og så videre nesten i det uendelige, helt til i neste felt startxref vi vil ikke se 0 . Dette betyr at vi har lest alle tabellene.

Dette essayet mangler selvfølgelig kildekode. Her er det: to hovedmoduler presenteres" PDFDokument"og hjelpe" PDFBaseFonts"

Følgende filer er vedlagt materialet:

  • Kildekode for modulene PDFDocument.pas og PDFBaseFonts.pas (16 K) oppdatering fra 23.09.2005 7:02:00

Diskusjon av materialet [ 31/07/2006 06:33 ] 7 meldinger

I denne artikkelen skal vi se på hvordan du lager din egen pdf-dokumenter, og i neste artikkel skal vi se på hvordan du kan se pdf-dokumenter i prosjektene dine, samt utskriftsinnhold, naviger gjennom dokumentet og så videre.

Til dette trenger vi komponentene fra fanen Rave. La oss installere komponentene vi trenger for å fungere, og disse er:

  • TRvNDRWriter
  • TRvRenderPdf
  • TB-knapp

Komponent TRvNDRWriter beregnet for opptak i pdf-filinformasjon (tekst, grafikk) via stream.

Komponent TRvRenderPdf designet for å lage og tegne informasjon (tekst, grafikk, etc.). Vel, når du trykker på en knapp, vil vi legge inn noe i vår pdf-fil.

Vi vil ikke skrive mye om teori, men går rett over til programmering, men vi må først lage en vanlig tom pdf-fil og legg den i roten til programmet. Ved siden av arrangementet Ved trykk For knappen vår vil vi skrive følgende kode:

prosedyre TForm1. Button1Click(Avsender: TObject); var Strømmer: TMemoryStream; start Streams: = TMemoryStream. skape ; RvNDrWriter1. Strøm := Strømmer; RvNDRWriter1. Henrette ; RvRenderPdf1. PrintRender(Streams, "test.pdf"); ShellExecute(Håndtak, null, "test.pdf" , "" , "" , SW_SHOW) ; FreeAndNil(Strømmer); slutt ;

Vi lager en strøm der vi vil tegne all informasjonen, så begynner vi å gjengi, spesifiserer filen som dataene skal trekkes inn i, og til slutt ødelegger vi strømmen.

Det er det nå, vi trenger en hendelse som oppstår når vi tegner data, der vi vil vise all informasjonen vår. Velge komponenten TRvNDRWriter og gå gjennom listen over hendelser for denne komponenten, hvoretter vi finner hendelsen OnPrint og i dette tilfellet skriver vi følgende kode:

prosedyre TForm1. Print(Avsender: TObject); start bmp: = TBitmap. Skape ; bmp. LoadFromFile("test.bmp"); med RvNDRWriter1 begynner SetFont("Arial" , 16) ; FontColor: = clGrønn; Print("Testtekst" ); PrintHeader("Begynn PDF-fil" , pjCenter) ; PrintFooter("Avslutt PDF-fil" , pjCenter) ; LinjeTil(10, 10) ; PrintBitmap(1, 1, 1, 1, bmp) ; slutt ; FreeAndNil(bmp); slutt ;

Vel, først laster vi opp bildet. *.bmp, naturlig variabel bmp, vi har et klasseobjekt TBitmap. Vi laster den ned for så å tegne den i vår pdf-dokument.

Og så tror jeg alt er klart, prosedyren PrintHeader- viser inskripsjonen i tittelen på dokumentet (side), prosedyre PrintFooter- viser inskripsjonen på slutten av dokumentet (side). Fremgangsmåte Skriv utBitmap- sender ut et bilde til et dokument, prosedyre SetFont- setter dokumentets font, prosedyre Skriftfarge- setter dokumentets skriftfarge.

Det er to hovedmåter å organisere visning av PDF-dokumenter i programmet.

  • Bruker ActiveX-teknologi;
  • Bruk av spesielle komponenter.

Komponenter for arbeid med PDF er ikke tilgjengelige i alle Delphi-utgivelser, og som oftest må de søkes etter og installeres i tillegg. Samtidig trenger du bare å ha riktig programvare på brukerens datamaskin for å bruke ActiveX. I dette tilfellet Adobe Acrobat Reader (gratis) eller Adobe Acrobat.

Arbeid med ActiveX kan deles inn i to trinn.

  • Importere et typebibliotek eller komponenter;
  • Faktisk bruk av importerte verktøy i applikasjonen.
Importere komponenterActiveX

For å importere komponenter, bruk kommandoen "Component" - "Import Component" i Delphi-hovedmenyen. Selve importprosessen implementeres som en veiviser.

På den første siden av veiviseren velger du "Importer ActiveX-kontroll".

Etter dette må du bestemme hva du skal gjøre med de importerte komponentene. Siden vi planlegger å bruke dem som Delphi-komponenter, velg "Installer til ny pakke".

Nå gjenstår det bare å spesifisere navnet på den nyopprettede pakken.

Etter å ha klikket på "Fullfør"-knappen, vil ActiveX-komponentene i PDF-visningen importeres til Delphi.

UtsiktPDF i vedlegg

For å lage en PDF-visningsprogram i et program som bruker ActiveX, trenger du TAcroPDF-komponenten. Prosessen med å importere den er beskrevet i detalj ovenfor.

Som et eksempel, la oss lage følgende applikasjon. La oss plassere TAcroPDF, TOpenDialog og TButton-komponentene på skjemaet som vist på skjermbildet nedenfor.

Når du klikker på knappen, åpner vi en filåpningsdialog for å velge en PDF-fil som skal vises.

For dette eksemplet trenger vi følgende komponenter, som er plassert i Rave-fanen. Og så, la oss begynne å installere komponentene vi trenger, nemlig:

  • TRvNDRWriter
  • TRvRenderPdf
  • TB-knapp

Jeg foreslår å dvele litt ved disse komponentene og forstå hva de tjener. Forresten, jeg fikk informasjon om dem fra et par bøker som jeg kjøpte progbook.ru. Derfor, hvis du ønsker å kjøpe anstendige bøker om Delphi, er du velkommen til å besøke denne butikken.

Så først har vi TRvNDRWriter-komponenten. Vi trenger denne komponenten for å skrive informasjon til en pdf-fil, uansett hva, tekst eller grafikk, gjennom en strøm.

Prosedyre TForm1.Button1Click(Sender: TObject); var Strømmer:TMemoryStream; start Streams:=TMemoryStream.create; RvNDrWriter1.Stream:=Strømmer; RvNDRWriter1.Execute; RvRenderPdf1.PrintRender(Streams, "test.pdf"); ShellExecute(Håndtak, null, "test.pdf", "", "", SW_SHOW); FreeAndNil(Strømmer); slutt;

Den neste komponenten er TRvRenderPdf. Vi trenger det for å skape, eller snarere å tegne, informasjon, enten det er tekst eller grafikk. Følgelig, etter å ha klikket på knappen, vil vi skrive informasjonen vi trenger inn i pdf-filen vår.

Men la oss ikke tulle for mye, men la oss gå rett til emnet som interesserer oss, nemlig programmering :)

Først må vi lage en vanlig tom pdf-fil og plassere den i rotmappen til programmet vårt.

Faktisk, med denne koden lager vi en strøm der vi vil tegne informasjonen vi trenger, hvoretter vi begynner å gjengi, indikerer vår endelige pdf-fil som dataene vil bli trukket inn i og på slutten lukker vi strømmen.

Etter å ha utført dette når, trenger vi en hendelse som oppstår når vi tegner data; i dette tilfellet vil vi vise informasjonen vi trenger.

La oss se på koden. Til å begynne med laster jeg et *.bmp-bilde, lager en bmp-variabel og et objekt av TBitmap-klassen. Jeg laster den ned slik at jeg så kan tegne inn vår pdf-fil.

Jeg tror det ikke er verdt å beskrive alt mer tydelig, og så legger PrintHeader-prosedyren en inskripsjon til dokumenttoppteksten, PrintFooter-prosedyren legger til en inskripsjon på slutten av dokumentet. PrintBitmap-prosedyren legger til et bilde til dokumentet, SetFont-prosedyren setter den nødvendige dokumentfonten, FontColor-prosedyren angir ønsket dokumentskriftfarge.

Alle påfølgende grafiske funksjoner og prosedyrer er nøyaktig de samme som ved visning av grafisk informasjon på Canvas av andre komponenter.

Jeg bruker NewPage-funksjonen til å lage et nytt ark i et dokument. Alt som legges til etter det for å vise informasjon, vises på et nytt ark i dokumentet.

Viktig slik at alle moduler: RpRender, RpRenderPDF, RpDefine, RpBase, RpFiler, RpRave, RpCon kobles til prosjektet!