Печать документов (работа с принтеров)

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

Печать документов (работа с принтеров)

Сообщение Sayan » 09.07.2015 (Чт) 21:43

Как сделать что бы текст введенный в текстовое поле, при распечатке этого документа попадал в поля: 1 лицо, 2 лицо, задание? (самые поля с голограмою уже готов на A4)
Бланк документа

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Печать документов (работа с принтеров)

Сообщение ger_kar » 09.07.2015 (Чт) 21:59

Sayan писал(а):Как сделать что бы текст введенный в текстовое поле
А текстовые поля где расположены? На форме? Т.е. если я правильно понял, то должна быть некая форма, на ней два поля: 1 лицо, 2 лицо, которые заполняются. Далее в принтер вставляется готовый типографский бланк формата А4 и данные их этих полей должны попасть на бланк в соответствующие для них места при распечатке?
Если так, как я описал, то сделать так конечно можно, но точно попасть будет затруднительно. Каждый раз будет получаться смещение при печати. Идеального попадания добиться наверное невозможно. Гораздо проще сделать весь бланк и распечатывать его целиком, тогда все и всегда будет на своих местах. Чем такой вариант не устраивает?
Бороться и искать, найти и перепрятать

Sayan
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 06.05.2015 (Ср) 11:43

Re: Печать документов (работа с принтеров)

Сообщение Sayan » 09.07.2015 (Чт) 22:41

ger_kar, да вы правильно поняли - и первый и второй способ подходит. у вас есть пример исходник?

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

Re: Печать документов (работа с принтеров)

Сообщение Хакер » 10.07.2015 (Пт) 4:42

Sayan писал(а):Как сделать что бы текст введенный в текстовое поле, при распечатке этого документа попадал в поля: 1 лицо, 2 лицо, задание?


При выводе графики на принтер выводить её по нужным координатам — только и всего.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Печать документов (работа с принтеров)

Сообщение ger_kar » 10.07.2015 (Пт) 7:48

Первый способ (печать на готовом бланке) достаточно прост, но это только на первый взгляд.
Хакер писал(а):При выводе графики на принтер выводить её по нужным координатам — только и всего.
Да, только проблема в том, что точно попасть в нужное место можно только при печати на цветном принтере, так как там идет четкое позиционирование листа перед печатью. Еще более менее приемлемый вариант получается при печати на хороших обычных черно белых лазерниках, но такие сейчас достаточно редки. На дешевом офисном ширпотребе попасть в нужное место практически нереально. Нынешний ширпотреб (некоторые экземпляры) даже страницы печатать прямо без перекосов заставить бывает сложно.
Зато сама реализация достаточно проста и не надо париться бланк рисовать.

Хотел привести кусок кода, стал экспериментировать и напоролся на облом
Код: Выделить всё
Dim oPrinter    As Printer
   
    For Each oPrinter In Printers
        If oPrinter.DeviceName = "EPSON Stylus Photo R270 Series" Then Exit For
    Next
   
    oPrinter.CurrentX = 500
    oPrinter.CurrentY = 1000
    oPrinter.Print "Один"
   
    oPrinter.CurrentX = 500
    oPrinter.CurrentY = 300
    oPrinter.Print "Два"

Обламывается на oPrinter.CurrentX = 500 с ошибкой, что свойство доступно только для чтения, причем объект браузер утверждает обратное:
Property CurrentX As Single
Member of VB.Printer
Returns/sets the horizontal coordinates for next print or draw method.

Property CurrentY As Single
Member of VB.Printer
Returns/sets the vertical coordinates for next print or draw method.
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Печать документов (работа с принтеров)

Сообщение ger_kar » 10.07.2015 (Пт) 7:52

Sayan писал(а):ger_kar, да вы правильно поняли - и первый и второй способ подходит.
По второму способу, т.е. печатать весь бланк, я бы предпочел использовать Excel. На нем нарисовать и в случае надобности подправить бланк можно достаточно быстро и без лишнего геммора.
Бороться и искать, найти и перепрятать

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

Re: Печать документов (работа с принтеров)

Сообщение Хакер » 10.07.2015 (Пт) 8:25

ger_kar писал(а):Обламывается на oPrinter.CurrentX = 500 с ошибкой, что свойство доступно только для чтения, причем объект браузер утверждает обратное:


Кое-кто никогда не работал с принтерами в VB и не любит читать документацию:

