Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   AlivePDF откуда взять *.AFM? (http://www.flasher.ru/forum/showthread.php?t=157322)

GBee 03.06.2011 19:01

AlivePDF откуда взять *.AFM?
 
Привет,
Пытаюсь сгенерить пдф на русском языке.

Код 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;
 
private var _font:IFont;
private var _pdf:PDF;
 
_pdf = new PDF(Orientation.PORTRAIT, Unit.MM, true, Size.A4);
_pdf.setDisplayMode(Display.FULL_PAGE, Layout.SINGLE_PAGE);
_pdf.setMargins(LM, TM, RM, BM);
_font = new EmbeddedFont(new _fontTtf(), new _fontAfm(), CodePage.CP1251);
_pdf.setFont(_font, DEFAULT_SIZE);
_pdf.addPage();
_pdf.writeText(11, "Съешь этих мягких французских булок да выпей чаю");

И сохраняю
Код AS3:

var fr:FileReference = new FileReference();
fr.save(_pdf.save(Method.LOCAL), getFilename());

Результат в доке:
????? ???? ?????? ??????????? ????? ?? ????? ???

Думаю, что проблема в afm файлике, скачал его в нете, но есть ощущение, что в нем не описаны русские символы. Можно ли как-то генерить эти файлы спецом под свои нужды? Или ошибка в другом месте? (про прокладку не шутите, устал уже)

spacecadet 04.06.2011 14:45

Проблем с 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 (как в примере выше), иначе могут возникнуть ошибки с повторным сохранением.

GBee 05.06.2011 01:14

Спасибо огромное, программку уже нашел, но вот не получалось все.
Исходниками пользуюсь, уже пару багов нашел в Grid :o) Вроде все, что есть в либе пишется через addCell.

Попробую, отпишусь.

Добавлено через 36 часов 10 минут
Да все получилось, прадва со шрифтом пока борюсь, Arial почему-то как моноширинный выводится

hartman 30.07.2012 15:50

У меня та же проблема с некоторыми шрифтами, например, Arial. Но есть шрифты,котрые отображаются нормально. AFM файлы делал как с помощью ttf2pt1, так и этим сайтом http://onlinefontconverter.com/, результат один.
Возникла другая проблема! PDF хорош как тем, что из него можно копировать текст. А то что получается с помощью AlivePDF копируется как кракозябры. Можно ставить другие кодировки вместо CodePage.CP1251 и соответственно "windows-1251", в PDF все отлично, а кракозябры разные.
Пробовал purePDF с юникодом, текст копируется как квадратики юникода.
Как же нужно кодировать текст, чтобы копировать его в винде?

updart 31.07.2012 18:35

Вложений: 1
у кого какие шрифты нормально отображаются? у меня Arial и Colibri со смещением.
Вложение 28260

если не трудно скиньте хоть один который нормально отображается, с .afm файлом.

GBee 31.07.2012 19:20

Вложений: 2
Вложение 28261
Вложение 28262
Используем такой, но будем искать что-нибудь покруглее :о))

updart 01.08.2012 10:55

Спасибо!

hartman 01.08.2012 12:06

Вложений: 2
Calibri
http://www.flasher.ru/forum/attachme...1&d=1343804537
AFM сделан на http://onlinefontconverter.com/
font
надо пробовать с другими шрифтами

hartman 01.08.2012 12:15

Проблема с копированием текста из pdf так и не решена.
В исходниках AlivePDF есть *.map файлы с описаниями кодировок. CodePage.CP1251 ссылается на cp1251.map и т.д. Это наводит на мысль, что можно добавить файл с нужной кодировкой. Но какая нужна?!

GBee 01.08.2012 12:56

Цитата:

Проблема с копированием текста из pdf так и не решена.
Угу, причем purePDF тоже этим грешит.

За калибри спасибо, попробую


Часовой пояс GMT +4, время: 14:07.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.