Comprender las fuentes utilizadas en un documento PDF es esencial para el control de calidad, el cumplimiento de la accesibilidad y la forense documental. Propiedades de la fuente La demostración muestra cómo acceder a información detallada sobre las fuentes de los caracteres en un PDF utilizando PDFium VCL.
Resumen
Esta demostración le permite hacer clic en cualquier carácter de un PDF y ver sus propiedades de fuente, incluyendo el nombre de la familia, el grosor, el estilo, el tamaño y si la fuente está incrustada. Es invaluable para el análisis y la resolución de problemas de PDF.
Características principales
- Selección interactiva – Haga clic en cualquier carácter para analizarlo.
- Nombre de la familia de fuentes – La familia de fuentes (por ejemplo, "Arial", "Times New Roman").
- Nombre base de la fuente. – El nombre interno de la fuente PDF.
- Grosor de la fuente. – Grosor numérico (400 = normal, 700 = negrita).
- Tamaño de la fuente. – Tamaño en puntos.
- Ángulo de cursiva. – Ángulo de inclinación para fuentes en cursiva.
- Ascenso/Descenso – Métricas verticales
- Estado Embebido – Indica si la fuente está incrustada en el PDF
- Datos de la Fuente – Accede a los datos de la fuente sin procesar si está incrustada
Requisitos de la DLL PDFium
Antes de ejecutar cualquier aplicación PDFium VCL, asegúrese de que los archivos DLL de PDFium estén instalados:
pdfium32.dll/pdfium64.dll– Versiones estándar (~5-6 MB)pdfium32v8.dll/pdfium64v8.dll– Con el motor JavaScript V8 (~23-27 MB)
Instalación: Ejecutar PDFiumVCL\DLLs\CopyDlls.bat como administrador para copiar automáticamente los archivos DLL a los directorios del sistema de Windows.
Acceso a las Propiedades de la Fuente
|
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; |
Haz clic para analizar el carácter
|
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; |
Entrada manual del índice de caracteres.
|
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; |
Propiedades de la fuente disponibles.
PDFium VCL expone estas propiedades relacionadas con la fuente:
|
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 |
Uso de las propiedades de la fuente para el análisis.
|
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; |
Comprobación de la incrustación de fuentes.
|
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; |
Extracción de datos de fuentes incrustadas.
|
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; |
Comprensión de los valores de grosor de fuente.
| 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 |
Casos de uso.
- Control de calidad. – Verificar que se utilizan las fuentes correctas en los documentos.
- Accesibilidad – Verificar que las fuentes cumplan con los requisitos de accesibilidad.
- Análisis forense – Analizar el origen y las modificaciones de los documentos.
- Comprobación de preimpresión – Verificar la incrustación de fuentes antes de la producción.
- Inventario de fuentes – Catalogar las fuentes utilizadas en los documentos.
Conclusión.
La demostración de propiedades de fuente muestra cómo PDFium VCL proporciona un acceso profundo a la información de la fuente en documentos PDF. Ya sea que esté verificando la incrustación de fuentes para la producción de impresión o analizando la tipografía del documento, estas API le brindan las herramientas que necesita.
La capacidad de hacer clic en cualquier carácter y ver instantáneamente sus propiedades de fuente hace que el análisis de PDF sea intuitivo y eficiente.
Explore las fuentes de PDF en profundidad con Componente PDFium Delphi VCL..