Показать сообщение отдельно
Старый 04.06.2011, 14:45
spacecadet вне форума Посмотреть профиль Отправить личное сообщение для spacecadet Найти все сообщения от spacecadet
  № 2  
Ответить с цитированием
spacecadet

Регистрация: Dec 2009
Сообщений: 41
Проблем с afm возникнуть не должно. Если afm некорректен, в созданном pdf будет наблюдаться эффект "пьяных пляшущих символов".
На всякий случай: скачайте вот это - опенсорсная программа для создания afm-описаний шрифтов. Пользоваться так: поместить в один каталог программку и ttf-шрифт (где взять, думаю, сами догадаетесь) и выполнить команду
Код:
ttf2pt1 -a arial.ttf arial
В результате в папке появятся еще два файла, один из них - необходимый arial.afm (PS программка для windows, если пользуетесь другой ОС - поищите свой вариант в гугле).

Проблема с выводом русских символов в том, что строку необходимо конвертировать из utf-8 в win-1251. Я делаю это с помощью функции convert:

Код AS3:
[Embed(source="ARIAL.TTF", mimeType="application/octet-stream")]
private var _fontTtf:Class;
[Embed(source="arial.afm", mimeType="application/octet-stream")]
private var _fontAfm:Class;
 
...
 
public function convert(data:String):String 
{
   var byteDataArray:ByteArray = new ByteArray();
   byteDataArray.writeMultiByte(data,"windows-1251"); 
   return byteDataArray.toString();
}
 
...
 
private function generatePDF():void
{
   var myPDF:PDF = new PDF();
   var myFont:EmbeddedFont = new EmbeddedFont(new _fontTtf(), new _fontAfm(), CodePage.CP1251);
 
   myPDF.setFont(_font, DEFAULT_SIZE);
   myPDF.addPage();
   myPDF.writeText(11, convert("Съешь этих мягких французских булок да выпей чаю"));
 
   //дальше идет сохранение pdf
}
Если вы пользуетесь библиотекой alivepdf в виде исходных кодов, думаю можно модифицировать исходники, так, чтобы все функции записи текста при работе сами конвертировали текст, это будет удобнее. Если вы выводите еще и латиницу или цифры - их можно смело пропускать через convert, они будут отображаться корректно.

Помните, что ЛЮБОЙ кириллический текст, вносимый в pdf нужно конвертить (myPDF.writeText, myPDF.addText, myPDF.addCell, myPDF.addGrid() и т.д.). Единственное, что у меня так и не получилось - прописать кириллицу в свойства pdf (myPDF.setTitle(), myPDF.setCreator(), myPDF.setAuthor(), myPDF.setSubject()), если вам это удастся - отпишите ЛС!

PS: желательно обявление переменных самого pdf и шрифтов внести в локальную область функции, где непосредственно генерируется, наполняется и сохраняется pdf (как в примере выше), иначе могут возникнуть ошибки с повторным сохранением.


Последний раз редактировалось spacecadet; 04.06.2011 в 14:48.