مقالة تقنية

وظيفة RtLTextOut في مكون HotPDF

· برمجة PDF

النص من اليمين إلى اليسار في توليد ملفات PDF: نقدم وظيفة RtLTextOut من HotPDF.

مقدمة إلى اللغات التي تكتب من اليمين إلى اليسار.

تمثل اللغات التي تكتب من اليمين إلى اليسار (RTL) جزءًا كبيرًا من أنظمة الاتصال الكتابي في العالم، حيث تخدم أكثر من 400 مليون شخص على مستوى العالم. وتشمل هذه اللغات العربية والعبرية والفارسية والأردية والبشتو والعديد من اللغات الأخرى، ولكل منها خصائصها الثقافية الفريدة.

السياق التاريخي والثقافي.

تتمتع أنظمة الكتابة من اليمين إلى اليسار بجذور تاريخية قديمة تعود إلى آلاف السنين. على سبيل المثال، تطورت اللغة العربية من الكتابة النبطية وأصبحت موحدة في الفترة الإسلامية المبكرة. اللغة العبرية لها تاريخ أطول، حيث توجد نقوش عبرية قديمة تعود إلى القرن العاشر قبل الميلاد. تطورت هذه الأنظمة الكتابية بشكل مستقل عن الأنظمة الكتابية القائمة على اللغة اللاتينية وتعكس مناهج مختلفة لتنظيم المعلومات المكتوبة.

الخصائص اللغوية للغات RTL.

تمتلك لغات RTL عدة خصائص مميزة تؤثر على معالجة النصوص الرقمية:

  • اتجاه النص.النص يتدفق من اليمين إلى اليسار، عكس اللغات الأوروبية.
  • أشكال الحروف السياقية.العديد من أنظمة الكتابة من اليمين إلى اليسار تستخدم أشكال أحرف مختلفة حسب الموضع (أولي، وسيط، نهائي، معزول).
  • الروابط والوصلات.غالبًا ما تتصل الأحرف لتشكل كلمات متصلة، مما يتطلب عرضًا متطورًا.
  • علامات التشكيل.تظهر علامات الحروف المتحركة وغيرها من العلامات فوق أو أسفل الأحرف الأساسية.
  • النص ثنائي الاتجاه.الوثائق المكتوبة من اليمين إلى اليسار غالبًا ما تحتوي على عناصر من اليسار إلى اليمين (أرقام، نصوص لاتينية، عناوين URL).

التحديات الرقمية ومعايير Unicode.

يمثل التمثيل الرقمي للغات من اليمين إلى اليسار تحديات تقنية فريدة.

  1. ترميز الأحرف.يوفر Unicode نقاط ترميز قياسية لأحرف من اليمين إلى اليسار.
    • العربية: U+0600-U+06FF (كتلة الأحرف العربية).
    • العبرية: U+0590-U+05FF (كتلة الأحرف العبرية).
    • ملحق العربية: U+0750-U+077F.
    • اللغة العربية الممتدة-أ: U+08A0-U+08FF
  2. خوارزمية الاتجاه المزدوجالخوارزمية المزدوجة Unicode (UBA) تحدد كيفية معالجة النصوص المختلطة من اليمين إلى اليسار و من اليسار إلى اليمين.
  3. متطلبات الخطوطالنصوص من اليمين إلى اليسار تتطلب خطوطًا ذات تغطية مناسبة للرموز وقدرات تشكيل.
  4. اعتبارات التخطيطيجب أن تتكيف واجهات المستخدم والمستندات مع أنماط القراءة من اليمين إلى اليسار.

الأهمية في السوق العالمية.

إن دعم اللغات من اليمين إلى اليسار أمر بالغ الأهمية للشركات والمؤسسات التي تعمل في أسواق متنوعة:

  • مناطق ناطقة باللغة العربية.في 22 دولة، يبلغ عدد المتحدثين الأصليين أكثر من 300 مليون.
  • السوق العبرية.في إسرائيل والمجتمعات اليهودية في جميع أنحاء العالم.
  • الفارسية/الفارسية.إيران، أفغانستان، وطاجيكستان.
  • أردوباكستان وأجزاء من الهند.
  • الأثر الاقتصادي.الناتج المحلي الإجمالي المجمّع لمناطق لغات RTL يتجاوز 4 تريليونات دولار.

