проблемы печати
От: navrocky  
Дата: 15.05.07 14:48
Оценка:
Делаю программу печати отчётов.
Столкнулся с проблемой при печати картинок через 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 не заметно, а вот если больше, то становится заметно. Просто в отладчике проверь координаты куда текст выводится.
Re[2]: проблемы печати
От: navrocky  
Дата: 16.05.07 06:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В свое время занимался печатью. Печатал здоровые изображения(несколько на лист, от 1 до 20-30. несколько разных листов в одной задаче) с текстом, рамками и т.д. С такой проблемой не сталкивался, но было много приколов в самом коде.


А>По идее TPrinter-у все равно что печатать и сколько картинок и текста.


Я тоже так думал.

А>Глянь, может у тебя с коэффициентами для вычисления координат проблема. На 300dpi не заметно, а вот если больше, то становится заметно. Просто в отладчике проверь координаты куда текст выводится.


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

Еще вот интересный вопрос, как печатать очень большие картинки? Есть картинка в цвете 16бит 4700x6700 (А4 600dpi) точек (размер 64Мб), пытаюсь ее отрисовать на принтер, не получается, она просто игнорируется и печатается пустой лист. Однако втыкаю этот bmp в Word и он его нормально печатает. В чём секрет?
Re: проблемы печати
От: Dimentiy Россия  
Дата: 16.05.07 08:23
Оценка:
Здравствуйте, navrocky, Вы писали:

N>Делаю программу печати отчётов.

N>Столкнулся с проблемой при печати картинок через TPrinter. Если на листе несколько картинок большого размера >1000x1000, то разъезжаются некоторые элементы, выводимые на лист после картинки. Разъезжаются в разные стороны.

Какие конкретно элементы? Пример приведите.

Вообще, хороший драйвер принтера довольно сложно написать, и большинство написано со всякими "допущениями".
У Adobe Acrobat поэтому даже режим есть специальный — печать всего листа как одного большого битмапа (не по умолчанию, конечно).

N>Поставил кучу экспериментов, извел стопку бумаги, но так и не понял в чём проблема. Если печатать с пониженным разрешением 300dpi, то всё нормально. Если при этом увеличить картинки в 2 раза, то опять начинаются спецэффекты.


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

N>Видимо есть какая-то хитрость, потому что Word, например, такими проблемами не страдает.


[off]Word очень хорошо работает с принтерами вообще. Например, если в текущем принтере есть встроенные шрифты (даже битмапнутые), он их покажет в списке шрифтов вместе с системными, и т.д.[/off]

N>Помогите советом или литературой или ссылкой какой..


Литература не поможет, печать вручную — хождение по граблям.
Попробуйте картинку постретчить для начала.
Re[2]: проблемы печати
От: navrocky  
Дата: 16.05.07 09:39
Оценка:
Здравствуйте, 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>Попробуйте картинку постретчить для начала.


Обошёл этот косяк через промежуточный вывод в метафайл. То бишь

PrintTo(MetaFileCanvas);
Printer.Canvas.Draw(0, 0, MetaFile);

печатается без проблем. Сейчас разбираюсь с DPI в метафайле — буквы стали микроскопическими.
Re[3]: проблемы печати
От: Dimentiy Россия  
Дата: 16.05.07 10:07
Оценка:
Здравствуйте, navrocky, Вы писали:

N>Обошёл этот косяк через промежуточный вывод в метафайл. То бишь


Ага, как раз читал ответ и хотел матефайл предложить
Re: Тема закрыта
От: navrocky  
Дата: 16.05.07 12:55
Оценка:
Люди всегда печатайте через метафайлы! Всё печатается и никаких глюков.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.