Delphi - Report mentése PDF, HTML, RTF és TEXT formátumokba

Nyomtatás a Rave komponensekkel 8. rész

forráskód letöltése
Folytatva a Rave paletta komponenseit bemutató sorozatunkat, ebben a részben megismerkedünk az RvRenderPDF, RvRenderHTML, RvRenderRTF és RvRenderTEXT komponensek használatával. Megnézzük, hogy hogyan menthetünk el egy Report-ot PDF, HTML, RTF és TEXT formátumokba, és hogy milyen módon befolyásolhatjuk a konverziót. A konvertálást kétféle módon végezzük el, az RvProject komponens dialógusablaka segítségével, valamint közvetlenül NDR állományból.
A példaprogramban a sorozat második részében készült RAV állományt fogjuk felhasználni. Ezt az állományt helyezzük el abba a könyvtárba, ahová a Delphi példaprogramot menteni fogjuk.
Kezdjünk egy új Delphi alkalmazást. Helyezzünk el a Form-on egy PageControl objektumot, öt oldallal. Az oldalak címkéi a következők legyenek: Nyomtatás, PDF, HTML, RTF, TEXT.
Helyezzünk el a Form-on egy RvProject, RvRenderPDF, RvRenderHTML, RvRenderRTF és egy RvRenderTEXT komponenst, a Rave palettáról. Az RvProject1 objektum ProjectFile tulajdonságában adjuk meg a project1.rav állományt.
A PageControl első oldalán helyezzünk el egy Button objektumot, „Nyomtatás” felirattal. OnClick eseményébe írjuk az alábbi kódot.
RvProject1.Execute;
Mentsük el az alkalmazást, majd indítsuk el. Kattintsunk a nyomtatás gombra.
A megjelenő Output Options ablakban válasszuk a File opciót, a Format mezőben állítsuk be a használni kívánt állomány formátumot, majd kattintsunk az OK gombra
A PDF, HTML, RTF és TXT formátumok eddig nem szerepeltek a Format listában. Amikor elhelyeztük az RvRender objektumokat a Form-on, akkor a rendszer automatikusan regisztrálta azokat. Ilyenkor az Execute parancs hatására megjelenő ablakban a Format listában szerepelni fognak, azzal a névvel, amit erre a célra megadtunk. A most kipróbált példában szereplő értékek az alapbeállítások.

PDF formátum
PDF formátumot az RvRenderPDF komponens használatával hozhatunk létre.
Azt, hogy a PDF formátumú állomány milyen tulajdonságokkal jöjjön létre, az RvRenderPDF komponens tulajdonságain keresztül állíthatjuk be.
A DisplayName tulajdonság tartalma jelenik meg az Output Options ablakban, amikor meghívjuk például az RvProject komponens Execute metódusát. Ez csak akkor jelenik meg, ha az Active értéke igaz.
Minden PDF dokumentum tartalmazhat információkat a szerzőről és a készítés paramétereiről. Ezeket az értékeket a DocInfo tulajdonságon keresztül állíthatjuk be.
Az Adobe Acrobat Reader programban egy PDF dokumentum információit a CTRL+D billentyűkombináció megnyomásával, vagy a File – Document Info – General menüpont segítségével nézhetjük meg.
A PDF dokumentumban használhatunk grafikus objektumokat, így képeket is. A képek JPG formátumban kerülnek tárolásra. Az ImageQuality tulajdonságban, százalékos formában megadhatjuk a JPG képek minőségét. A MetaFileDPI értéke határozza meg a képek megjelenítésének minőségét DPI-ben.
Ha a képek konvertálása közben még további tulajdonságokat is módosítani szeretnénk, akkor használhatjuk az OnDecodeImage eseményt, mely minden alkalommal lefut, amikor a komponensnek kép konverzióra van szüksége.
Ha a UseCompression értékét igazra állítjuk, akkor a PDF állomány tömörített formában jön létre. A tömörítés algoritmusáról azonban nekünk kell gondoskodnunk, az OnCompress eseményben.
A uses listában vegyük fel a ZLib unit nevét. Az RvRenderPDF1 objektum OnCompress eseményében helyezzük el az alábbi kódot.
with TCompressionStream.Create(clMax,OutStream) do
  try
    CopyFrom(InStream,InStream.Size);
  finally
    Free;
  end;
