Das Verständnis der in einem PDF-Dokument verwendeten Schriftarten ist entscheidend für die Qualitätskontrolle, die Einhaltung von Barrierefreiheitsstandards und die Dokumentforensik. Schriftarteigenschaften Die Demo zeigt, wie detaillierte Schriftarteninformationen für Zeichen in einer PDF-Datei mithilfe von PDFium VCL abgerufen werden können.
Überblick
Mit dieser Demo können Sie auf ein beliebiges Zeichen in einer PDF-Datei klicken und dessen Schrifteigenschaften anzeigen, einschließlich Familienname, Stärke, Stil, Größe und ob die Schriftart eingebettet ist. Es ist von unschätzbarem Wert für die PDF-Analyse und Fehlerbehebung.
Hauptmerkmale
- Interaktive Auswahl – Klicken Sie auf ein beliebiges Zeichen, um es zu analysieren.
- Familienname der Schriftart – Die Schriftfamilie (z. B. „Arial“, „Times New Roman“).
- Name der Schriftartbasis – Der interne PDF-Schriftartname.
- Schriftstärke – Numerale Schriftstärke (400 = normal, 700 = fett).
- Schriftgröße – Größe in Punkten.
- Kursiver Winkel – Neigungswinkel für kursive Schriftarten.
- Aufstieg/Abstieg – Vertikale Metriken
- Eingebetteter Status – Ob die Schriftart in der PDF-Datei eingebettet ist
- Schriftartdaten – Zugriff auf die Rohdaten der Schriftart, falls eingebettet
PDFium-DLL-Anforderungen
Stellen Sie vor dem Ausführen einer PDFium VCL-Anwendung sicher, dass die PDFium DLL-Dateien installiert sind:
pdfium32.dll/pdfium64.dll– Standardversionen (~5-6 MB).pdfium32v8.dll/pdfium64v8.dll– Mit V8 JavaScript-Engine (~23-27 MB).
Installation: Ausführen PDFiumVCL\DLLs\CopyDlls.bat als Administrator, um die DLLs automatisch in die Windows-Systemverzeichnisse zu kopieren.
Zugreifen auf Schriftarteigenschaften
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
procedure TfrmMain.UpdateFontInfo; var FontInfo: TStringList; begin FontInfo := TStringList.Create; try FontInfo.Add('=== Font Properties for Character Index: ' + IntToStr(PdfView.CurrentCharIndex) + ' ==='); FontInfo.Add(''); // Font family name try FontInfo.Add('Font Family Name: ' + PdfView.FontFamilyName); except FontInfo.Add('Font Family Name: \u003cError retrieving\u003e'); end; // Font base name (internal PDF name) try FontInfo.Add('Font Base Name: ' + PdfView.FontBaseName); except FontInfo.Add('Font Base Name: \u003cError retrieving\u003e'); end; // Font size for this character try FontInfo.Add('Font Size: ' + FloatToStr(PdfView.FontSize[PdfView.CurrentCharIndex])); except FontInfo.Add('Font Size: \u003cError retrieving\u003e'); end; // Font weight (400=normal, 700=bold) try FontInfo.Add('Font Weight: ' + IntToStr(PdfView.FontWeight)); except FontInfo.Add('Font Weight: \u003cError retrieving\u003e'); end; // Italic angle (0 for upright, negative for italic) try FontInfo.Add('Font Italic Angle: ' + IntToStr(PdfView.FontItalicAngle)); except FontInfo.Add('Font Italic Angle: \u003cError retrieving\u003e'); end; // Vertical metrics try FontInfo.Add('Font Ascent: ' + FloatToStr(PdfView.FontAscent)); except FontInfo.Add('Font Ascent: \u003cError retrieving\u003e'); end; try FontInfo.Add('Font Descent: ' + FloatToStr(PdfView.FontDescent)); except FontInfo.Add('Font Descent: \u003cError retrieving\u003e'); end; // Embedded status try FontInfo.Add('Font Is Embedded: ' + BoolToStr(PdfView.FontIsEmbedded, True)); except FontInfo.Add('Font Is Embedded: \u003cError retrieving\u003e'); end; // Font data size (if embedded) try FontInfo.Add('Font Data Size: ' + IntToStr(Length(PdfView.FontData)) + ' bytes'); except FontInfo.Add('Font Data Size: \u003cError retrieving\u003e'); end; FontInfo.Add(''); FontInfo.Add('Character: ' + PdfView.Character[PdfView.CurrentCharIndex]); memoFontInfo.Lines.Assign(FontInfo); finally FontInfo.Free; end; end; |
Klicken Sie hier, um den Charakter zu analysieren
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
procedure TfrmMain.PdfViewMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var CharIndex: Integer; begin if not PdfView.Active then Exit; try // Get character at click position CharIndex := PdfView.CharacterIndexAtPos(X, Y, 10.0, 10.0); if CharIndex >= 0 then begin edtCharIndex.Text := IntToStr(CharIndex); PdfView.CurrentCharIndex := CharIndex; UpdateFontInfo; end; except on E: Exception do begin memoFontInfo.Lines.Clear; memoFontInfo.Lines.Add('Error getting character: ' + E.Message); end; end; end; |
Manuelle Eingabe des Zeichenindex
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
procedure TfrmMain.btnGetFontInfoClick(Sender: TObject); var CharIndex: Integer; begin if not PdfView.Active then begin ShowMessage('Please open a PDF file first.'); Exit; end; try CharIndex := StrToInt(edtCharIndex.Text); PdfView.CurrentCharIndex := CharIndex; UpdateFontInfo; except on E: Exception do ShowMessage('Invalid character index: ' + E.Message); end; end; |
Schriftarteigenschaften verfügbar
PDFium VCL stellt diese schriftartbezogenen Eigenschaften bereit:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Font properties accessible via TPdf and TPdfView property FontFamilyName: WString; // e.g., "Arial", "Times New Roman" property FontBaseName: WString; // Internal PDF font name property FontWeight: Integer; // 100-900, 400=normal, 700=bold property FontItalicAngle: Integer; // Degrees, 0=upright, negative=italic property FontAscent: Single; // Height above baseline property FontDescent: Single; // Depth below baseline (negative) property FontIsEmbedded: Boolean; // True if font is embedded property FontData: TBytes; // Raw font data if embedded property FontHandle: FPDF_FONT; // PDFium font handle // Per-character property property FontSize[Index: Integer]: Double; // Font size for character |
Verwendung von Schrifteigenschaften zur Analyse
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
procedure AnalyzeDocumentFonts(Pdf: TPdf); var FontList: TStringList; I: Integer; FontName: string; LastFontName: string; begin FontList := TStringList.Create; FontList.Sorted := True; FontList.Duplicates := dupIgnore; try Pdf.PageNumber := 1; LastFontName := ''; for I := 0 to Pdf.CharacterCount - 1 do begin // Access font for each character // (In practice, use CurrentCharIndex pattern) // Check FontFamilyName changes // Add unique fonts to list end; ShowMessage('Document uses ' + IntToStr(FontList.Count) + ' fonts'); finally FontList.Free; end; end; |
Überprüfen der Schriftarteinbettung
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
procedure CheckFontEmbedding(Pdf: TPdf); var EmbeddedFonts, NonEmbeddedFonts: TStringList; begin EmbeddedFonts := TStringList.Create; NonEmbeddedFonts := TStringList.Create; try EmbeddedFonts.Sorted := True; EmbeddedFonts.Duplicates := dupIgnore; NonEmbeddedFonts.Sorted := True; NonEmbeddedFonts.Duplicates := dupIgnore; // Analyze fonts... if NonEmbeddedFonts.Count > 0 then begin ShowMessage('Warning: ' + IntToStr(NonEmbeddedFonts.Count) + ' fonts are not embedded. Document may not display correctly ' + 'on systems without these fonts installed.'); end else begin ShowMessage('All fonts are embedded. Document will display ' + 'consistently on all systems.'); end; finally EmbeddedFonts.Free; NonEmbeddedFonts.Free; end; end; |
Extrahieren eingebetteter Schriftartdaten
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
procedure ExtractEmbeddedFont(Pdf: TPdf; const OutputFile: string); var FontData: TBytes; FileStream: TFileStream; begin if Pdf.FontIsEmbedded then begin FontData := Pdf.FontData; if Length(FontData) > 0 then begin FileStream := TFileStream.Create(OutputFile, fmCreate); try FileStream.WriteBuffer(FontData[0], Length(FontData)); ShowMessage('Font extracted: ' + IntToStr(Length(FontData)) + ' bytes'); finally FileStream.Free; end; end; end else ShowMessage('Font is not embedded in the document.'); end; |
Grundlegendes zu den Werten der Schriftstärke
| Weight Value | Common Name |
|---|---|
| 100 | Thin |
| 200 | Extra Light |
| 300 | Light |
| 400 | Normal/Regular |
| 500 | Medium |
| 600 | Semi Bold |
| 700 | Bold |
| 800 | Extra Bold |
| 900 | Black |
Anwendungsfälle
- Qualitätskontrolle – Überprüfung, ob die korrekten Schriftarten in Dokumenten verwendet werden
- Zugänglichkeit – Überprüfung, ob die Schriftarten die Anforderungen an die Barrierefreiheit erfüllen
- Forensische Analyse – Analyse der Dokumentherkunft und -änderungen
- Preflight drucken – Überprüfung der Schriftart-Einbettung vor der Produktion
- Schriftarten-Inventar – Katalogisierung der in Dokumenten verwendeten Schriftarten
Abschluss
Die Demo zu den Schriftarteigenschaften zeigt, wie PDFium VCL umfassenden Zugriff auf Schriftartinformationen in PDF-Dokumenten bietet. Egal, ob Sie die Einbettung von Schriftarten für die Druckproduktion überprüfen oder die Typografie von Dokumenten analysieren, diese APIs stellen Ihnen die Tools zur Verfügung, die Sie benötigen.
Die Möglichkeit, auf ein beliebiges Zeichen zu klicken und sofort dessen Schrifteigenschaften anzuzeigen, macht die PDF-Analyse intuitiv und effizient.
Entdecken Sie PDF-Schriftarten detailliert mit. PDFium Delphi VCL-Komponente.