Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с шрифтами в PDF  (Прочитано 19531 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« : 06-05-2016 16:24 » 

Добрый день.

Недавно решал задачу - сделать вывод результатов программы в формате PDF. Сначала посмотрел, есть ли какие-то библиотеки на С, но потом всё же решил ознакомиться с PDF 32000-1:2008 и посмотреть, как всё устроено изнутри. Сама структура оказалась не такой уж и сложной в рамках решения простых задач, однако, некоторые нюансы заставили выдать быстрое решение методом подгона, что я считаю стратегически неправильным. Дело вот в чём, вывод текстовой информации осуществляется заранее определённым шрифтом, пути тут, как понял, два: использовать стандартные, либо загружать внутрь файла свои. Естественно, для простоты было принято первое:
Цитата
9.6.2.2 Standard Type 1 Fonts (Standard 14 Fonts)
The PostScript names of 14 Type 1 fonts, known as the standard 14 fonts, are as follows: Times-Roman, Helvetica, Courier, Symbol, Times-Bold, Helvetica-Bold, Courier-Bold, ZapfDingbats, Times-Italic, Helvetica-Oblique, Courier-Oblique, Times-BoldItalic, Helvetica-BoldOblique, Courier-BoldOblique
Код:
21 0 obj
<< /Font <</F1 22 0 R>> >>
endobj
22 0 obj
<< /Type /Font /Subtype /Type1 /BaseFont /Courier >>
endobj
Далее, в качестве теста была задана размеченная в сетку (5х5мм) страница с текстом:
Код:
30 0 obj
<< /Type /Page /Parent 20 0 R /MediaBox [0 0 210 297]
     /Resources 21 0 R /Contents 31 0 R /UserUnit 2.8346>>
endobj
Коэффициент 2.8346 переводит базовую единицу измерения с 1/72 дюйма на 1мм. Собственно 210х297 - формат А4 в явном виде.
Код:
31 0 obj
<< /Length ... >>
stream
BT /F1 20 Tf 25 11 Td (Example.) Tj ET
...
endstream
endobj
Здесь "20 Tf" - размер шрифта в определённых страницей единицах, то есть по идее высота текста должна быть 20мм от базовой линии до верхней границы заглавных букв, однако, вместо этого фактическая величина примерно равна 12мм. "25 11 Td" указывает на координату начала текста, с некоторыми оговорками всё чётко - миллиметры работают. Замена шрифта другим типом изменяет фактическую высоту букв. Как правильно производить контроль высоты шрифта? Есть ли шрифты где следуют какому-то "стандарту"?

* ExPDF1.jpg (19.84 Кб - загружено 979 раз.)
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 07-05-2016 13:51 » 

Не знаком настолько с внутренностями PDF, но года четыре назад пришлось изрядно помучиться с генерацией pdf-документов и я нашел, что лучше работать в пунктах, чем пользовательских единицах. Геморроя намного меньше.
Шрифты приходится подбирать. Чисто параметрический подход не работает. Курьер визульно мельче, чем таймс.
« Последнее редактирование: 07-05-2016 13:54 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 07-05-2016 19:06 » new

Бегло прочёл для собственного понимания "Adobe Type 1 Font Format", там указывается, что при рисовании самих литер используется масштаб 1000:1, то есть если высота букв конкретного набора имеет заданную высоту 600, то при применении масштаба оно численно превращается в 0,6, затем, когда я указываю высоту шрифта 20 мм, получается 20 х 0,6 = 12 мм. По крайней мере, так понял.
Сам особо не задавался вопросом углублённого изучения шрифтов.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines