PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Работа с принтером


Работа с принтером

Сообщений 1 страница 14 из 14

1

Скажите, пожалуйста, мне тут нужно написать программу которая создаёт таблицу, и эта таблица длинная и должна напечататься на горизонтально, лежащим листе. Вот немного переделанный пример из справки:

Код:
If PrintRequester()
    If StartPrinting("Two sheets")
      If StartDrawing(PrinterOutput())
        DrawingMode(#PB_2DDrawing_Transparent)
        
        Box(0, 0, 5000, 7030 ,RGB(0, 0, 0))
        Box(10, 5, 4940, 7005 ,RGB(500, 0, 5))
      
        StopDrawing()
      EndIf
      
      StopPrinting()
    EndIf
  EndIf

Когда я его запускаю, то первым появляется окно, в котором можно выбрать какой будет формат (книжный или альбомный), и еще там кое-что. А вот если данные мне уже известны. Как мне сделать так чтобы окно не появлялась, а параметры печати я мог задать в программе?

0

2

Попробуй заменить PrintRequester() на DefaultPrinter().

0

3

Да, я заменил и всё нормально. Спасибо. Но я так и не понял, как задать расположение листа(альбомный, книжный)?

0

4

Appolon написал(а):

Но я так и не понял, как задать расположение листа(альбомный, книжный)?

Если нужен более полный контроль над принтером, то нужно поставить расширенную библиотеку для работы с ним. К примеру Библиотека PrinterLib - хорошая библиотека для всех версий Пурика.

Там это выглядит так:

Код:
Print_OpenPrinter("","PAPERSIZE="+Str(#DMPAPER_A4)+",ORIENTATION="+Str(#DMORIENT_PORTRAIT))

Библиотека содержит много разных примеров и подробное описание.

0

5

Да, спасибо, я скачал библиотеку и уже немного разобрался. Но я так и не нашел там способа положить лист горизонтально. Это как нибудь можно сделать? Или единственный выход, направление текста на странице повернуть сверху вниз?

Отредактировано Appolon (22.06.2011 13:50:18)

0

6

Да, скорее всего придется направление текста повернуть сверху вниз :(

0

7

Appolon написал(а):

. Но я так и не нашел там способа положить лист горизонтально

А тот пример кода, что я привел не работает?

Для чего эти ключи???
Options in the form of keyword value pairs separated with kommas "," :
   ORIENTATION=
Selects the orientation of the paper.

#DMORIENT_PORTRAIT

#DMORIENT_LANDSCAPE

0

8

Вот теперь спасибо, разобрался!

0

9

Скажите пожалуйста, на работе несколько сетевых принтеров,

Код:
Print_OpenPrinter("","PAPERSIZE="+Str(#DMPAPER_LEGAL)+",ORIENTATION="+Str(#DMORIENT_LANDSCAPE))
Print_StartPrinting("TEST")

этот код напечатает лист. А на каком принтере он напечатает, и как это проконтролировать? И так как формат #DMORIENT_LANDSCAPE он напечатает на А4 или на каком то другом формате? Просто сейчас под рукой принтеров нет а программу к понедельнику обязательно дописать надо.

0

10

Appolon написал(а):

Просто сейчас под рукой принтеров нет а программу к понедельнику обязательно дописать надо.

Мне кажется, что у вас, уважаемый, не принтера нет под рукой, а справки по это либе? Вы поставьте курсор в редакторе PureBasic на слове  Print_OpenPrinter, и нажмите F1. Там вываливается описание всех ключей этой команды, там есть ответы на ваши вопросы.
Контроль можно осуществить при помощи Print_GetLastError().

Разобрались?
Там в справке есть 1 не очевидный момент. Что бы узнать имена всех доступных принтеров надо вначале вызвать  Print_EnumPrinters(). Дальше всё предельно просто :

Код:
Debug " Принтер по умолчанию - " +Print_GetDefaultPrinter() 
Print_EnumPrinters()
 Debug " Всего принтеров - " + Str(Print_CountPrinters())
For i = 0 To Print_CountPrinters()-1
  Debug Print_EnumPrinterName(i)
Next


OPT$="Orientation=" + Str(#DMORIENT_LANDSCAPE) + ","
OPT$+"Papersize="   + Str(#DMPAPER_A4)
Name$= Print_EnumPrinterName(0)        ; у меня 0 виртуальный принтер
If Print_OpenPrinter(Name$,OPT$)
  Jobname$="TEST"
  If Print_StartPrinting(Jobname$)
    
    ; Print what you want
    ; Start preview
    Print_SetTextColor(#Red)
    Print_Font("Arial",48)
    Text$="Это проверочный тест печати"
    Print_Text(20,20,Text$)
    
    h.f=Print_DrawText(20,100,80,100,Text$,#DT_WORDBREAK|#DT_CALCRECT,@x.f,@y.f,@w.f,@h.f)
    Print_Box(x,y,w,h)
    h.f=Print_DrawText(x,y,w,h,Text$,#DT_WORDBREAK)
    Print_StopPrinting()
  Else
    err$=Print_GetLastError()
    MessageRequester("Print_StartPrinting()",err$,0)
  EndIf
Else
  err$=Print_GetLastError()
  MessageRequester("Print_OpenPrinter()",err$,0)
EndIf

Отредактировано ВиниПур (26.06.2011 11:43:43)

0

11

Спасибо, справки по либе действительно под рукой не было по причине того что я только сейчас понял как из пуриковской справки перейти в эту. Вот и понедельник, и я запустил свою программу на работе. Дома, принтеров у меня не подключено. Виртуально они есть но не подключены. По этому программа сохраняла xps файл. Но на работе принтеры есть и там прога файла не сохраняла. Но и не печатает. Мой принтер называется HP LaserJet P2015. Может, дело в том, что он сетевой? Вот две пробные печатающие программы. Листы разных размеров:

Код:
OpenWindow(1,0,0,300,300,"Выбор принтера",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ListViewGadget(1, 10, 10, 280, 280)
Print_EnumPrinters()
For i = 0 To Print_CountPrinters()-1
  AddGadgetItem(1,i,Print_EnumPrinterName(i)) 
Next
Repeat 
  event=WaitWindowEvent()
Until EventType()=#PB_EventType_LeftDoubleClick Or event=#PB_Event_CloseWindow
CloseWindow(1)
If event<>#PB_Event_CloseWindow
Print_OpenPrinter(Namee$,"PAPERSIZE="+Str(#DMPAPER_LEGAL)+",ORIENTATION="+Str(#DMORIENT_LANDSCAPE))
Print_StartPrinting("TEST")
Print_Box(5, 5,  100, 100)
Print_StopPrinting()
EndIf
Код:
OpenWindow(1,0,0,300,300,"Выбор принтера",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ListViewGadget(1, 10, 10, 280, 280)
Print_EnumPrinters()
For i = 0 To Print_CountPrinters()-1
  AddGadgetItem(1,i,Print_EnumPrinterName(i)) 
Next
Repeat 
  event=WaitWindowEvent()
Until EventType()=#PB_EventType_LeftDoubleClick Or event=#PB_Event_CloseWindow
CloseWindow(1)
If event<>#PB_Event_CloseWindow
Print_OpenPrinter(Namee$,"PAPERSIZE="+Str(#DMPAPER_A4)+",ORIENTATION="+Str(#DMORIENT_LANDSCAPE))
Print_StartPrinting("TEST")
Print_Box(5, 5,  100, 100)
Print_StopPrinting()
EndIf

Не одна из программ не работает. Принтер в готовности, краска есть, бумага есть. Подскажите пожалуйста, в чем дело на этот то раз???

Отредактировано Appolon (29.06.2011 02:14:30)

0

12

ВиниПур написал(а):

Appolon написал(а):
Если нужен более полный контроль над принтером, то нужно поставить расширенную библиотеку для работы с ним. К примеру Библиотека PrinterLib - хорошая библиотека для всех версий Пурика.
Библиотека содержит много разных примеров и подробное описание.

Ссылка не работает. Где ещё можно найти данную библиотеку?

0

13

http://www.purebasicpower.de/?PrinterLib_(Windows)

0

14

Пётр написал(а):

http://www.purebasicpower.de/?PrinterLib_(Windows)

Спасибо!

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Работа с принтером