Как напечатать текст поверх графики в принтере?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Как напечатать текст поверх графики в принтере?

Сообщение aleksmir » 27.07.2010 (Вт) 14:54

Здравствуйте!

Рисую страницу на принтере. Сложность в том, что надо на всю страницу напечатать сначала фоновый рисунок, а потом поверх напечатать текст.
Это нужно для печати документов с "водяными" знаками.

Пробовал такие способы:

Способ 1
1. Нарисовал фон с помощью Printer.PaintPicture
2. Поверх напечатал текст с помощью Printer.Print
В результате текст поверх фона печатается, но текст не прозрачный, а каждый символ затирает картинку белыми квадратиками :(
При этом проверил, что Printer.FontTransparent = True

Способ 2
1. В PictureBox нарисовал фон с помощью PaintPicture.
2. В этом же PictureBox напечатал поверх фона текст с помощью Print.
3. На экране выглядить всё идеально как надо! Текст поверх фона без белых квадратиков.
4. Всё содержимое PictureBox закинул на принтер так: Printer.PaintPicture PictireBox.Image, 0,0
В результате на принтере вышло всё как надо (тоже без белых квадратиков), но там, где фона нет - вокруг символов текста "мусор" (муар)... ну такие точечки бледные. Получается распечатка как на ксероксе.
При этом поэкспериментировал со свойством принтера PrintQuality, ничего не помогло, у него это свойство вообще никак не меняет. Пробовал разные принтеры... всё одинаково.

Способ 3
1. Напечатал на принтере сначала текст с помощью Printer.Print
2. Поверх текста решил наложить фоновую картинку с помощью PaintPicture.
В результате картинка полностью затирает текст! :(
Попробовал все варианты параметра Opcode (это параметр метода PaintPicture), там вроде как есть и прозрачные заливки и объединение... но ничего не помогло. Картинка затирает текст.

Помогите! Как принтер из VB заставить нормально напечатать текст поверх фона?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как напечатать текст поверх графики в принтере?

Сообщение alibek » 27.07.2010 (Вт) 15:41

Способ 1. Что-то ты не то говоришь. Если фон прозрачный, то все должно нормально печататься.

Способ 2. А фон белым ты делал?

Способ 3. Неправильный.
Lasciate ogni speranza, voi ch'entrate.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как напечатать текст поверх графики в принтере?

Сообщение aleksmir » 27.07.2010 (Вт) 16:02

alibek писал(а):Способ 1. Что-то ты не то говоришь. Если фон прозрачный, то все должно нормально печататься.


> Что-то ты не то говоришь.
:( Нет, я захотел всех обмануть от нечего делать и решил написать что-нибудь не-то... :(

Вот что получается при первом способе на принтере: см. в прикреплённой картинке.
На картинке видно, что текст не прозрачный, а накладывается белыми квадратиками.

Свойство Printer.FontTransparent точно стоит в True, и свойство Printer.FillStyle = vbFSTransparent

=============================================================================================

alibek писал(а):Способ 2. А фон белым ты делал?

Ну естественно!


==============================================================================================
Вложения
primer.jpg
primer.jpg (85.34 Кб) Просмотров: 3971

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как напечатать текст поверх графики в принтере?

Сообщение alibek » 27.07.2010 (Вт) 16:14

Покажи весь код печати.
Lasciate ogni speranza, voi ch'entrate.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как напечатать текст поверх графики в принтере?

Сообщение aleksmir » 27.07.2010 (Вт) 16:26

alibek писал(а):Покажи весь код печати.


Код: Выделить всё
  ' переменные
  Dim objPic As Object ' объект "Принтер"
  ' установка поворота страницы
  Printer.Orientation = vbPRORPortrait
  ' ссылка на принтер
  Set objPic = Printer
  ' грузим картинку в PictureBox
  Set picIn.Picture = LoadPicture("diamonds.jpg")
  ' выводим картинку на принтер
  objPic.PaintPicture picIn.Image, 0, 0
  ' печатаем текст
  objPic.Print "Текст"
  ' конец документа
  Printer.EndDoc

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как напечатать текст поверх графики в принтере?

Сообщение alibek » 27.07.2010 (Вт) 16:35

И где ты тут указываешь FontTransparent?
Кстати, промежуточный picIn тебе не нужен, можешь печатать сразу objPic.PaintPicture LoadPicture(...)
Lasciate ogni speranza, voi ch'entrate.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как напечатать текст поверх графики в принтере?

Сообщение aleksmir » 27.07.2010 (Вт) 16:40

alibek писал(а):И где ты тут указываешь FontTransparent?
Кстати, промежуточный picIn тебе не нужен, можешь печатать сразу objPic.PaintPicture LoadPicture(...)


FontTransparent стоит по-умолчанию и я его конечно же пробовал указать принудительно.
Без PictureBox не пробовал, но не думаю, что в этом проблема. Сейчас попробую.

Вот кстати тот же самый код, но применительно к PictureBox выводит на экране текст прозрачным:
Вложения
primerr.jpg
primerr.jpg (76.17 Кб) Просмотров: 3937

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как напечатать текст поверх графики в принтере?

Сообщение aleksmir » 27.07.2010 (Вт) 16:43

alibek писал(а):Кстати, промежуточный picIn тебе не нужен, можешь печатать сразу objPic.PaintPicture LoadPicture(...)


Напечатал, тоже самое. Текст с квадратиками.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как напечатать текст поверх графики в принтере?

Сообщение aleksmir » 27.07.2010 (Вт) 16:48

Придётся похоже 2-й способ всё-таки использовать.

Про "муар" думаю, что у исходного PictureBox размер маленький, что когда принтер его растягивает на А4, то он что-типа размытия текста что-ли делает.
Решил размеры PictureBox увеличить раз в 10, на нём крупным шрифотм печатать фон, сверху текст, а потом переносить PaintPicture-ом всё на принтер.

Возни много конечно. Ну ладно... хотя бы так.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как напечатать текст поверх графики в принтере?

Сообщение Хакер » 27.07.2010 (Вт) 17:33

Ты не делаешь согласование по DPI (резрешению).

+ первый ЧБ-скриншот — это скан распечатанного на бумаге документа, или же скриншот документа с виртуального принтера?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как напечатать текст поверх графики в принтере?

Сообщение aleksmir » 28.07.2010 (Ср) 9:51

Хакер писал(а):Ты не делаешь согласование по DPI (резрешению).

+ первый ЧБ-скриншот — это скан распечатанного на бумаге документа, или же скриншот документа с виртуального принтера?


Печатаю с виртуального.
Adobe PDF - принтер и Office Image Writer одинаково печатают.

Согласование по DPI не делаю.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как напечатать текст поверх графики в принтере?

Сообщение iGrok » 28.07.2010 (Ср) 13:29

aleksmir писал(а):Печатаю с виртуального.

Т.е. на реальную печать ты документы не выводил?
Виртуальные принтеры иногда глючат, как раз оставляя "лишний" фон вокруг текста.
label:
cli
jmp label

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как напечатать текст поверх графики в принтере?

Сообщение aleksmir » 28.07.2010 (Ср) 14:32

iGrok писал(а):
aleksmir писал(а):Печатаю с виртуального.

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


Ну возможно, пока нет реального принтера под рукой.

В любом случае - виртуальный принтер - это тоже принтер. Нужно чтобы печаталось везде одинаково.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как напечатать текст поверх графики в принтере?

Сообщение iGrok » 28.07.2010 (Ср) 16:06

aleksmir писал(а):В любом случае - виртуальный принтер - это тоже принтер.

Не совсем.

aleksmir писал(а):Нужно чтобы печаталось везде одинаково.

Ты вообще понял, что я написал? Оно и будет печататься "везде одинаково". На нормальных принтерах.

Если хочешь, чтобы и на виртуалке было "один-в-один" - то делай по второму способу, только с согласованием DPI, заданием "правильного" фона и т.п.
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как напечатать текст поверх графики в принтере?

Сообщение Хакер » 28.07.2010 (Ср) 16:14

Нет, второй способ жуткий.
Он отправляет на принтер гигантский битмап, чем расходует канал и запросто переполняет память принтера.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как напечатать текст поверх графики в принтере?

Сообщение aleksmir » 28.07.2010 (Ср) 16:18

Хакер писал(а):Нет, второй способ жуткий.
Он отправляет на принтер гигантский битмап, чем расходует канал и запросто переполняет память принтера.


А он так и так гиганский bit-мап будет отправлять. Фоновую каритнку по-любому надо печатать на всю площадь листа. Вопрос только с текстом или без... Такой заказ.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как напечатать текст поверх графики в принтере?

Сообщение Хакер » 28.07.2010 (Ср) 16:22

Ну, фоновый рисунок, если в нём плавные переходы, может отправляться в более низком DPI, а может опционально (очень должна быть такая опция) и не отправляться.

Вообще же, правильным с точки зрения здравого смысла решением будет заказать в типографии крупную партию бланков с фоном, а на них уже печатать только таблицы, с прозрачным фоном.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как напечатать текст поверх графики в принтере?

Сообщение aleksmir » 28.07.2010 (Ср) 16:38

Хакер писал(а):Ну, фоновый рисунок, если в нём плавные переходы, может отправляться в более низком DPI, а может опционально (очень должна быть такая опция) и не отправляться.


Нет, там куча мелкого текста. Разрешение должно быть высоким.

Хакер писал(а):Вообще же, правильным с точки зрения здравого смысла решением будет заказать в типографии крупную партию бланков с фоном, а на них уже печатать только таблицы, с прозрачным фоном.


Согласен, так было бы лучше. Но менеджерам в магазине это намного усложнит жизнь. Как правило в салоне магазина стоит общий принтер, на который с нескольких рабочих мест посылают пакет документов на печать. Кроме того бланк не один, а их несколько видов (зависит от вида товара). Они во-первых замучаются вставлять эти бланки вручную, во-вторых в одной накладной может быть товар разных видов, соответственно бланки нужно вставлять в принтер разные. Так что с типографскими бланками не подходит.

Короче пока пробую 2-й вариант, завтра заказчик обещал протестировать скорость и качество печати. Думаю, что по-другому тут уже ничего лучше не придумать.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как напечатать текст поверх графики в принтере?

Сообщение alibek » 28.07.2010 (Ср) 17:01

По способу 2 — укажи вручную BackColor=&hffffff&. Я подозреваю, что там у тебя системный цвет Windows Background, от того и муар.
По поводу способа 1 — что-то ты видимо делаешь не так. Я печатал текст поверх фона, при указании FontTransparent все печаталось, как надо (как на экране, так и на принтере).
Попробуй еще выводить для проверки текст на принтер через API.
Lasciate ogni speranza, voi ch'entrate.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как напечатать текст поверх графики в принтере?

Сообщение aleksmir » 28.07.2010 (Ср) 17:12

alibek писал(а):По способу 2 — укажи вручную BackColor=&hffffff&. Я подозреваю, что там у тебя системный цвет Windows Background, от того и муар.
По поводу способа 1 — что-то ты видимо делаешь не так. Я печатал текст поверх фона, при указании FontTransparent все печаталось, как надо (как на экране, так и на принтере). Попробуй еще выводить для проверки текст на принтер через API.


Спасибо, что попробовал! У меня принтера сейчас эти дни нормального нет под рукой, так бы сам попробывал...

А на виртуальном ты не пробовал тоже самое печатать?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как напечатать текст поверх графики в принтере?

Сообщение Хакер » 28.07.2010 (Ср) 17:47

Нет, там куча мелкого текста. Разрешение должно быть высоким.

Что, прямо в фоновой картинке мелкий текст?

Кроме того бланк не один, а их несколько видов (зависит от вида товара).

И у каждого типа своя , отличная от других фоновая картинка?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как напечатать текст поверх графики в принтере?

Сообщение aleksmir » 29.07.2010 (Чт) 10:28

Хакер писал(а):
Нет, там куча мелкого текста. Разрешение должно быть высоким.

Что, прямо в фоновой картинке мелкий текст?
Кроме того бланк не один, а их несколько видов (зависит от вида товара).

И у каждого типа своя , отличная от других фоновая картинка?


Да, в каждом шаблоне мелкий текст. Ну даже если только крупный оставить - всё равно 300PDI - это как минимум.

Каждый шаблон индивидуально присваивается позиции товара.

В одном товарном чеке могут быть разные товары, соответственно разные шаблоны.

Программа должна печатать автоматом бланк ТДОС на каждый товар свой.

Я для тестирования сделал сам бланк, сегодня отправлял заказчику, говорит печатает быстро и разборчиво.
Вот тестовый пример: Тестовый пример
Его можно запустить без установки, только надо все DLL-ы зарегистрировать предварительно через c:\windows\system32\regsvr32.exe

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как напечатать текст поверх графики в принтере?

Сообщение Хакер » 29.07.2010 (Чт) 12:42

Не надо отвечать на какие-то свои выдуманные вопросы.

Вопрос был такой: в фоном рисунке, картинке, изображении, художестве, творчестве есть мелкий текст?
И такой: для каждой формы используется свой, отличный от других, рисунок, своя картинка, своё изображение, художество, творчество?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как напечатать текст поверх графики в принтере?

Сообщение aleksmir » 29.07.2010 (Чт) 17:13

Хакер писал(а):Вопрос был такой: в фоном рисунке, картинке, изображении, художестве, творчестве есть мелкий текст?


Да

Хакер писал(а):И такой: для каждой формы используется свой, отличный от других, рисунок, своя картинка, своё изображение, художество, творчество?


Да картинка фоновая каждый раз своя. Генератору отчётов передаётся из программы.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как напечатать текст поверх графики в принтере?

Сообщение aleksmir » 30.07.2010 (Пт) 17:15

На нормальном принтере (не на виртуальном) попробывал.

1 вариант - те же самые белые квадратики (думаю может виноват сам VB5 - у меня версия 5)... возможно правда стоит попробовать использовать API.

2 вариант - качество печати текста и скорость печати отличные! (но не хотелось бы с ним связываться - мороки много для устранения муара вокруг текста)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как напечатать текст поверх графики в принтере?

Сообщение Хакер » 30.07.2010 (Пт) 17:56

В чём смысл использовать доисторические версии VB?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как напечатать текст поверх графики в принтере?

Сообщение aleksmir » 31.07.2010 (Сб) 12:36

Хакер писал(а):В чём смысл использовать доисторические версии VB?


Проект большой, действующий. За переписывание на другом языке никто платить не будет.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Как напечатать текст поверх графики в принтере?

Сообщение Viper » 31.07.2010 (Сб) 12:49

aleksmir писал(а):
Хакер писал(а):В чём смысл использовать доисторические версии VB?


Проект большой, действующий. За переписывание на другом языке никто платить не будет.
При использовании VB6 периписывать ничего не придется.
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 107

    TopList