ÐзпÑаÑеÑе аÑабÑкоÑо изÑеÑение ÙÙØ¶Ø Ù
ÙÙ PDF ÙØ°Ø§ кÑм ÑÑандаÑÑÐ½Ð¸Ñ TextOut и полÑÑенаÑа ÑÑÑаниÑа Ñе бÑде гÑеÑна по два наÑина едновÑеменно. ÐÑмиÑе Ñе изпиÑÐ²Ð°Ñ Ð¾Ñ Ð»Ñво на дÑÑно вмеÑÑо Ð¾Ñ Ð´ÑÑно на лÑво, а бÑквиÑе ÑÑоÑÑ Ð¾Ñделно в ÑвоиÑе изолиÑани ÑоÑми вмеÑÑо да Ñе ÑÑединÑÐ²Ð°Ñ Ð² ÑвÑÑзани дÑми. Ðе вÑÐ·Ð½Ð¸ÐºÐ²Ð°Ñ Ð³ÑеÑки. ÐодÑÑ Ð½Ð° Delphi Ñе компилиÑа, ÑайлÑÑ Ñе оÑваÑÑ, а пÑовеÑÑваÑиÑÑ, койÑо ÑеÑе аÑабÑки, ви казва, Ñе ÑезÑлÑаÑÑÑ Ðµ неизползваем. РеÑениеÑо е едно извикване, а не ÑмÑна на библиоÑека: HotPDF наÑоÑва ÑекÑÑа Ð¾Ñ Ð´ÑÑно на лÑво пÑез оÑделен меÑод, RtLTextOut, койÑо Ñе ÑпÑÐ°Ð²Ñ Ñ Ð¿ÑенаÑежданеÑо, коеÑо ÑÑандаÑÑниÑÑ TextOut не пÑави. ЧеÑиÑи неÑа в Ñози меÑод опÑеделÑÑ Ð´Ð°Ð»Ð¸ изÑ
одниÑÑ ÑезÑлÑÐ°Ñ Ðµ неизползваем: какво пÑави Ñой Ñ Ð½Ð¸Ð·Ð°, как неговиÑÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ charset избиÑа пиÑменоÑÑÑа, пÑомÑнаÑа на ниво докÑменÑ, коÑÑо пÑави каÑо ÑÑÑаниÑен еÑекÑ, и подгоÑовкаÑа на ÑÑиÑÑа, коÑÑо ÑÑÑбва да Ñе извÑÑÑи пÑÑво.
ÐаÑо ÑекÑÑÑÑ Ð¾Ñ Ð´ÑÑно на лÑво Ñе нÑждае Ð¾Ñ ÑобÑÑвено извикване
ÐоÑокÑÑ Ð¾Ñ ÑÑдÑÑжание в PDF не ÑÑÑ
ÑанÑва ÑедакÑиÑÑем ÑекÑÑ. Той ÑÑÑ
ÑанÑва глиÑове на ÑикÑиÑани позиÑии, коеÑо ознаÑава, Ñе генеÑиÑаÑиÑÑ Ð¿Ð¾Ñока ÑÑÑбва Ñам да ÑеÑи в какÑв Ñед да Ñе подÑедÑÑ Ñези глиÑове. Ðа екÑана опеÑаÑионнаÑа ÑиÑÑема пÑави Ñова вмеÑÑо ваÑ: поÑÑавеÑе аÑабÑки ÑекÑÑ Ð² TEdit и ÑекÑÑовиÑÑ ÑÑек на ÐС го пÑенаÑежда и ÑвÑÑзва, пÑеди изобÑо да видиÑе пикÑел. ТоÑно заÑова низÑÑ Ð¸Ð·Ð³Ð»ÐµÐ¶Ð´Ð° пеÑÑекÑно вÑв ваÑаÑа ÑоÑма и Ñе ÑÑпи в PDF Ñайла. ÐеÑкÑопÑÑ Ðµ ÑвÑÑÑил ÑабоÑаÑа безÑÑмно, и в моменÑа, в койÑо пиÑеÑе Ñвой ÑобÑÑвен поÑок Ð¾Ñ ÑÑдÑÑжание, ÑабоÑаÑа Ñе вÑÑÑа на ваÑа ÑÑÑана.
TextOut Ñе довеÑÑва на подадениÑе данни. То изÑеÑÑава кодовиÑе ÑоÑки в Ñеда, в койÑо ги пÑедаваÑе, Ð¾Ñ Ð»Ñво на дÑÑно, коеÑо е пÑавилно за лаÑиниÑа, киÑилиÑа и CJK (киÑайÑки, ÑпонÑки, коÑейÑки) и гÑеÑно за аÑабÑки и ивÑиÑ. RtLTextOut е извикванеÑо, коеÑо пÑÑво пÑенаÑежда Ñеда в визÑален Ñед Ð¾Ñ Ð´ÑÑно на лÑво, Ñлед коеÑо го изÑеÑÑава. HotPDF ÑмиÑлено ÑÐ°Ð·Ð´ÐµÐ»Ñ Ð´Ð²Ð°Ñа меÑода, вмеÑÑо да оÑгаÑва поÑокаÑа Ð¾Ñ ÑимволиÑе, Ñака Ñе избоÑÑÑ ÐºÐ¾Ð¹ Ð¾Ñ ÑÑÑ
да Ñе извика опÑÐµÐ´ÐµÐ»Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸ÐµÑо на пиÑменоÑÑÑа. Ðо-дÑлбокаÑа меÑ
аника на двÑпоÑоÑноÑо пÑенаÑеждане и конÑекÑÑноÑо ÑвÑÑзване на аÑабÑки език Ñа оÑделна Ñема, Ñазгледана в ÑÑаÑиÑÑа за оÑоÑмÑне на аÑабÑки и RTL ÑекÑÑ Ñ HotPDF; ÑÑк пÑакÑиÑеÑкаÑа Ñел е по-ÑÑÑна. ÐзползвайÑе RtLTextOut за поÑледоваÑелноÑÑи Ð¾Ñ Ð´ÑÑно на лÑво, използвайÑе TextOut за вÑиÑко оÑÑанало и никога не пÑенаÑоÑвайÑе едноÑо пÑез дÑÑгоÑо.

