Делаю программу печати отчётов.
Столкнулся с проблемой при печати картинок через TPrinter. Если на листе несколько картинок большого размера >1000x1000, то разъезжаются некоторые элементы, выводимые на лист после картинки. Разъезжаются в разные стороны.
Поставил кучу экспериментов, извел стопку бумаги, но так и не понял в чём проблема. Если печатать с пониженным разрешением 300dpi, то всё нормально. Если при этом увеличить картинки в 2 раза, то опять начинаются спецэффекты.
Видимо есть какая-то хитрость, потому что Word, например, такими проблемами не страдает.
Помогите советом или литературой или ссылкой какой..
Re: проблемы печати
От:
Аноним
Дата:
16.05.07 05:50
Оценка:
Здравствуйте, navrocky, Вы писали:
N>Делаю программу печати отчётов. N>Столкнулся с проблемой при печати картинок через TPrinter. Если на листе несколько картинок большого размера >1000x1000, то разъезжаются некоторые элементы, выводимые на лист после картинки. Разъезжаются в разные стороны.
N>Поставил кучу экспериментов, извел стопку бумаги, но так и не понял в чём проблема. Если печатать с пониженным разрешением 300dpi, то всё нормально. Если при этом увеличить картинки в 2 раза, то опять начинаются спецэффекты.
N>Видимо есть какая-то хитрость, потому что Word, например, такими проблемами не страдает.
N>Помогите советом или литературой или ссылкой какой..
В свое время занимался печатью. Печатал здоровые изображения(несколько на лист, от 1 до 20-30. несколько разных листов в одной задаче) с текстом, рамками и т.д. С такой проблемой не сталкивался, но было много приколов в самом коде. По идее TPrinter-у все равно что печатать и сколько картинок и текста. Глянь, может у тебя с коэффициентами для вычисления координат проблема. На 300dpi не заметно, а вот если больше, то становится заметно. Просто в отладчике проверь координаты куда текст выводится.
Здравствуйте, Аноним, Вы писали:
А>В свое время занимался печатью. Печатал здоровые изображения(несколько на лист, от 1 до 20-30. несколько разных листов в одной задаче) с текстом, рамками и т.д. С такой проблемой не сталкивался, но было много приколов в самом коде.
А>По идее TPrinter-у все равно что печатать и сколько картинок и текста.
Я тоже так думал.
А>Глянь, может у тебя с коэффициентами для вычисления координат проблема. На 300dpi не заметно, а вот если больше, то становится заметно. Просто в отладчике проверь координаты куда текст выводится.
Нет, с коэффициентами все в порядке, вывожу не в принтер а в TBitmap такого же размера как и лист, всё нормально. Причем элементы не просто смещаются а перескакивают хаотично по всему листу. Накатал простенькую тестовую прогу, в которой это видно.
Еще вот интересный вопрос, как печатать очень большие картинки? Есть картинка в цвете 16бит 4700x6700 (А4 600dpi) точек (размер 64Мб), пытаюсь ее отрисовать на принтер, не получается, она просто игнорируется и печатается пустой лист. Однако втыкаю этот bmp в Word и он его нормально печатает. В чём секрет?
Здравствуйте, navrocky, Вы писали:
N>Делаю программу печати отчётов. N>Столкнулся с проблемой при печати картинок через TPrinter. Если на листе несколько картинок большого размера >1000x1000, то разъезжаются некоторые элементы, выводимые на лист после картинки. Разъезжаются в разные стороны.
Какие конкретно элементы? Пример приведите.
Вообще, хороший драйвер принтера довольно сложно написать, и большинство написано со всякими "допущениями".
У Adobe Acrobat поэтому даже режим есть специальный — печать всего листа как одного большого битмапа (не по умолчанию, конечно).
N>Поставил кучу экспериментов, извел стопку бумаги, но так и не понял в чём проблема. Если печатать с пониженным разрешением 300dpi, то всё нормально. Если при этом увеличить картинки в 2 раза, то опять начинаются спецэффекты.
Рекомендую вручную стретчить битмап до разрешения, строго равного разрешению принтера. В ином случае начинают работать фильтры драйвера, которые бывают всякими.
Это возможная причина, но не факт что единственная.
N>Видимо есть какая-то хитрость, потому что Word, например, такими проблемами не страдает.
[off]Word очень хорошо работает с принтерами вообще. Например, если в текущем принтере есть встроенные шрифты (даже битмапнутые), он их покажет в списке шрифтов вместе с системными, и т.д.[/off]
N>Помогите советом или литературой или ссылкой какой..
Литература не поможет, печать вручную — хождение по граблям.
Попробуйте картинку постретчить для начала.
Здравствуйте, Dimentiy, Вы писали:
D>Какие конкретно элементы? Пример приведите.
Canvas.Rectangle, .TextOut, .Draw(x,y, TBitmap), .MoveTo, .LineTo.
И ничего больше.
D>Вообще, хороший драйвер принтера довольно сложно написать, и большинство написано со всякими "допущениями".
Глючит на разных моделях разных производителей, думаю что это глюк винды а не драйвера.
D>У Adobe Acrobat поэтому даже режим есть специальный — печать всего листа как одного большого битмапа (не по умолчанию, конечно).
Я тоже думал так сделать, но картинку 4800x6700 24бит, к сожалению создать не получается, да и занимает она теоретически 96Мб, никакой памяти у компа не хватит для печати отчёта на 50 листов, например.
D>Рекомендую вручную стретчить битмап до разрешения, строго равного разрешению принтера. В ином случае начинают работать фильтры драйвера, которые бывают всякими.
Как раз я так и поступаю, потому что хочется чтобы картинка была и с полупрозрачностью и с интерполяцией, а обычные методы типа BitBlt так не умеют.
D>[off]Word очень хорошо работает с принтерами вообще. Например, если в текущем принтере есть встроенные шрифты (даже битмапнутые), он их покажет в списке шрифтов вместе с системными, и т.д.[/off]
Ну им там виднее как под свою кривую ось программировать Возможно это специальные грабли для сторонних разработчиков
D>Литература не поможет, печать вручную — хождение по граблям.
Жаль.
D>Попробуйте картинку постретчить для начала.
Обошёл этот косяк через промежуточный вывод в метафайл. То бишь