Im Ordner c:\lazarus\fpc\<version>\source\packages\fcl-pdf\src\ befinden sich neben PDF Dingen True Type Font Units.
Ich studiere jetzt seit Sonntag den Quelltext, habe aber noch nicht herausgefunden, wie ich damit einen geladenen True Type Font auch anzeigen kann.
Ich habe folgenden Ansatz:
Code: Alles auswählen
program fpttftest;
{mode objfpc}{$H+}
uses
  fpttf,
  fpttfsubsetter,
  fpttfencodings,
  fpfonttextmapping,
  fpparsettf;
  
{$I fontmetrics_stpdf.inc}  
type
  TFontManager = class
  private
    FontSubs: TFontSubSetter;            //Die Klasse aus der Unit fpttfsubsetter.pp
    FontFile: TFontFileInfo;                   //Die Klasse aus der Unit fpparsettf um die Fontdatei zu laden und auszulesen
    MappingL: TTextMappingList;       //Um die Glyphs in eine Liste zu bringen. Glyphindex stimmt nicht mit Zeichenindex überein, deshalb muss da eine Zuordnung 
  public                                               //aufgebaut werden
    constructor Create(AFontFileName: String);
    destructor Destroy; override;
    procedure printtextxy(X,Y: Integer; Text: String; Color: longword);
  end;
constructor Create(AFontFileName: String);
begin
  FontFile: TFontFileInfo.Create;
  FontFile.Filename := AFontFilename;
  MappingL := TTextMappingList.Create;
  FontSubs := TFontSubSetter.Create(FontFile, MappingL);
end;
destructor Destroy;
begin
  FontSubs.Free;
  inherited Destroy;
end;
procedure printtextxy(
     X,Y: Integer; 
     Text: String;           //Auszugebender Text unter Benutzung des Fonts, der Text gibt mit seinen Zeichencodes den Char Index, den ich brauche um den richtigen Glyphen 
                                   //aus der TextmappingList auszuwählen, so verstehe ich den Sinn dieser Textmappinglist.
     Color: longword   //Textfarbe
     );
begin
   //Welche Daten aus den ttf Headren muss ich wie verwenden um die Zeichen darzustellen. Zur Ausgabe soll eine PutPixel Routine dienen, aber die braucht die richtigen Daten aus 
   //den Headern. Freetype nutzt Glpyps, die in Bitmaps umgewandelt werden, aber wie macht fpttf das? 
end;
var
  FontManager: TFontManager;
  
procedure LoadFont(AFileName: String);
begin
  FontManager := TFontManager.Create(AFilename);
end;  
begin
  LoadFont(Filename);
  
  prinntextxy(50,50,'Mein TrueType Font!', colgreen);
end.
Wie also bekomme ich die richtigen Daten zur Anzeige der Fontzeichen?