Ez a magyar cikk a(z) Delphi PDF Reports with HotPDF: TextOut, Fonts, Images magyarul témát foglalja össze olyan csapatoknak, amelyek Delphi, C++Builder, Lazarus/FPC és losLab komponensek köré építenek üzleti megoldásokat
A hangsúly a gyakorlati döntéseken, a buktatókon és az ellenőrzési pontokon van, hogy a megoldás éles környezetben is megbízható legyen
Mikor hasznos ez a téma
A téma akkor fontos, amikor a dokumentumkezelésnek éles környezetben is ismételhetőnek, mérhetőnek és támogatásbarátnak kell lennie, nem csak egy bemutatóprojektben.
- Rögzítse a bemeneti fájlokat, jogosultságokat, várt kimenetet és hibautakat
- A terméknevek, API-nevek és fájlnevek maradjanak pontosan az eredeti alakjukban
- Őrizzen meg rövid regressziós fájlokat és naplókat a későbbi támogatáshoz
Gyakorlati munkafolyamat
Az angol forrás fő pontjai alapján érdemes a megvalósítást áttekinthető Delphi-munkafolyamattá alakítani. A forrás kiemelt témái:
- A kód módosítása előtt rögzítse a használati esetet
- Az eredményt kis tesztfájlokkal ellenőrizze
- Az API-neveket és literal értékeket hagyja változatlanul
Először egy kisméretű, reprodukálható példát készítsen, majd ehhez kapcsolja a komponenshívásokat, a hibakezelést és a felhasználói üzeneteket. A dokumentumformátumoknál a részletek döntik el, hogy a megoldás megbízható-e.
API- és kódhorgonyok
var
Pdf: THotPDF;
begin
Pdf := THotPDF.Create(nil);
try
Pdf.FileName := 'invoice-0001.pdf';
Pdf.BeginDoc;
Pdf.CurrentPage.SetFont('Arial', [fsBold], 16);
Pdf.CurrentPage.TextOut(50, 792 - 50, 0, 'INVOICE'); // 50pt from top of Letter
Pdf.CurrentPage.SetFont('Arial', [], 10);
Pdf.CurrentPage.TextOut(50, 792 - 70, 0, 'Date: 2026-06-11');
Pdf.CurrentPage.TextOut(300, 400, 45, 'COPY'); // rotated stamp
Pdf.AddPage; // CurrentPage now points here
Pdf.CurrentPage.SetFont('Arial', [], 10); // font state does not carry over
Pdf.CurrentPage.TextOut(50, 742, 0, 'Page 2 detail rows');
Pdf.EndDoc;
finally
Pdf.Free;
end;
end;Pdf.RegisterUnicodeTTF('C:\ProgramData\MyApp\Fonts\NotoSans.ttf');
Pdf.CurrentPage.SetFont('NotoSans', [], 12);
Pdf.CurrentPage.TextOut(50, 700, 0, WideString('Łódź — Ünïcode test ✓'));Ellenőrzés kiadás előtt
Kiadás előtt ellenőrizze a kimeneti fájlt, a metaadatokat, a titkosítást, a renderelést vagy az importált állapotot, a cikk témájának megfelelően. Jegyezze fel az eszközverziót, a komponensverziót, a tesztfájlt és a megfigyelt eredményt.
A terméknevek, API-nevek és kódrészletek változatlanok maradnak, hogy a fejlesztők könnyen összevethessék őket a dokumentációval és a forráskóddal
Kapcsolódó olvasnivaló
- our article on complex script text shaping with HotPDF
- the HotPDF PDF/A, PDF/X, and PDF/UA guide
- HotPDF Component
További kódpéldák
var
Png: TPngImage;
Logo: TBitmap;
LogoIdx: Integer;
begin
Png := TPngImage.Create;
Logo := TBitmap.Create;
try
Png.LoadFromFile('brand-logo.png');
Logo.Assign(Png); // decode PNG to a bitmap
LogoIdx := Pdf.AddImage(Logo, icFlate); // lossless for flat-color art
finally
Logo.Free;
Png.Free;
end;
// (Index, X, Y, Width, Height, Angle) — not (X1, Y1, X2, Y2)
Pdf.CurrentPage.ShowImage(LogoIdx, 50, 700, 120, 40, 0);
end;// Horizontal rule under the table header
Pdf.CurrentPage.SetLineWidth(0.75);
Pdf.CurrentPage.MoveTo(50, 660);
Pdf.CurrentPage.LineTo(545, 660);
Pdf.CurrentPage.Stroke;
// Shaded totals box: X, Y, width, height
Pdf.CurrentPage.SetRGBFillColor(RGB(235, 235, 235));
Pdf.CurrentPage.Rectangle(395, 120, 150, 40);
Pdf.CurrentPage.Fill;Kiegészítő megjegyzések
Ez a kiegészítés a rövid verziót egy használhatóbb munkalappá bővíti, miközben továbbra is illeszkedik a Delphi PDF Reports with HotPDF: TextOut, Fonts, and Images és az angol alapcikk technikai keretéhez. A szövegnek világosan meg kell mutatnia, milyen bemenettől indul a téma, milyen kimenet a cél, és melyik ellenőrzési ponton kell a viselkedést visszaigazolni.
Az átdolgozásnál a döntési sorrend számít: először az adat alakja, utána a módosítás határa, majd az API-függőségek, végül a tényleges viselkedés. Ha a cikk több lehetőséget említ, érdemes azt is leírni, melyik út védhetőbb karbantartás, támogatás és hibareprodukció szempontjából.
Minden code block, fájlnév, API-név és literal érték maradjon változatlan. A környező magyarázat lehet részletesebb, de a példakódnak ugyanazt a pontos referenciát kell adnia, hogy az olvasó közvetlenül összevesse a saját Delphi-, C++Builder- vagy Lazarus/FPC-projektjével.
A validation részben szerepeljen kis mintaállomány, kimenet-összevetés, valamint component- vagy validator-verzió rögzítése. Ha bug fixről vagy migrációról van szó, a reprodukciós útvonalat, az első megfigyelt állapotot és az ellenőrzési pontot is világosan kell leírni, hogy a regression később ne találgatás legyen.
Az ilyen bővítés azért hasznos, mert a lap nem csak első olvasásra marad értelmezhető: reviewernek döntési háttér, supportnak vizsgálati kontextus, a karbantartó csapatnak pedig hivatkozható megjegyzés lesz a következő módosítások előtt.
- A termék-, API-, fájl- és literal neveket ne módosítsd
- A code blockot, ha van, hagyd érintetlenül
- A validationhez adj mintafájlt és összevethető kimenetet
- A döntési sorrendet ne csak röviden, hanem érthetően írd le