في عالمنا المعولم اليوم، أصبح إنشاء مستندات PDF تدعم بشكل صحيح لغات وأنظمة كتابة متعددة أمرًا بالغ الأهمية. في حين أن معظم مكتبات إنشاء PDF تتعامل بسهولة مع اللغات من اليسار إلى اليمين (LTR) مثل الإنجليزية والفرنسية والألمانية، فإن دعم اللغات من اليمين إلى اليسار (RTL) مثل العربية والعبرية يمثل تحديات فريدة. تستكشف هذه المقالة الوظيفة المبتكرة RtLTextOut في مكون HotPDF لبرنامج Delphi وتوضح تطبيقها العملي من خلال تطبيق تجريبي شامل.

فهم تحدي النص RTL في ملفات PDF.

تتطلب اللغات من اليمين إلى اليسار معالجة خاصة في المستندات الرقمية لعدة أسباب:

  1. ترتيب الأحرف.النص المكتوب من اليمين إلى اليسار يتدفق من اليمين إلى اليسار، عكس اللغات التي تكتب من اليسار إلى اليمين.
  2. النص ثنائي الاتجاه.غالبًا ما تحتوي المستندات على محتوى مختلط من النص المكتوب من اليمين إلى اليسار ومن اليسار إلى اليمين.
  3. سلوك عارض PDF.تحتاج برامج قراءة PDF إلى إشارات اتجاه صحيحة لعرض النص بشكل صحيح.
  4. تعقيد Unicode.الأحرف المكتوبة من اليمين إلى اليسار لها نطاقات Unicode محددة يجب اكتشافها ومعالجتها.

غالبًا ما تفشل طرق إنشاء ملفات PDF التقليدية عند التعامل مع النص المكتوب من اليمين إلى اليسار، مما يؤدي إلى تسلسل أحرف معكوس، أو ترتيب قراءة غير صحيح، أو إخراج مشوش تمامًا.

RTL Text Processing Workflow Diagram showing the complete process from input text analysis through character segmentation, segment-based processing algorithm, to final bidirectional output in PDF format
الشكل 1: سير عمل معالجة النص من اليمين إلى اليسار في HotPDF – يوضح الخوارزمية القائمة على المقاطع التي تعالج النصوص المختلطة من اليمين إلى اليسار ومن اليسار إلى اليمين عن طريق الحفاظ على ترتيب المقاطع من اليمين إلى اليسار مع عكس المقاطع من اليسار إلى اليمين داخليًا لعرض ثنائي الاتجاه صحيح في مستندات PDF.

مقدمة لدالة RtLTextOut في HotPDF.

يتناول مكون HotPDF هذه التحديات من خلال تصميمه المتطور. RtLTextOut ، والتي تنفذ خوارزميات متقدمة لمعالجة النصوص ثنائية الاتجاه. على عكس الأساليب البسيطة التي تعتمد على عكس الأحرف، RtLTextOut تستخدم المعالجة القائمة على المقاطع للتعامل مع المحتوى المختلط من اليمين إلى اليسار ومن اليسار إلى اليمين بذكاء.

توقيعات الدوال.

الـ RtLTextOut توفر الدالة إصدارين متطابقين لتوفير أقصى قدر من المرونة.

1
2
3
4
5
// PWORD version for direct Unicode character array access
procedure RtLTextOut(X, Y: Single; angle: Extended; Text: PWORD; TextLength: Integer);
 
// WideString version for convenient string handling
procedure RtLTextOut(X, Y: Single; angle: Extended; Text: WideString);

الخوارزمية الأساسية: المعالجة القائمة على المقاطع.

