Почему при печати из Delphi и из других программ разная ширина одной и той же фразы

Dimitry Timokhov
Дата: 14.01.2020 21:58:12
Коллеги, приветствую!

1. Сравнил печать на своём принтере из Delphi, из MS Word и Google Docs.
Везде получается разная фактическая ширина одной той же фразы (измерял линейкой).
В Delphi - 120 мм, в MS Word - 122 мм, в Google Docs - 123 мм.
По идее, такого получаться не должно - думаю, все программы должны печатать одними и теми же вызовами GDI.

2. Написал тривиальный пример:
   Printer.Orientation := poLandscape;
   Printer.BeginDoc();
   Printer.Canvas.Font.Name := 'Arial';
   Printer.Canvas.Font.Size := 8;
   Printer.Canvas.Font.Style := [fsBold];
   Printer.Canvas.TextOut(100, 100, 'ИНВЕНТАРНАЯ ВЕДОМОСТЬ ОС (ПО ДАННЫМ МОДУЛЯ "ОС1") на конец дня 31.12.2019');
   Printer.EndDoc();

3. Кто разбирается в GDI, объясните, пожалуйста, как такое может получаться?
Может, я не так как-то печатаю?
И где правда - у меня или в других программах?

PS
Мой принтер имеет такие параметры:
HP LaserJet P3005 UPD PCL 6
DPI: pX=300, pY=300
NonPrintable: pL=50, pT=50, pR=50, pB=50
NonPrintable: mmL=4,23, mmT=4,23, mmR=4,23, mmB=4,23
Printable: pW=3407, pH=2380
Printable: mmW=288,24, mmH=201,35
Page: pW=3507, pH=2480
Page: mmW=296,70, mmH=209,81
rgreat
Дата: 14.01.2020 21:59:43
"fsBold" в разных приложения может значить разное.
asviridenkov
Дата: 14.01.2020 22:06:19
Word может и через DirectX печатать
Соколинский Борис
Дата: 14.01.2020 22:06:21
Dimitry Timokhov,
В тексте можно делать разные интервалы между символами.
Dimitry Timokhov
Дата: 14.01.2020 22:09:21
rgreat,

Без fsBold проверял. Все равно разница.
Проверял и для Times. Тоже есть разница, но не такая большая.
rgreat
Дата: 14.01.2020 22:10:02
Dimitry Timokhov,

Без Bold тоже тощина линий может быть другая.

Это числовой параметр в API.
Dimitry Sibiryakov
Дата: 14.01.2020 22:11:52

Dimitry Timokhov
Может, я не так как-то печатаю?

Не факт, что ты печатаешь именно то, что печатают другие. У шрифта помимо базовых
характеристик есть ещё куча опций. Плюс выравнивание слов. Плюс сам шрифт может
отличаться, то есть твой Arial и гугловский - это два разных ариала. Сравнивай не общую
ширину, а глифы каждой буквы и расстояния между ними. Бумага попрозрачнее и стол с
подсветкой тебе помогут.

Posted via ActualForum NNTP Server 1.5

kealon(Ruslan)
Дата: 15.01.2020 11:45:36
Dimitry Timokhov,

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

у МС была рекомендация, выставлять размер шрифта, пропорционально физическим величинам шрифтов, что собственно Font.Size и делает

но потом появились "маковские шрифты" - и пошёл разброд творчества

Т.е. если вы ходите печать один-в-один, вам либо готовить битмап и печатать его (у акробата например такая опция есть), что затратно по ресурсам и довольно долго (например, если делать это по сети). Ещё "хвалят" GDI+, он собственно так и делает под капотом.
Либо найти\делать свой шрифт, который учтёт вышеописанные рекомендации.

кроме того, у принтера может быть свой набор шрифтов и он подобрал совсем не то, что вы указали - вроде как-то это запрещалось с помощью апи(гуглите)
Соколинский Борис
Дата: 15.01.2020 11:54:38
Я бы для начала провел аналогичные эксперименты с PDF-ками, там все встроены все параметры, влияющие на отображение как на экране, так и при печати.
Если будет совпадение - проблема исключительно с недостатком word-формата, т.е. какие-то характеристики отданы на откуп программе-обработчику.
Мимопроходящий
Дата: 15.01.2020 11:57:54

15.01.2020 11:54, Соколинский Борис пишет:
> Я бы для начала провел аналогичные эксперименты с PDF-ками, там все встроены все параметры

а вот не надо такой категоричности.
pdf позволяет задать многие параметры, но отнюдь не обязывает это делать.

Posted via ActualForum NNTP Server 1.5