فهم الخطوط المستخدمة في مستند PDF أمر ضروري لمراقبة الجودة، والامتثال لمتطلبات إمكانية الوصول، وتحليل المستندات. خصائص الخط. يوضح العرض التوضيحي كيفية الوصول إلى معلومات تفصيلية حول الخطوط للأحرف في مستند PDF باستخدام PDFium VCL.
نظرة عامة
يتيح لك هذا العرض التوضيحي النقر على أي حرف في مستند PDF وعرض خصائص الخط الخاصة به، بما في ذلك اسم العائلة، والوزن، والنمط، والحجم، وما إذا كان الخط مضمنًا. إنه ذو قيمة لا تقدر بثمن لتحليل مستندات PDF واستكشاف الأخطاء وإصلاحها.
الميزات الرئيسية
- التحديد التفاعلي. - انقر على أي حرف لتحليله.
- اسم عائلة الخط. - عائلة الخط (مثل "Arial"، "Times New Roman").
- اسم الخط الأساسي. – الاسم الداخلي للخط في ملف PDF.
- وزن الخط. – القيمة الرقمية للوزن (400 = عادي، 700 = غامق).
- حجم الخط. – الحجم بوحدة النقاط.
- زاوية الميل. – زاوية الميل للخط المائل.
- صعود/هبوط - مقاييس رأسية
- الحالة المضمنة - ما إذا كانت الخطوط مضمنة في ملف PDF
- بيانات الخط - الوصول إلى بيانات الخط الخام إذا كانت مضمنة
متطلبات ملف PDFium DLL.
قبل تشغيل أي تطبيق PDFium VCL، تأكد من تثبيت ملفات PDFium DLL:
pdfium32.dll/pdfium64.dll– الإصدارات القياسية (حوالي 5-6 ميجابايت).pdfium32v8.dll/pdfium64v8.dll– مع محرك JavaScript V8 (حوالي 23-27 ميجابايت).
التثبيت: تشغيل PDFiumVCL\DLLs\CopyDlls.bat بصلاحيات المسؤول لنسخ ملفات DLL تلقائيًا إلى مجلدات نظام Windows.
الوصول إلى خصائص الخط
|
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; |
انقر لتحليل الحرف
|
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; |
إدخال فهرس الأحرف يدويًا.
|
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; |
خصائص الخطوط المتاحة.
PDFium VCL يوفر هذه الخصائص المتعلقة بالخطوط.
|
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 |
استخدام خصائص الخطوط للتحليل.
|
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; |
التحقق من تضمين الخطوط.
|
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; |
استخراج بيانات الخطوط المضمنة.
|
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; |
فهم قيم وزن الخط.
| 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 |
حالات الاستخدام.
- مراقبة الجودة. - تحقق من استخدام الخطوط الصحيحة في المستندات.
- إمكانية الوصول. – تحقق من أن الخطوط تلبي متطلبات إمكانية الوصول.
- تحليل جنائي. – تحليل أصول المستندات والتعديلات.
- معاينة الطباعة. – تحقق من تضمين الخطوط قبل الإنتاج.
- جرد الخطوط. – فهرس الخطوط المستخدمة في المستندات.
الخلاصة.
يوضح نموذج خصائص الخط كيفية توفير PDFium VCL وصولاً عميقاً إلى معلومات الخط في مستندات PDF. سواء كنت تتحقق من تضمين الخطوط لإنتاج الطباعة أو تقوم بتحليل تنسيق المستند، فإن هذه واجهات برمجة التطبيقات (APIs) تمنحك الأدوات التي تحتاجها.
تتيح لك إمكانية النقر على أي حرف ورؤية خصائصه بسرعة سهولة تحليل ملفات PDF بطريقة بديهية وفعالة.
استكشف خطوط PDF بعمق باستخدام مكون PDFium Delphi VCL..