----Next_Part(Sun_Mar_19_00_42_18_2006_921)-- Content-Type: Multipart/Mixed; boundary -Next_Part(Sun_Mar_19_00_42_18_2006_921)--" ----Next_Part(Sun_Mar_19_00_42_18_2006_921)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hi, In <1142687748.778142.58240 / g10g2000cwb.googlegroups.com> "Arabic PDF Reports" on Sat, 18 Mar 2006 22:18:48 +0900, "Tobes" <tobin / tobinharris.com> wrote: > I need to be able to generate PDF reports in Arabic using Ruby, does > anyone know of any reporting libraries or tools that will let me do > this? What about a combination of Ruby/GnomePrint and Ruby/Pango? I attach two examples: * gen-arabic-pdf.rb: a simple example. output: http://pub.cozmixng.org/~kou/archives/arabic-sample.pdf * gen-m17n-pdf.rb: a general example. output: http://pub.cozmixng.org/~kou/archives/m17n-sample.pdf Thanks, -- kou ----Next_Part(Sun_Mar_19_00_42_18_2006_921)-- Content-Type: Text/Plain; charset=utf-8 Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="gen-arabic-pdf.rb" IyEvdXNyL2Jpbi9lbnYgcnVieQ0KDQokS0NPREUgPSAiVVRGLTgiDQoNCnJlcXVpcmUgJ2dub21l cHJpbnQyJw0KDQpqb2IgPSBHbm9tZTo6UHJpbnRKb2IubmV3DQpqb2IuY29uZmlnWyJQcmludGVy Il0gPSAiUERGIg0Kam9iLnByaW50X3RvX2ZpbGUoImFyYWJpYy1zYW1wbGUucGRmIikNCmNvbnRl eHQgPSBqb2IuY29udGV4dA0KDQpjb250ZXh0LmJlZ2luX3BhZ2UgZG8NCiAgeCA9IDI1MA0KICB5 ID0gNTAwDQogIFsiSGVsbG8iLCAi2KfZjtmE2LPZkdmO2YTZjtin2YXZjyDYudmO2YTZjtmK2ZLZ g9mP2YUiXS5lYWNoIGRvIHx0ZXh0fA0KICAgIGxheW91dCA9IGNvbnRleHQuY3JlYXRlX2xheW91 dA0KICAgIGxheW91dC50ZXh0ID0gdGV4dA0KICAgIGxheW91dC53aWR0aCA9IDcwICogUGFuZ286 OlNDQUxFDQogICAgbGF5b3V0LmNvbnRleHRfY2hhbmdlZA0KDQogICAgY29udGV4dC5tb3ZlX3Rv KHgsIHkpDQogICAgY29udGV4dC5sYXlvdXQobGF5b3V0KQ0KICAgIHkgLT0gbGF5b3V0LnBpeGVs X3NpemVbMV0gKyAxMA0KICBlbmQNCmVuZA0KDQpqb2IuY2xvc2UNCmpvYi5wcmludA0K ----Next_Part(Sun_Mar_19_00_42_18_2006_921)-- Content-Type: Text/Plain; charset=utf-8 Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="gen-m17n-pdf.rb" IyEvdXNyL2Jpbi9lbnYgcnVieQ0KDQokS0NPREUgPSAiVVRGLTgiDQoNCnJlcXVpcmUgJ0VuZ2xp c2gnDQpyZXF1aXJlICdnbm9tZXByaW50MicNCg0KdGV4dHMgPSBbXQ0KREFUQS5yZWFkLmVhY2gg ZG8gfGxpbmV8DQogIG5leHQgaWYgL1xBXHMqXHovID1+IGxpbmUNCiAgbGFuZywgaGVsbG8gPSBs aW5lLmNob3Auc3BsaXQoL1xzKixccyovdSwgMikNCiAgaWYgL1xzKyhcKC4rXCkpXHovdSA9fiBs YW5nDQogICAgbGFuZywgbmF0aXZlX2xhbmcgPSAkUFJFTUFUQ0gsICQxDQogIGVsc2UNCiAgICBu YXRpdmVfbGFuZyA9IGxhbmcNCiAgZW5kDQogIHRleHRzIDw8IFtsYW5nLCBuYXRpdmVfbGFuZywg aGVsbG9dDQplbmQNCg0KaGVhZGVyID0gWyJMYW5ndWFnZSIsICIoTGFuZ3VhZ2UgaW4gdGhlIGxh bmd1YWdlKSIsICJIZWxsbyBpbiB0aGUgbGFuZ3VhZ2UiXQ0KaGVhZGVyLmNvbGxlY3QhIGRvIHx0 ZXh0fA0KICAiPHNwYW4gY29sb3I9J3JlZCcgc2l6ZT0nbGFyZ2UnPiN7dGV4dH08L3NwYW4+Ig0K ZW5kDQp0ZXh0cy51bnNoaWZ0KGhlYWRlcikNCg0KDQpqb2IgPSBHbm9tZTo6UHJpbnRKb2IubmV3 DQpwcmludGVyID0gR25vbWU6OkdQQVJvb3QucHJpbnRlcnMuZmluZCBkbyB8X3ByaW50ZXJ8DQog IC9QREYvaSA9fiBfcHJpbnRlci52YWx1ZQ0KZW5kDQpqb2IuY29uZmlnWyJQcmludGVyIl0gPSBw cmludGVyLmlkDQpqb2IucHJpbnRfdG9fZmlsZSgibTE3bi1zYW1wbGUucGRmIikNCmNvbnRleHQg PSBqb2IuY29udGV4dA0KDQpwYXBlcl9uYW1lID0gam9iLmNvbmZpZ1tHbm9tZTo6UHJpbnRDb25m aWc6OktFWV9QQVBFUl9TSVpFXQ0KcGFwZXIgPSBHbm9tZTo6UHJpbnRQYXBlci5nZXQocGFwZXJf bmFtZSkNCg0Kd2lkdGggPSBwYXBlci53aWR0aA0KaGVpZ2h0ID0gcGFwZXIuaGVpZ2h0DQoNCnRv cF9tYXJnaW4gPSA1MA0KbGVmdF9tYXJnaW4gPSA1MA0KeF9zcGFjZSA9IDMwDQoNCnggPSB0b3Bf bWFyZ2luDQp5ID0gaGVpZ2h0IC0gbGVmdF9tYXJnaW4NCg0KbWFrZV9sYXlvdXQgPSBQcm9jLm5l dyBkbyB8dGV4dHwNCiAgYXR0cnMsIHRleHQgPSBQYW5nby5wYXJzZV9tYXJrdXAodGV4dCkNCiAg bGF5b3V0ID0gY29udGV4dC5jcmVhdGVfbGF5b3V0DQogIGxheW91dC50ZXh0ID0gdGV4dA0KICBs YXlvdXQuYXR0cmlidXRlcyA9IGF0dHJzDQogIGxheW91dC5jb250ZXh0X2NoYW5nZWQNCiAgbGF5 b3V0DQplbmQNCg0KY29udGV4dC5iZWdpbl9wYWdlIGRvDQogIGxheW91dHMgPSBbXQ0KICBsYW5n X3dpZHRocyA9IFtdDQogIG5hdGl2ZV9sYW5nX3dpZHRocyA9IFtdDQogIGhlbGxvX3dpZHRocyA9 IFtdDQogIHRleHRzLmVhY2ggZG8gfGxhbmcsIG5hdGl2ZV9sYW5nLCBoZWxsb3wNCiAgICBsYW5n X2xheW91dCA9IG1ha2VfbGF5b3V0LmNhbGwobGFuZykNCiAgICBuYXRpdmVfbGFuZ19sYXlvdXQg PSBtYWtlX2xheW91dC5jYWxsKG5hdGl2ZV9sYW5nKQ0KICAgIGhlbGxvX2xheW91dCA9IG1ha2Vf bGF5b3V0LmNhbGwoaGVsbG8pDQogICAgbGFuZ193aWR0aHMgPDwgbGFuZ19sYXlvdXQucGl4ZWxf c2l6ZVswXQ0KICAgIG5hdGl2ZV9sYW5nX3dpZHRocyA8PCBuYXRpdmVfbGFuZ19sYXlvdXQucGl4 ZWxfc2l6ZVswXQ0KICAgIGhlbGxvX3dpZHRocyA8PCBoZWxsb19sYXlvdXQucGl4ZWxfc2l6ZVsw XQ0KICAgIGxheW91dHMgPDwgW2xhbmdfbGF5b3V0LCBuYXRpdmVfbGFuZ19sYXlvdXQsIGhlbGxv X2xheW91dF0NCiAgZW5kDQogIG1heF9sYW5nX3dpZHRoID0gbGFuZ193aWR0aHMubWF4DQogIG1h eF9uYXRpdmVfbGFuZ193aWR0aCA9IG5hdGl2ZV9sYW5nX3dpZHRocy5tYXgNCiAgbWF4X2hlbGxv X3dpZHRoID0gaGVsbG9fd2lkdGhzLm1heA0KDQogIHlfc3BhY2UgPSAxMA0KICBsYXlvdXRzLmVh Y2ggZG8gfGxhbmdfbGF5b3V0LCBuYXRpdmVfbGFuZ19sYXlvdXQsIGhlbGxvX2xheW91dHwNCiAg ICBfeCA9IHgNCiAgICBoZWlnaHRzID0gW10NCg0KICAgIGNvbnRleHQubW92ZV90byhfeCwgeSkN CiAgICBjb250ZXh0LmxheW91dChsYW5nX2xheW91dCkNCiAgICBoZWlnaHRzIDw8IGxhbmdfbGF5 b3V0LnBpeGVsX3NpemVbMV0NCiAgICBfeCArPSBtYXhfbGFuZ193aWR0aCArIHhfc3BhY2UNCg0K ICAgIGNvbnRleHQubW92ZV90byhfeCwgeSkNCiAgICBsYXlvdXRfd2lkdGggPSBtYXhfbmF0aXZl X2xhbmdfd2lkdGggKiBQYW5nbzo6U0NBTEUNCiAgICBsYXlvdXRfd2lkdGggKz0geF9zcGFjZSAv IDIgKiBQYW5nbzo6U0NBTEUNCiAgICBuYXRpdmVfbGFuZ19sYXlvdXQud2lkdGggPSBsYXlvdXRf d2lkdGgNCiAgICBuYXRpdmVfbGFuZ19sYXlvdXQuY29udGV4dF9jaGFuZ2VkDQogICAgY29udGV4 dC5sYXlvdXQobmF0aXZlX2xhbmdfbGF5b3V0KQ0KICAgIGhlaWdodHMgPDwgbmF0aXZlX2xhbmdf bGF5b3V0LnBpeGVsX3NpemVbMV0NCiAgICBfeCArPSBtYXhfbmF0aXZlX2xhbmdfd2lkdGggKyB4 X3NwYWNlDQoNCiAgICBjb250ZXh0Lm1vdmVfdG8oX3gsIHkpDQogICAgaGVsbG9fbGF5b3V0Lndp ZHRoID0gbWF4X2hlbGxvX3dpZHRoICogUGFuZ286OlNDQUxFDQogICAgaGVsbG9fbGF5b3V0LmNv bnRleHRfY2hhbmdlZA0KICAgIGNvbnRleHQubGF5b3V0KGhlbGxvX2xheW91dCkNCiAgICBoZWln aHRzIDw8IGhlbGxvX2xheW91dC5waXhlbF9zaXplWzFdDQoNCiAgICB5IC09IGhlaWdodHMubWF4 ICsgeV9zcGFjZQ0KICAgIHlfc3BhY2UgPSAwDQogIGVuZA0KZW5kDQoNCmpvYi5jbG9zZQ0Kam9i LnByaW50DQoNCl9fRU5EX18NCkVuZ2xpc2gsIEhlbGxvDQpHZXJtYW4gKERldXRzY2gpLCBHdXRl biBUYWcgLyBHcsO8w58gR290dA0KRnJlbmNoIChmcmFuw6dhaXMpLCBCb25qb3VyIC8gU2FsdXQN ClNwYW5pc2ggKGVzcGHDsW9sKSwgwqFIb2xhIQ0KUG9saXNoIChqxJl6eWsgcG9sc2tpKSwgRHpp ZcWEIGRvYnJ5ISBDemXFm8SHIQ0KQ3plY2ggKMSNZXNreSksIERvYnLDvSBkZW4NCkVzdG9uaWFu IChlZXN0aSBrZWVsKSwgVGVyZSAvIFRlcnZpc3QNCkZpbm5pc2ggKFN1b21pKSwgSGVpDQpNYWx0 ZXNlIChpbC1NYWx0aSksIEJvbsShdSAvIFNhxKfEp2ENCkVzcGVyYW50bywgU2FsdXRvbiAoRcSl b8WdYW7EnW8gxIlpdcS1YcWtZGUpDQpHcmVlayAozrXOu867zrfOvc65zrrOrCksIM6TzrXOuc6s IM+DzrHPgg0KUnVzc2lhbiAo0YDRg9GB0YHQutC40LkpLCDQl9C00YDQsNCy0YHRgtCy0YPQudGC 0LUhDQpHZW9yZ2lhbiAo4YOl4YOQ4YOg4YOX4YOj4YOa4YOYKSwg4YOS4YOQ4YOb4YOQ4YOg4YOv 4YOd4YOR4YOQ4YOXIQ0KQW1oYXJpYyAo4Yqg4Yib4Yit4YqbKSwg4Yig4YiL4YidDQpUaWdyaWdu YSAo4Ym14YyN4Yit4YqbKSwg4Yiw4YiL4Yib4Ym1DQpUdXJraXNoIChUw7xya8OnZSksIE1lcmhh YmENCkFyYWJpYyAo2KfZjtmE2ZLYudmO2LHZjtio2ZDZitmR2Y7YqdmPKeKAjiwg2KfZjtmE2LPZ kdmO2YTZjtin2YXZjyDYudmO2YTZjtmK2ZLZg9mP2YUNClBlcnNpYW4gKNmB2KfYsdiz24wp4oCO LCDYs9mE2KfZhSDYudmE2YraqdmFDQpIZWJyZXcgKNei1rTXkdaw16jWtNeZ16op4oCOLCDXqdeB 1rjXnNeV1rnXnQ0KSGluZGkgKOCkueCkv+CkguCkpuClgCksIOCkqOCkruCkuOCljeCkpOClhyAv IOCkqOCkruCkuOCljeCkleCkvuCksCDgpaQNCkJlbmdhbGkgKOCmrOCmvuCmguCmsuCmviksIOCm qOCmruCmuOCnjeCmleCmvuCmsA0KUHVuamFiaSAo4Kiq4Kmw4Kic4Ki+4Kis4KmAKSwg4Ki44Kik 4Ki/IOCotuCpjeCosOCpgCDgqIXgqJXgqL7gqLINCkd1amFyYXRpICjgqpfgq4HgqpzgqrDgqr7g qqTgq4ApLCDgqqjgqq7gqrjgq43gqqTgq4cNClRhbWlsICjgrqTgrq7grr/grrTgr40pLCDgrrXg rqPgrpXgr43grpXgrq7gr40NClRlbHVndSAo4LCk4LGG4LCy4LGB4LCX4LGBKSwg4LC54LCy4LGL DQpLYW5uYWRhICjgspXgsqjgs43gsqjgsqEpLCDgsqjgsq7gsrjgs43gspXgsr7gsrANCk1hbGF5 YWxhbSAo4LSu4LSy4LSv4LS+4LSz4LSCKSwg4LSo4LSu4LS44LWN4LSV4LS+4LSw4LSCDQpNeWFu bWFyICjhgJnhgLnhgJvhgJThgLnigIzhgJnhgKwpLCDhgJnhgIThgLnhgILhgJzhgKzhgJXhgKwN ClRpYmV0YW4gKOC9luC9vOC9keC8i+C9puC+kOC9keC8iyksIOC9luC9gOC+suC8i+C9pOC9suC9 puC8i+C9luC9keC9uuC8i+C9o+C9uuC9guC9puC8jg0KVGhhaSAo4Lig4Liy4Lip4Liy4LmE4LiX 4LiiKSwg4Liq4Lin4Lix4Liq4LiU4Li14LiE4Lij4Lix4LiaIC8g4Liq4Lin4Lix4Liq4LiU4Li1 4LiE4LmI4LiwDQpMYW8gKOC6nuC6suC6quC6suC6peC6suC6pyksIOC6quC6sOC6muC6suC6jeC6 lOC6tSAvIOC6guC7jeC7g+C6q+C7ieC7guC6iuC6geC6lOC6tQ0KS2htZXIgKOGegeGfkuGemOGf g+GemiksIOGeh+GfhuGemuGetuGelOGen+GeveGemg0KVmlldG5hbWVzZSAoVGnhur9uZyBWaeG7 h3QpLCBDaMOgbyBi4bqhbg0KQ2hpbmVzZSAo5rGJ6K+tKSwg5L2g5aW9DQpKYXBhbmVzZSAo5pel 5pys6KqeKSwg44GT44KT44Gr44Gh44GvDQpLb3JlYW4gKO2VnOq4gCksIOyViOuFle2VmOyEuOya lA0K ----Next_Part(Sun_Mar_19_00_42_18_2006_921)---- ----Next_Part(Sun_Mar_19_00_42_18_2006_921)----