Файлы CGM неправильно масштабируются в FrameMaker - требуется ли секретное значение флага? - PullRequest
0 голосов
/ 28 октября 2011

У нас есть код, который напрямую записывает файлы CGM (или интерактивного WebCGM).Мы имеем полный контроль над всеми примитивами CGM и можем генерировать файлы версий 1, 3 или 4 по мере необходимости.В целом, CGM, который мы пишем, прекрасно отображает в различных стандартных средствах рендеринга (MetaWeb, SDI, ISoView и т. Д.) - эти средства рендеринга позволяют нам масштабировать, панорамировать или масштабировать без дефектов.

К сожалению, у нас возникает проблема, когдаКонечный пользователь импортирует те же файлы в Framemaker (версия 10).Вид файлов CGM после первоначального импорта правильный.Однако, если пользователь решает растянуть или сжать диаграмму CGM на странице, мы обнаружим, что:

  • 1) при сжатии - не только текстовый шрифт уменьшается пропорционально (как и ожидалось)), однако расстояние между символами (класс 5 CGM, элемент 13) и коэффициент расширения символов (класс 5, элемент 12) также уменьшаются.В целом, текст уменьшается пропорционально по горизонтали

    2) при расширении - все три шрифта текста, интервал между символами и коэффициент расширения символов увеличиваются, поэтому текст, который изначально был заключен в графическое поле, теперь будет расширензначительно выше правого поля.

Это похоже на ошибку в Framemaker.Однако у конечного пользователя также есть файлы, сгенерированные третьими сторонами, которые правильно масштабируются.Мы скопировали свойства этих файлов - в частности, настройку:

version to: '1'
scaling mode to: ABSTRACT   
scale to 0   
using Text(class 4, element 4) in place of Restricted Text (class 4, element 5).

Мы также экспериментировали с различными значениями для межстрочного интервала и коэффициента расширения символов (а именно 1, 0 и 0,01) без успеха.Как ни странно для обоих этих элементов исходные файлы содержат значение «9.0E-44», которое представляет собой Hex 0x00 0x00 0x00 0x40.Это похоже на ' значение секретного флага ' - но использование этого в наших собственных файлах, похоже, не имеет никакого эффекта.

Кто-нибудь знает значение этого значения флага и как его следует использовать?

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Нам действительно удалось решить эту проблему. Похоже, что импорт FrameMaker очень специфичен и требует определенных жестко закодированных значений для ФАКТОРА РАСШИРЕНИЯ ХАРАКТЕРА и ПРОСТРАНСТВА ХАРАКТЕРА.

То, что я пропустил раньше, было то, что REAL PRECISION не был установлен на [0] [9] [23], так как это должно было бы поддерживать хорошо известный формат IEEE, но [1] [16] [16] - который является архаичным десятичным форматом с фиксированной запятой. Может быть значение Hex 0x00 0x00 0x00 0x40. немного более значим в этой кодировке (это все еще значение секретного флага конечно!)

Как только мы сделали это, файлы успешно импортировались в FrameMaker - и когда они расширялись или сжимались, тогда текст вел себя точно так же, как и в любом другом устройстве визуализации.

Боюсь, что мы не экспериментировали, чтобы увидеть, будет ли работать «0x00 0x00 0x00 0x40», когда он повторно представлен в виде значения IEEE, если мы установим REAL PRECISION обратно [0] [9] [23] , Мы были так рады, что нашли способ обойти эту ошибку FrameMaker!

0 голосов
/ 10 ноября 2011

В спецификации нет значения секретного флага, в спецификации ISO 8632-3 упоминается, что как ФАКТОР РАСШИРЕНИЯ ХАРАКТЕРА, так и ПРОСТРАНСТВО ХАРАКТЕРА являются реальными значениями.Значение HEX, которое вы видите, означает, что это значение практически равно нулю.

Хотя имеет смысл, чтобы значение CHACACTER SPACING было близко к нулю (из спецификации):

CHARACTER SPACING: определяет количество пустого пространства, добавляемого между символами в строке;

на самом деле не для ФАКТОРА РАСШИРЕНИЯ CHARACTER:

Коэффициент расширения символовопределяет отклонение отношения ширины к высоте символа от отношения, указанного конструктором шрифтов.

В приложении D спецификации фактически не говорится, как обрабатывать нулевые значения для расширенияпоэтому каждый синтаксический анализатор может обрабатывать регистр по-своему.

...