A példaprogram PageControl objektumának PDF feliratú oldalán készítünk egy példát arra, hogy hogyan lehet egy NDR állomány tartalmát PDF formátumúvá konvertálni, dialógusablakok nélkül.
Egy NDR állományt úgy tudunk legegyszerűbben létrehozni, hogy futtatjuk a példaprogramot. Nyomjuk le a Nyomtatás gombot. A megjelenő ablakban válasszuk a File opciót, majd a Format listában az NDR lehetőséget.
A PageControl objektum második oldalán biztosítsunk lehetőséget az NDR és PDF állományok nevének megadására. Hozzuk létre az ehhez szükséges Label és Edit típusú objektumokat. Szükségünk van még egy Button (Button2) objektumra, amely lenyomásával a konvertálás el fog kezdődni.
A Button2 OnClick eseményében helyezzük el a következő kódot.
procedure TForm1.Button2Click(Sender: TObject);
var
  Stream: TMemoryStream;
begin
  Stream:=TMemoryStream.Create;
  try
    Stream.LoadFromFile(Edit1.Text);
    RvRenderPDF1.PrintRender(Stream,Edit2.Text);
  except
    ShowMessage('A konvertálás sikertelen!');
  end;
  Stream.Free;
  ShowMessage('A konvertálás sikeresen megtörtént!');
end;
Az NDR állomány beolvasását egy TMemoryStream típusú változó segítségével végezzük el. Az RvRenderPDF komponens PrintRender metódusával a Stream tartalmát elmenthetjük egy PDF formátumú állományba. A metódus csak NDR formátumú Stream-eket tud feldolgozni.
A PageControl objektum PDF fülén elhelyezkedő objektumokat másoljuk át a további oldalakra is. Módosítsuk a feliratokat a formátumoknak megfelelően. A nyomógombokhoz hozzunk létre új OnClick eseményeket, melyekbe másoljuk be a Button2Click eljárás tartalmát. Írjuk át az Edit mezők hivatkozásait.
Ne felejtsük el, módosítani az alábbi sort sem.
RvRenderPDF1.PrintRender(Stream,Edit2.Text);
Az RvRenderPDF1 helyére helyettesítsük be a megfelelő objektum nevét.
HTML formátum
HTML formátumot az RvRenderHTML komponenssel hozhatunk létre. A létrejövő dokumentum HTML 4.0 formátumú lesz. A konverzió során a grafikus elemek közül csak a téglalap alakúak és a képek maradnak meg. A komponens célja, hogy a létrejövő HTML oldal a lehető legjobban hasonlítson a Rave Report-ra.
Ha a komponens ServerMode tulajdonsága igazra van állítva, akkor a HTML oldal dinamikusan jön létre. Ilyenkor átmeneti fájlok képződnek, melyeknek helyét a CacheDir tulajdonságban állíthatjuk be.
RTF formátum
RTF formátumot az RvRenderRTF komponens segítségével hozhatunk létre. RTF-ben grafikus objektumokat és képeket is egyaránt használhatunk. Az ImageEncoding és ImageOutput tulajdonságok segítségével állíthatjuk be a képek konvertálásának módját.
TEXT formátum
TEXT formátumot az RvRenderTEXT komponens segítségével hozhatunk létre. TEXT formátumban sem képeket, sem grafikus objektumokat nem használhatunk. Csak a szöveges elemek kerülnek konvertálásra, formázás nélkül.

Nyomtatás a Rave komponensekkel cikksorozat