يكمن جوهر RtLTextOut في خوارزمية ثنائية الاتجاه تعتمد على التقسيم. بدلاً من عكس الأحرف بشكل شامل، تقوم الدالة:

  1. بتحليل أنواع الأحرف: لتحديد أحرف الكتابة من اليمين إلى اليسار (العربية: U+0600-U+06FF، العبرية: U+0590-U+05FF)
  2. بتقسيم النص: لتجميع الأحرف المتتالية من نفس النوع (من اليمين إلى اليسار أو من اليسار إلى اليمين)
  3. بتطبيق معالجة انتقائية:
    • تحتفظ المقاطع من اليمين إلى اليسار بترتيبها الأصلي.
    • يتم عكس مقاطع LTR داخليًا.
  4. ينتج مخرجات صحيحة.يؤدي إلى النمط. Reversed(C)+B+Reversed(A) للمقاطع. A+B+C

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
// Core segment processing logic
I := 0;
while I < TextLength do begin // Determine if current character starts an RTL or LTR segment IsRTLChar := ((ReversedText[I] >= $0600) and (ReversedText[I] <= $06FF)) or // Arabic ((ReversedText[I] >= $0590) and (ReversedText[I] <= $05FF));      // Hebrew
  
  CurrentSegmentIsRTL := IsRTLChar;
  SegmentStart := I;
  
  // Find the end of current segment (same character type)
  while (I < TextLength) do begin IsRTLChar := ((ReversedText[I] >= $0600) and (ReversedText[I] <= $06FF)) or ((ReversedText[I] >= $0590) and (ReversedText[I] <= $05FF));
    
    if IsRTLChar <> CurrentSegmentIsRTL then
      Break;
    Inc(I);
  end;
  
  SegmentEnd := I - 1;
  
  // Process the segment
  if CurrentSegmentIsRTL then
  begin
    // RTL segment: keep original order
    for J := SegmentStart to SegmentEnd do
      OutputText[J] := ReversedText[J];
  end
  else
  begin
    // LTR segment: reverse the segment internally
    for J := SegmentStart to SegmentEnd do
      OutputText[J] := ReversedText[SegmentEnd - (J - SegmentStart)];
  end;
end;

تكوين تلقائي لاتجاه ملف PDF.

بالإضافة إلى معالجة النصوص، RtLTextOut يقوم تلقائيًا بتكوين مستند PDF لعرض RTL الأمثل:

1
2
3
4
5
// Store original direction and set to RightToLeft
OriginalDirection := FParent.FDirection;
FParent.FDirection := RightToLeft;
FParent.FViewerPreference := FParent.FViewerPreference + [vpDirection];
FParent.FVPChanged := true;

يضمن ذلك أن يفتح برنامج عرض ملفات PDF المستند بالاتجاه الصحيح للقراءة، مما يوفر للمستخدمين تجربة قراءة بديهية.

استكشاف تطبيق RtLTextOut التجريبي.

تتضمن مكتبة HotPDF تطبيقًا تجريبيًا شاملاً (Demo\Delphi\RtLTextOut\RtLTextOut.dpr) يوضح RtLTextOut قدرات الدالة في سيناريوهات مختلفة.

هيكل وميزات التطبيق التجريبي.

يوضح التطبيق التجريبي ما يلي:

  • إخراج نص عربي أساسي.: عرض نص RTL بسيط.
  • دعم النص العبري.: معالجة شاملة لأحرف العبرية.
  • محتوى متعدد اللغات: تركيبات نصية من اليمين إلى اليسار (RTL) ومن اليسار إلى اليمين (LTR).
  • الوثائق الفنية.: ملاحظات التنفيذ وأفضل الممارسات.

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
program RtLTextOut;
{$I ..\..\..\Lib\HotPDF.inc}
 
{$APPTYPE CONSOLE}
 
uses
  {$IFDEF XE2+}
  System.SysUtils,
  Vcl.Graphics,
  {$ELSE}
  SysUtils,
  Graphics,
  {$ENDIF}
  HPDFDoc;
 
var
  HotPDF: THotPDF;