ÐÑгÑменÑÑÑ charset опÑÐµÐ´ÐµÐ»Ñ Ð¿Ð¸ÑменоÑÑÑа
Това, коеÑо Ñказва на RtLTextOut дали подÑежда аÑабÑки или ивÑиÑ, не е ÑамиÑÑ Ð¼ÐµÑод, а ÑÑиÑÑÑÑ. SetFont пÑиема Windows charset как Ñвой ÑеÑвÑÑÑи аÑгÑменÑ, и Ñази ÑÑойноÑÑ Ð¿ÑенаÑÑ Ð¿ÑавилаÑа на пиÑменоÑÑÑа в извикванеÑо Ð¾Ñ Ð´ÑÑно на лÑво: 178 избиÑа аÑабÑки, 177 избиÑа ивÑиÑ. ÐаÑÑÑойÑе кодиÑанеÑо на ÑимволиÑе (charset), Ñлед коеÑо изÑеÑÑайÑе, и дваÑа Ñеда по-Ð´Ð¾Ð»Ñ Ñе Ñе Ð¿Ð¾ÐºÐ°Ð¶Ð°Ñ Ð² пÑÐ°Ð²Ð¸Ð»Ð½Ð¸Ñ Ñед за ÑеÑене без допÑлниÑелни наÑÑÑойки.
// Arabic: charset 178 tells RtLTextOut to apply Arabic rules
Pdf.CurrentPage.SetFont('Arial Unicode MS', [], 12, 178);
Pdf.CurrentPage.RtLTextOut(400, 700, 0, 'ÙÙØ¶Ø Ù
ÙÙ PDF ÙØ°Ø§');
// Hebrew: charset 177 switches the rules to Hebrew
Pdf.CurrentPage.SetFont('Arial Unicode MS', [], 12, 177);
Pdf.CurrentPage.RtLTextOut(400, 660, 0, '×§×××¥ PDF ××');
Ðва деÑайла за Ñези кооÑдинаÑи леÑно Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ Ð¸Ð·Ð¿ÑÑнаÑи. ÐозиÑиÑÑа, коÑÑо пÑедаваÑе, вÑе оÑе е наÑалоÑо на паÑажа в ÑобÑÑвенаÑа кооÑдинаÑна ÑиÑÑема на ÑÑÑаниÑаÑа, измеÑена Ð¾Ñ Ð´Ð¾Ð»Ð½Ð¸Ñ Ð»Ñв ÑгÑл Ñ Y, наÑаÑÑÐ²Ð°Ñ Ð½Ð°Ð³Ð¾Ñе â?ÑÑÑоÑо наÑало, коеÑо използва вÑеки TextOut; RtLTextOut пÑÐ¾Ð¼ÐµÐ½Ñ Ñеда на глиÑовеÑе, а не оÑпÑавнаÑа ÑоÑка на ÑÑÑаниÑаÑа. РкакÑо пÑи вÑÑко извикване за изÑеÑÑаване, SetFont ÑÑÑбва да е пÑÑво и да Ñе повÑаÑÑ Ñлед вÑÑко AddPage, ÑÑй каÑо ÑекÑÑиÑÑ ÑÑиÑÑ Ð½Ðµ Ñе запазва Ñлед пÑекÑÑване на ÑÑÑаниÑаÑа. Ðко забÑавиÑе повÑоÑениеÑо, вÑоÑаÑа ÑÑÑаниÑа Ñе вÑÑÑа кÑм акÑÐ¸Ð²Ð½Ð¸Ñ Ð´Ð¾Ñогава ÑÑиÑÑ, коеÑо за аÑабÑки обикновено ознаÑава пÑазни пÑавоÑгÑлниÑи.
Ðе обÑÑÑа ÑекÑÑ, койÑо веÑе ÑÑе обÑÑнали ÑÑÑно
ÐдинÑÑвенаÑа гÑеÑка, коÑÑо оÑнема най-много вÑеме за оÑÑÑÑанÑване ÑÑк, е подаванеÑо на низ кÑм RtLTextOut, койÑо веÑе ÑÑе обÑÑнали ÑÑÑно. РазÑабоÑÑиÑиÑе ÑÑÐ¸Ð³Ð°Ñ Ð´Ð¾ Ñози меÑод, Ñлед каÑо пÑÑвиÑÑ Ð¸Ð¼ Ð¾Ð¿Ð¸Ñ Ñ Ð¾Ð±Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½ TextOut е излÑзÑл наобÑаÑно, и ÑеÑÑо вÑеменно ÑеÑение е да обÑÑÐ½Ð°Ñ ÑимволиÑе в кода пÑеди изÑеÑÑаванеÑо. RtLTextOut обÑÑÑа ÑекÑÑа вÑÑÑеÑно Ñам, Ñака Ñе пÑедваÑиÑелно обÑÑнаÑиÑÑ Ð½Ð¸Ð· Ñе обÑÑÑа вÑоÑи пÑÑ Ð¸ Ñе вÑÑÑа в пÑÑвонаÑалноÑо Ñи гÑеÑно ÑÑÑÑоÑние. ÐодавайÑе ÑекÑÑа в Ð½ÐµÐ³Ð¾Ð²Ð¸Ñ Ð»Ð¾Ð³Ð¸ÑеÑки Ñед â?Ñеда, в койÑо биÑ
Ñе го вÑвели и пÑоÑели на Ð³Ð»Ð°Ñ â?и оÑÑавеÑе извикванеÑо да ÑвÑÑÑи ÑабоÑаÑа по пÑенаÑежданеÑо.
ÐапанÑÑ Ðµ по-непÑиÑÑен Ð¾Ñ Ð¾Ð±Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¾ обÑÑÑане, ÑÑй каÑо двойно обÑÑнаÑиÑÑ Ð½Ð¸Ð· може да изглежда пÑавилен за нÑÐºÐ¾Ñ ÑеÑÑова ÑÑаза, изÑÑло на аÑабÑки, и Ñлед Ñова да Ñе ÑÑÑпи в моменÑа, в койÑо ÑедÑÑ ÑÑдÑÑжа лаÑинÑка дÑма или ÑиÑло. Ð Ð»Ð¸Ð½Ð¸Ñ Ð¾Ñ Ð´ÑÑно на лÑво Ñези вгÑадени паÑажи ÑÑÑбва да Ñе ÑеÑÐ°Ñ Ð¾Ñ Ð»Ñво на дÑÑно, а ÑÑÑноÑо обÑÑÑане ÑазÑÑÑава Ñова влагане, докаÑо ÑлÑÑаÑÑ Ñамо Ñ Ð°ÑабÑки език ÑлÑÑайно оÑелÑва. Така бÑгÑÑ Ð¿Ñеминава ÑÑпеÑно пÑÑÐ²Ð¸Ñ Ð²Ð¸ бÑÑз ÑеÑÑ Ð¸ Ñе поÑвÑва по-кÑÑно в Ñеална ÑакÑÑÑа Ñ Ð½Ð¾Ð¼ÐµÑ Ð½Ð° ÑмеÑка в неÑ. ÐÑемаÑ
неÑе вÑÑко ÑÑÑно обÑÑÑане в моменÑа, в койÑо пÑеминеÑе кÑм RtLTextOut.
СÑÑаниÑниÑÑ ÐµÑÐµÐºÑ Ð²ÑÑÑ Ñ Direction, койÑо Ñи ÑÑÑÑва да знаеÑе
ÐзвикванеÑо на RtLTextOut пÑÐ¾Ð¼ÐµÐ½Ñ Ð½ÐµÑо повеÑе Ð¾Ñ Ñеда, койÑо изÑеÑÑаваÑе. То ÑÑÑо Ñака пÑевклÑÑва пÑедпоÑиÑаниеÑо за поÑока на ÑеÑене на докÑменÑа на âоÑ?дÑÑно на лÑвоâ? ÑÑÑоÑо, коеÑо инаÑе биÑ
Ñе задали Ñами ÑÑез ÑвойÑÑвоÑо Direction. Това задаване Ð´Ð¾Ð±Ð°Ð²Ñ vpDirection кÑм ViewerPreferences на докÑменÑа, коеÑо казва на ÑеÑеÑа как да подÑеди ÑазÑвоÑиÑе Ð¾Ñ Ð´Ð²Ðµ ÑÑÑаниÑи и Ð¾Ñ ÐºÐ¾Ñ ÑÑÑана запоÑва оÑоÑмлениеÑо Ñ Ð´Ð²Ðµ ÑÑеÑÑположни ÑÑÑаниÑи. ÐогаÑо ÑелиÑÑ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ Ðµ на аÑабÑки или ивÑиÑ, Ñова е ÑоÑно каквоÑо иÑкаÑе, и го полÑÑаваÑе безплаÑно.
СÑÑÑва Ñи да знаеÑе за Ñова именно заÑоÑо е невидимо на единиÑна ÑÑÑаниÑа. Ðко докÑменÑÑÑ Ðµ пÑедимно Ð¾Ñ Ð»Ñво на дÑÑно Ñ ÐµÐ´Ð¸Ð½ блок Ð¾Ñ Ð´ÑÑно на лÑво, пÑÑвоÑо извикване на RtLTextOut пак Ñе пÑомени пÑедпоÑиÑаниеÑо за ÑÐµÐ»Ð¸Ñ Ñайл и ниÑо в единиÑнаÑа ÑеÑÑвана ÑÑÑаниÑа нÑма да го покаже. СимпÑомÑÑ Ñе поÑвÑва ÑедмиÑи по-кÑÑно, когаÑо нÑкой оÑпеÑаÑа двÑÑÑÑанна бÑоÑÑÑа и ÑазÑвоÑиÑе излÑÐ·Ð°Ñ Ð¾Ð³Ð»ÐµÐ´Ð°Ð»Ð½Ð¾. Ðко Ñова не е ÑелÑа ви, вÑÑнеÑе ÑÑойноÑÑÑа на Direction изÑиÑно Ñлед паÑажа Ð¾Ñ Ð´ÑÑно на лÑво:
// RtLTextOut already set the document direction to RightToLeft;
// restore left-to-right if the document is predominantly LTR
Pdf.Direction := LeftToRight;
Ðа докÑменÑ, койÑо дейÑÑвиÑелно Ñе ÑеÑе Ð¾Ñ Ð´ÑÑно на лÑво, не го пÑоменÑйÑе. ЦелÑа е да знаеÑе, Ñе извикванеÑо има еÑÐµÐºÑ Ð²ÑÑÑ Ñ ÑÐµÐ»Ð¸Ñ Ð´Ð¾ÐºÑменÑ, за да не Ñе окажеÑе изненадани пÑи пеÑÐ°Ñ Ð½Ð° бÑоÑÑÑа.
РегиÑÑÑиÑайÑе ÑÑиÑÑа, койÑо ÑазпÑоÑÑÑанÑваÑе, а не Ñози, койÑо Ñе надÑваÑе да е инÑÑалиÑан
Ðикакво пÑенаÑеждане нÑма знаÑение, ако ÑÑиÑÑÑÑ Ð½Ñма глиÑове за изÑеÑÑаване. ÐлаÑиÑеÑкиÑÑ Ð¿Ñовал е оÑÑеÑ, койÑо Ñе изобÑазÑва безÑпÑеÑно на компÑÑÑÑа на ÑазÑабоÑÑика, кÑдеÑо ÑлÑÑайно пÑиÑÑÑÑва Arial Unicode MS, но излиза каÑо Ñедове Ð¾Ñ Ð¿Ñазни кÑÑийки на ÑÑÑвÑÑа на клиенÑа, кÑдеÑо Windows ÑиÑ
омÑлком е заменил ÑÑиÑÑа Ñ ÑакÑв без никакво покÑиÑие на аÑабÑки език. РеÑениеÑо е да ÑпÑеÑе да Ñе довеÑÑваÑе на инÑÑалиÑаниÑе ÑиÑÑемни ÑÑиÑÑове и да ÑегиÑÑÑиÑаÑе ÑакÑв, койÑо доÑÑавÑÑе заедно Ñ Ð¿ÑиложениеÑо.
// Ship a known Arabic font and register it before drawing
Pdf.RegisterUnicodeTTF('C:\Fonts\NotoSansArabic.ttf');
Pdf.CurrentPage.SetFont('NotoSansArabic', [], 12, 178);
Pdf.CurrentPage.RtLTextOut(400, 700, 0, 'ÙÙØ¶Ø Ù
ÙÙ PDF ÙØ°Ø§');
Ðве огÑаниÑÐµÐ½Ð¸Ñ ÑÑпÑÑÑÑÐ²Ð°Ñ ÑегиÑÑÑаÑиÑÑа. ШÑиÑÑ, добавен ÑÑез RegisterUnicodeTTF, Ñе вгÑажда, а вгÑаденаÑа Unicode поддÑÑжка на HotPDF изиÑква докÑменÑÑÑ Ð´Ð° е на PDF 1.5 или по-нов; Ñова е пÑоблем Ñамо ако нÑÐºÐ¾Ñ Ð¿Ð¾ÑледваÑа ÑиÑÑема изиÑква PDF 1.4, но когаÑо Ñова ÑÑане, гÑеÑкаÑа е ÑиÑ
а. ÐÑÑгоÑо огÑаниÑение е по-ÑкоÑо ÑÑидиÑеÑко, оÑколкоÑо ÑеÑ
ниÑеÑко: TrueType ÑайловеÑе ÑÑдÑÑÐ¶Ð°Ñ Ð±Ð¸Ñове за ÑазÑеÑение за вгÑаждане, и ÑÑиÑÑ, койÑо изглежда добÑе на екÑан, може да е лиÑензиÑан по наÑин, койÑо забÑанÑва ÑазпÑоÑÑÑанениеÑо Ð¼Ñ Ð² докÑменÑи на клиенÑи. ÐоÑвÑÑдеÑе лиÑенза пÑеди да го вгÑадиÑе, а не Ñлед каÑо полÑÑиÑе оплакване.
ÐÑлен конзолен пÑимеÑ
СглобÑвайки вÑиÑки ÑаÑÑи заедно, еÑо ÑамоÑÑоÑÑелна пÑогÑама, коÑÑо запиÑва една ÑÑÑаниÑа Ñ Ñед на аÑабÑки, Ñед на ивÑÐ¸Ñ Ð¸ ÑмеÑен Ñед, ÑÑдÑÑÐ¶Ð°Ñ Ð»Ð°ÑинÑко име на пÑодÑкÑ. ÐÑеки блок наÑÑÑойва ÑÐ²Ð¾Ñ charset, Ñлед коеÑо изÑеÑÑава в логиÑеÑки Ñед.
program RtLTextOutDemo;
{$APPTYPE CONSOLE}
uses
HPDFDoc; // HotPDF main unit
var
Pdf: THotPDF;
begin
Pdf := THotPDF.Create(nil);
try
Pdf.FileName := 'RtLTextOut.pdf';
Pdf.BeginDoc;
// A Latin heading goes through the ordinary TextOut path
Pdf.CurrentPage.SetFont('Arial', [fsBold], 16);
Pdf.CurrentPage.TextOut(40, 780, 0, 'Right-to-left text with HotPDF');
// Arabic: charset 178, logical order, RtLTextOut does the reordering
Pdf.CurrentPage.SetFont('Arial Unicode MS', [], 12, 178);
Pdf.CurrentPage.RtLTextOut(400, 720, 0,
'ÙÙØ¶Ø Ù
ÙÙ PDF ÙØ°Ø§ ÙÙÙÙØ© Ø§ÙØªØ¹Ø§Ù
Ù Ù
ع اÙÙØµ Ø§ÙØ¹Ø±Ø¨Ù.');
// Hebrew: charset 177
Pdf.CurrentPage.SetFont('Arial Unicode MS', [], 12, 177);
Pdf.CurrentPage.RtLTextOut(400, 680, 0,
'×§×××¥ PDF ×× ××××× ××§×¡× ×¢××¨× ××××¨× ××××× ×ש×××.');
// Mixed line: the embedded Latin word still reads left to right
Pdf.CurrentPage.SetFont('Arial Unicode MS', [], 12, 178);
Pdf.CurrentPage.RtLTextOut(400, 640, 0,
'Ù
Ø±ØØ¨Ø§ Ø¨Ø§ÙØ¹Ø§ÙÙ
! تÙ
Ø¥ÙØ´Ø§Ø¤Ù Ø¨ÙØ§Ø³Ø·Ø© HotPDF');
Pdf.EndDoc;
Writeln('Wrote RtLTextOut.pdf');
finally
Pdf.Free;
end;
end.
СÑаÑÑиÑайÑе Ñ Ð¸ оÑвоÑеÑе ÑезÑлÑаÑа. РедовеÑе на аÑабÑки и ивÑÐ¸Ñ Ñе ÑеÑÐ°Ñ Ð¾Ñ Ð´ÑÑно на лÑво, бÑквиÑе Ñе ÑвÑÑÐ·Ð²Ð°Ñ Ñам, кÑдеÑо пиÑменоÑÑÑа ги ÑÑединÑва, а на поÑÐ»ÐµÐ´Ð½Ð¸Ñ Ñед лекÑемаÑа HotPDF Ñеди Ð¾Ñ Ð»Ñво на дÑÑно в аÑабÑÐºÐ¸Ñ Ð¿Ð°Ñаж, коеÑо е пÑавилниÑÑ ÑезÑлÑÐ°Ñ ÑпоÑед ÑпеÑиÑикаÑиÑÑа, Ð¼Ð°ÐºÐ°Ñ Ð¸ да изненадва вÑеки, койÑо вижда двÑпоÑоÑно оÑоÑмление за пÑÑви пÑÑ. Този поÑледен Ð¼Ð¾Ð¼ÐµÐ½Ñ Ñи ÑÑÑÑва да Ñе вклÑÑи в кÑиÑеÑииÑе ви за пÑиемане, пÑеди Ñоден говоÑиÑел да пÑегледа ÑезÑлÑаÑа, ÑÑй каÑо ÑеÑенеÑо на вгÑÐ°Ð´ÐµÐ½Ð¸Ñ Ð¿Ð°Ñаж в âгÑеÑнаÑаâ?поÑока ÑпÑÑмо заобикалÑÑаÑа пиÑменоÑÑ Ðµ неÑоÑо, коеÑо най-ÑеÑÑо Ñе докладва каÑо бÑг, без да е ÑакÑв.
ÐÑовеÑка на ÑезÑлÑаÑа
СÑÑаниÑа, коÑÑо изглежда пÑавилно, не е ÑÑÑоÑо каÑо ÑÑÑаниÑа, коÑÑо е пÑавилна, Ñака Ñе Ñ Ð¿ÑовеÑеÑе по наÑина, по койÑо Ñе го напÑави ÑледваÑа по веÑигаÑа ÑиÑÑема. ÐопиÑайÑе ÑекÑÑа обÑаÑно Ð¾Ñ ÑеÑеÑа и ÑÑавнеÑе кодовиÑе ÑоÑки Ñ Ð¾ÑÐ¸Ð³Ð¸Ð½Ð°Ð»Ð½Ð¸Ñ Ð½Ð¸Ð·; пÑавилниÑÑ Ð²Ð¸Ð·Ñален Ñед Ñ ÑазбÑÑкан логиÑеÑки Ñед е Ñеален вид гÑеÑка. СÑаÑÑиÑайÑе ÑÑÑÑене в докÑменÑа за дÑма, коÑÑо виждаÑе на ÑÑÑаниÑаÑа. След Ñова оÑвоÑеÑе Ñайла на маÑина, коÑÑо нÑма ваÑиÑе ÑÑиÑÑове за ÑазÑабоÑка â?Ñова е най-веÑоÑÑниÑÑ Ð½Ð°Ñин да оÑкÑиеÑе ÑÐ¸Ñ Ð° замÑна. ÐиÑо Ð¾Ñ Ñова не замеÑÑва ÑеÑенеÑо на иÑÑинÑки докÑÐ¼ÐµÐ½Ñ Ð¾Ñ Ñоден говоÑиÑел, коеÑо ÑÐ»Ð°Ð²Ñ Ð¿Ñоблеми, каквиÑо ÑинÑеÑиÑен ÑеÑÑов низ не би могÑл, Ñака Ñе планиÑайÑе Ñози пÑеглед, пÑеди ÑоÑмаÑÑÑ Ð´Ð° бÑде доÑÑавен.
RtLTextOut Ñе ÑпÑÐ°Ð²Ñ Ñ Ð´Ð²ÑпоÑоÑноÑо пÑенаÑеждане и конÑекÑÑноÑо ÑвÑÑзване на аÑабÑки език, коеÑо обÑ
ваÑа по-голÑмаÑа ÑаÑÑ Ð¾Ñ ÑабоÑаÑа Ñ Ð¾ÑÑеÑи и докÑменÑи Ð¾Ñ Ð´ÑÑно на лÑво. ÐÑаниÑиÑе на вÑзможноÑÑиÑе мÑ, пиÑменоÑÑиÑе, коиÑо Ñе нÑждаÑÑ Ð¾Ñ Ð¿Ð¾Ð²ÐµÑе Ð¾Ñ Ð¿ÑенаÑеждане и ÑвÑÑзване (каÑо индийÑкиÑе езикови Ñамилии), и незадÑлжиÑелниÑе OpenType ÑÑнкÑии, пÑеминаваÑи пÑез замÑна на единиÑни глиÑове, Ñа опиÑани заедно Ñ Ð¿Ð¾Ð´ÑобноÑÑиÑе за покÑиÑиеÑо на глиÑовеÑе и оÑоÑмÑнеÑо в пÑидÑÑжаваÑаÑа ÑÑаÑÐ¸Ñ Ð·Ð° оÑоÑмÑне на аÑабÑки и RTL ÑекÑÑ Ñ HotPDF.
ÐзвикваниÑÑа на RtLTextOut, SetFont и RegisterUnicodeTTF, показани ÑÑк, Ñа ÑаÑÑ Ð¾Ñ HotPDF Component за Delphi и C++Builder.