Документация писал(а):Note If you use the Printers collection to specify a particular printer, as in Printers(3), you can only access properties on a read-only basis. To both read and write the properties of an individual printer, you must first make that printer the default printer for the application.


Изучаем и размышляем:
Код: Выделить всё
Private Sub Form_Load()
    Dim prn As Printer
   
    Set prn = Printers(0)
    On Error Resume Next
    prn.CurrentX = 123
    MsgBox "Попытка 1: " + IIf(Err, "сбой — " + Err.Description, "успешно!")
    On Error GoTo 0
   
    Set Printer = prn
    On Error Resume Next
    Printer.CurrentX = 123
    MsgBox "Попытка 2: " + IIf(Err, "сбой — " + Err.Description, "успешно!")
    On Error GoTo 0
End Sub
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Печать документов (работа с принтеров)

Сообщение ger_kar » 10.07.2015 (Пт) 8:44

Получается, что свойство для записи доступно только для предопределенного объекта Printer и простое присвоение ссылки этому объекту позволяет решить проблему. Т.е. копируя ссылку на объект, мы по сути устанавливаем новый принтер по умолчанию для приложения и только в нем свойства доступны на запись :)

Хакер писал(а):Кое-кто никогда не работал с принтерами в VB и не любит читать документацию:
Почему же, с удовольствием прочитал твою ссылку на документацию, а гугл переводчик мне в этом очень помог :)
Бороться и искать, найти и перепрятать

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

Re: Печать документов (работа с принтеров)

Сообщение Хакер » 10.07.2015 (Пт) 8:49

ger_kar писал(а):только для предопределенного объекта Printer

Это не предпопределённый объект. Это обыкновенное свойство предопределённого аппглобального объекта.

ger_kar писал(а):и простое присвоение ссылки этому объекту позволяет решить проблему.

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

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Печать документов (работа с принтеров)

Сообщение ger_kar » 10.07.2015 (Пт) 8:59

Ну теперь я думаю у автора темы не должно возникнуть дальнейших затруднений, достаточно будет подобрать координаты для вывода в нужное место. Придется только провести кучу экспериментов и потратить некоторое количество бумаги. :)
Бороться и искать, найти и перепрятать

Sayan
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 06.05.2015 (Ср) 11:43

Re: Печать документов (работа с принтеров)

Сообщение Sayan » 10.07.2015 (Пт) 10:03

Скиньте пример исходника пожалуйста

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Печать документов (работа с принтеров)

Сообщение Mikle » 10.07.2015 (Пт) 13:51

Когда-то, когда я только осваивал VB5 (не 6!), переходя на него с Quick Basic, я написал такую программу, специально для впечатывания в нужные места бланков нужного текста. Исходники не сохранились. Пароль - "azimut mikle".
Вложения
Blank.zip
(35.84 Кб) Скачиваний: 190

Sayan
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 06.05.2015 (Ср) 11:43

Re: Печать документов (работа с принтеров)

Сообщение Sayan » 10.07.2015 (Пт) 16:44

Прикольная прожка, как зарегистрировать?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Печать документов (работа с принтеров)

Сообщение Mikle » 10.07.2015 (Пт) 19:05

Sayan писал(а):как зарегистрировать?

Я же написал:
Mikle писал(а):Пароль - "azimut mikle".

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 11.07.2015 (Сб) 15:49

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

Я тет 10 назад замечательно впечатывал адреса на конверт под A4 на стареньком матричном принтере. Что-то проблем с точностью не было.
Правда, впечатывал не программно, а просто сделал нужную таблицу в Word'е и её печатал... Но на точность позиционирования это же не влияет.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Печать документов (работа с принтеров)

Сообщение ger_kar » 11.07.2015 (Сб) 16:20

Про матричные принтеры не знаю, я тоже раньше (2000-2003 гг) печатал конверты да и другие бланки на старом добром HP LJ1100. Помнится стоил он тогда очень даже прилично 400$ с хвостиком, был таким тяжелым, но и работал как трактор. За все время работы только тонер заправляли, да один раз вал поменял. На том принтере позиционирование было более менее точным, хотя все равно немного гуляло (в основном по вертикали). А сейчас принтеры насколько стали дешевые, настолько и беспонтовые. В принципе можно конечно и сейчас взять дорогой и хороший принтер, но все почемуто берут дешевые.
Бороться и искать, найти и перепрятать


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

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

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

    TopList