begin
  try
    HotPDF := THotPDF.Create(nil);
    try
      HotPDF.FileName := 'RtLTextOut.pdf';
      HotPDF.Title := 'RtLTextOut Function Test - Right-to-Left Text Output';
 
      HotPDF.BeginDoc;
 
      // Title
      HotPDF.CurrentPage.SetFont('Arial', [fsBold], 18, 0, False);
      HotPDF.CurrentPage.TextOut(40, 50, 0, 'RtLTextOut Function Demonstration');
 
      // Arabic text demonstration
      HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 178, False);
      HotPDF.CurrentPage.TextOut(40, 160, 0, 'RtLTextOut:');
      HotPDF.CurrentPage.RtLTextOut(40, 180, 0, 'يوضح ملف PDF هذا كيفية التعامل بشكل صحيح مع النص العربي من اليمين إلى اليسار.');
 
      // Hebrew text demonstration
      HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 177, False);
      HotPDF.CurrentPage.RtLTextOut(40, 370, 0, 'קובץ PDF זה מדגים כיצד לטפל כראוי בטקסט עברי הזורם מימין לשמאל.');
 
      // Mixed text demonstration
      HotPDF.CurrentPage.RtLTextOut(40, 550, 0, 'مرحبا بالعالم! اكتب في مستندات PDF التي تم إنشاؤها بواسطة مكون HotPDF');
 
      HotPDF.EndDoc;
      Writeln('RtLTextOut.pdf created successfully!');
 
    finally
      HotPDF.Free;
    end;
  except
    on E: Exception do
      Writeln('Error: ', E.Message);
  end;
end.

أبرز مميزات العرض التوضيحي.

معالجة النصوص العربية.: يوضح العرض التوضيحي كيفية RtLTextOut معالجة الجمل العربية المعقدة مع تدفق وتنسيق الأحرف المناسبين.

دعم اللغة العبرية: يوضح عرض النص العبري مع التوجيه الصحيح من اليمين إلى اليسار.

محتوى متعدد اللغات: يوضح كيفية معالجة الدالة للنص الذي يحتوي على عناصر من اليمين إلى اليسار ويسار إلى اليمين بذكاء.

تكوين الخط: يوضح كيفية اختيار خط Unicode بشكل صحيح.Arial Unicode MSلدعم أحرف لغة الكتابة من اليمين إلى اليسار.

تفاصيل التنفيذ التقني.

اكتشاف أحرف Unicode.

تستخدم الدالة آلية قوية لاكتشاف نطاقات Unicode:

  • العربية.: من U+0600 إلى U+06FF (1536-1791 عشري).
  • العبرية.: من U+0590 إلى U+05FF (1424-1535 عشري).

إدارة الذاكرة.

معالجة المصفوفات الفعالة تضمن أداءً مثاليًا.

1
2
3
4
5
6
7
8
9
10
// Initialize arrays
SetLength(ReversedText, TextLength);
SetLength(OutputText, TextLength);
 
// Copy original text first
for I := 0 to TextLength - 1 do
begin
  ReversedText[I] := TempText^;
  Inc(TempText);
end;

دعم النص العمودي.

تتضمن الدالة معالجة خاصة للخطوط العمودية.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if CurrentFontObj.IsVertical then
begin
  DeltaH := TextHeight('Zj');
  DeltaW := TextWidth('W');
  HorizontalLine := Y;
  ChBuff := @ChCode;
  for I := 0 to TextLength - 1 do
  begin
    ChCode := OutputText[I];
    if (ChCode = $30FC) then
      ChCode := $7C;
    InternUnicodeTextOut(X + (DeltaW / 2), HorizontalLine - DeltaH, 0, ChBuff, 1);
    HorizontalLine := HorizontalLine + DeltaH;
  end;
end
else
  InternUnicodeTextOut(X, Y, angle, @OutputText[0], TextLength);

أفضل الممارسات للنص من اليمين إلى اليسار في ملفات PDF.

اختيار الخطوط.

اختر خطوطًا تدعم Unicode وتدعم لغات RTL المستهدفة.

  • Arial Unicode MS.دعم شامل لـ Unicode.
  • Times New Roman.مناسب للمحتوى المختلط.
  • Tahoma.دعم ممتاز للغة العربية.

ترميز النص.

تأكد من استخدام ترميز Unicode الصحيح في النص المصدر الخاص بك:

1
2
3
4
5
6
7
// Use WideString for Unicode text
var
  ArabicText: WideString;
begin
  ArabicText := 'النص العربي';
  HotPDF.CurrentPage.RtLTextOut(X, Y, 0, ArabicText);
end;

توافق مع عارض PDF.

الإعداد التلقائي لاتجاه العرض يضمن التوافق عبر برامج عرض ملفات PDF:

  • Adobe Acrobat Reader
  • Foxit Reader
  • Chrome PDF Viewer
  • Firefox PDF Viewer

اعتبارات الأداء

