|
Вопрос # 2 533/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Помогите разобраться, как распечатать документ содержащий форматированный текст и картинки. Документ формируется на канве, при попытке скопировать содержимое канвы на канву принтера функцией CopyRect документ не печатается, т.е. процесс процесс печати как бы начинается но даже бумага через принтер не проходит. Отрисовывать все заново на канве принтера это очень долго для моего документа. Если пробую копировать канву попиксельно Canvas.Pixels на печать выходит белеберда.
И последнее как скопировать на канву принтера и распечатать форматированный текст из RichEdit. Спасибо!
Мини-форум вопроса
Всего сообщений: 11; последнее сообщение — 17 марта 2009, 16:30; участников в обсуждении: 4.
|
Паровоз (статус: 10-ый класс), 17 марта 2009, 09:17 [#1]:
"как скопировать на канву принтера и распечатать форматированный текст из RichEdit"
А RichEdit.Print не подойдет?
|
|
Казаков Николай Константинович (статус: 1-ый класс), 17 марта 2009, 10:07 [#2]:
Нет, кроме RichEdit на канве есть и картинки, и др. RichEdit, если использовать RichEdit.Print на печать пойдет содержимое только данного Rich, а мне надо распечатать всю страницу с текстом и графикой.
|
|
Пупкин В В (статус: 2-ой класс), 17 марта 2009, 10:46 [#3]:
скопировать canvas в битмап, а потом Printer.Canvas.Draw(0,0,Bitmap);
(эт как вариант)
|
|
Вадим К (статус: Академик), 17 марта 2009, 10:54 [#4]:
А как копируете на канву? может копирования то и нет? пробовали скопировать на другую канву, будет ли картинка? а принтер проинициализировать не забыли?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Казаков Николай Константинович (статус: 1-ый класс), 17 марта 2009, 13:38 [#5]:
Копирую на канву следующим образом:
printdialog1.Execute;
Printer.Title:='Документ';
Printer.Orientation:=poPortrait;
R1:=Classes.Rect(0,0,1000,1000);
R2:=Classes.Rect(0,0,1000,1000);
Printer.BeginDoc;
Printer.Canvas.CopyRect(R1,Protocols.Canva,R2) ;
Printer.EndDoc;
После Printer.EndDoc; загружается окно принтера и в трее мелькает значек принтера и ВСЕ! ничего не печатается 
Если вместо Printer.Canvas.CopyRect вставлю Printer.Canvas.TextOut и попробую распечатать одну строку печать идет все ОК!
|
|
Вадим К (статус: Академик), 17 марта 2009, 13:52 [#6]:
Надо попробовать посмотреть в системных событиях виндовс (в Event Log). Может параметры для копирования плохие. Ну например канва принтера меньше, принтер не может печатать от точки 0,0 и надо немного отступить.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Казаков Николай Константинович (статус: 1-ый класс), 17 марта 2009, 14:17 [#7]:
Попробовал так:
printdialog1.Execute;
Printer.Title:='Документ';
Printer.Orientation:=poPortrait;
R1:=Classes.Rect(0,0,1000,1000);
R2:=Classes.Rect(0,0,1000,1000);
bm:=TBitMap.Create;
bm.Canvas.CopyRect(R1,Protocols.Canva,R2);
Printer.BeginDoc;
Printer.Canvas.Draw(100,100,bm) ;
Printer.EndDoc;
результат тот же даже бумага не проходит через принтер, че за фигня, весь мозг себе вынес уже
|
|
Вадим К (статус: Академик), 17 марта 2009, 15:09 [#8]:
Во первых, не стоит ругаться.
В EventLog смотрели?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Казаков Николай Константинович (статус: 1-ый класс), 17 марта 2009, 15:48 [#9]:
Еще попробовал скопировать при помощи CopyRect из канвы источника в Image1.Canvas, копирование удалось, все как нужно. Когда копирую сначала в канву принтера, затем в Image1.Canvas выдает белый фон, без текста и рисунков, может правда что-нибудь с разрешением, масштабом, но как этим пользоваться я честно не знаю, печатать пробую в первый раз. Подскажите пожалуйста
|
|
Вадим К (статус: Академик), 17 марта 2009, 15:57 [#10]:
С канвы принтера в канву Image? я не знаю, удастся ли такое. Наверно белый квадрат и будет результатом.
При копировании на канву принтера не стоит забывать о dpi - точек на дюйм. Для экрана это обычно либо 72, либо 96 (за редким исключением 120). для самых плохих принтеров оно обычно 300. поэтому, если на экране картинка выглядит размером сантиметров 10, то на принтере будет не больше 2-3 сантиметров.
Можно пойти немного обходным манёвром, которым я пошёл в свое время. Использовать компонент http://www.delphiarea.com/products/delphi-components/preview/ . Он бесплатный, с сорцами и демками.
Вся изюминка в том. что можно рисовать на канве, предоставляемой компонентом, а он обеспечит препросмотр и потом вывод на принтер, поможет отмаштабировать всё это дело. Очень хорошая штука.
Обычно, если на канву компонента удалось вывести нормально, то на принтер оно уже уйдёт так, как надо.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|