يوفر الخوارزمية القائمة على المقاطع خصائص أداء ممتازة:

  1. تعقيد زمني خطيO(n) وقت المعالجة.
  2. الحد الأدنى من الحمل على الذاكرة.إدارة فعالة للمصفوفات.
  3. معالجة في مسار واحد.لا يتطلب تكرارات متعددة.
  4. كشف الأحرف مُحسّن.عمليات فحص سريعة لنطاقات Unicode.

تطبيقات عملية.

تَوْطِينُ الْمُسْتَنَدَات.

الـ RtLTextOut تُمَكِّنُ الدَّالة من التَّوطِينِ السَّلس للمُسْتَنَدَاتِ لِلأسْوَاقِ ذاتِ الاتِّجاهِ من اليمين إلى اليسار.

  • مُسْتَنَدَاتٌ قانونية باللغة العربية.
  • كتيبات فنية باللغة العبرية.
  • نماذج وعقود متعددة اللغات.
  • مواد تعليمية.

الأعمال التجارية الدولية.

يمكن للشركات العاملة في الأسواق الناطقة بلغات من اليمين إلى اليسار الاستفادة من هذه الوظيفة لـ:

  • إنشاء الفواتير.
  • إنشاء التقارير.
  • طباعة الشهادات.
  • مواد التسويق.

استكشاف الأخطاء الشائعة وإصلاحها.

مشاكل ترميز الأحرف.

مشكلة.: أحرف مشوهة أو مفقودة.
الحل.: تأكد من استخدام ترميز Unicode واختيار الخط المناسب.

1
2
3
4
5
// Correct approach
HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 178, False);
var
  Text: WideString := 'النص العربي';
HotPDF.CurrentPage.RtLTextOut(X, Y, 0, Text);

مشاكل الاتجاه.

مشكلة.: يظهر النص في الاتجاه الخاطئ.
الحل.: تحقق من أن. RtLTextOut مستخدمة بدلاً من النسخة العادية. TextOut

مشاكل المحتوى المختلط.

مشكلة.: ترتيب غير صحيح في النصوص التي تحتوي على اتجاهات RTL وLTR.
الحل.: الخوارزمية القائمة على المقاطع تعالج هذا تلقائيًا.

التحسينات المستقبلية وخطة العمل.

فريق تطوير HotPDF يواصل تحسين دعم RTL.

  1. دعم لغات موسع.لغات إضافية تدعم الكتابة من اليمين إلى اليسار.
  2. معالجة متقدمة للخطوط المعقدة.ميزات طباعية متقدمة.
  3. تحسينات في الأداء.تحسينات إضافية في السرعة.
  4. تصحيح أخطاء مُحسّن.أدوات تشخيصية أفضل.

كلمات أخيرة.

الـ RtLTextOut الدالة في HotPDF تمثل تقدمًا كبيرًا في تقنية إنشاء ملفات PDF للغات الكتابة من اليمين إلى اليسار. يتيح خوارزمية المعالجة المتقدمة القائمة على المقاطع، جنبًا إلى جنب مع التكوين التلقائي لملفات PDF، للمطورين أداة قوية لإنشاء مستندات PDF دولية حقيقية.

تطبيق العرض التوضيحي الشامل يعمل كمورد تعليمي ودليل عملي، حيث يوضح أفضل الممارسات للتعامل مع النصوص من اليمين إلى اليسار في سيناريوهات واقعية. سواء كنت تقوم بتطوير تطبيقات للأسواق الناطقة باللغة العربية، أو إنشاء وثائق باللغة العبرية، أو بناء أنظمة متعددة اللغات، فإن RtLTextOut الدالة توفر الأساس القوي اللازم لإنشاء ملفات PDF بجودة احترافية.

من خلال فهم وتنفيذ هذه التقنيات، يمكن للمطورين إنشاء مستندات PDF تخدم بشكل صحيح الجماهير العالمية، وتكسر الحواجز اللغوية، وتضمن أن المحتوى متاح وقابل للقراءة بغض النظر عن نظام الكتابة المستخدم.


لمزيد من المعلومات حول HotPDF وميزاته المتقدمة، يرجى زيارة الوثائق الرسمية أو استكشاف تطبيقات العرض التوضيحي الشاملة المضمنة مع المكون.