Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Принтер печатает в файл. Как задать имя файла. 
:(
    Опции темы
Sponger
Дата 31.5.2006, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 14.2.2006

Репутация: нет
Всего: нет



Принтер (Microsoft Office Document Image Writer) печатает в файл, но постоянно запрашивает имя файла для печати. 
Как задать имя файла в который он будет печатать?  

Это сообщение отредактировал(а) Sponger - 31.5.2006, 12:57
PM MAIL   Вверх
Marriage
Дата 31.5.2006, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Печатает в файл, это как ???
Если порблема в получении имени файла , тогда попробуйте использовать одну из функций
Код

function GetTempFileName; external kernel32 name 'GetTempFileNameA';
function GetTempFileNameA; external kernel32 name 'GetTempFileNameA';
function GetTempFileNameW; external kernel32 name 'GetTempFileNameW';

Или я не так понял ?? 

Это сообщение отредактировал(а) Marriage - 31.5.2006, 18:35


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
McDevil
Дата 31.5.2006, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.12.2005
Где: Казахстан, Павлод ар

Репутация: 1
Всего: 3



Цитата(Marriage @  31.5.2006,  18:34 Найти цитируемый пост)
Печатает в файл, это как ???

Это значит, что реального принтера не существует smile  


--------------------
 мы знаем столько, сколько можем, а можем столько, сколь хотим... 

Тестируем программу: SPL-программа аналогов функций  
PM MAIL WWW ICQ   Вверх
Yanis
Дата 31.5.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(McDevil @  31.5.2006,  20:05 Найти цитируемый пост)
Это значит, что реального принтера не существуе

Печать в файл не означает отсутствие реального принтера. 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
McDevil
Дата 31.5.2006, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.12.2005
Где: Казахстан, Павлод ар

Репутация: 1
Всего: 3



Цитата(Yanis @  31.5.2006,  19:50 Найти цитируемый пост)
Печать в файл не означает отсутствие реального принтера. 

 smile  smile  smile я прошу вас давайте не будем спорить, конечно же в жизне всякие ситуации бывают и прорабатывать их все нет смысла, по крайней мере в рамках этого топика, я просто привел один из вариантов, но в основном именно это и означает(по крайней мере я сужу по своему опыту работы с простыми юзерами), просто я именно с такими случаями сталкивался, когда реального принтера нет!  

Это сообщение отредактировал(а) McDevil - 31.5.2006, 20:19


--------------------
 мы знаем столько, сколько можем, а можем столько, сколь хотим... 

Тестируем программу: SPL-программа аналогов функций  
PM MAIL WWW ICQ   Вверх
Mechanic
Дата 31.5.2006, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: 6
Всего: 7



Определить класс окошка, и потом искать его по таймеру, и слать в него имя файла, и кнопу ОК нажимать.. Сам понял, что не красиво..  smile  Зато должно сработать. 
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
Sponger
Дата 1.6.2006, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 14.2.2006

Репутация: нет
Всего: нет



2Marriage Надо не получить, а задать имя файла в который будет печататься.

Microsoft Office Document Image Writer - вроде бы принтер который у всех установлен при установке системы. Он и печатает в файл, 
либо *.tif либо *.mdi.

Я его использую вместо превью и в него у меня нормально выводятся фотографии, а на обычный принтер почему-то печатается не все. 
Я задавал вопрос о некоррекстной печати http://forum.vingrad.ru/index.php?showtopic=98564
PM MAIL   Вверх
McDevil
Дата 1.6.2006, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.12.2005
Где: Казахстан, Павлод ар

Репутация: 1
Всего: 3



Вот статья из DelphiWorld, может поможет...
Delphi имеет стандартный объект для доступа к принтеру - TPRINTER, находящийся в модуле PRINTERS. В этом модуле имеется переменная Printer:Tpinter, что избавляет от необходимости описывать свою. Он позволяет выводить данные на печать и управлять процессом печати. Правда, в некоторых версиях Delphi 1 он имеет "глюк" - не работают функции Draw и StrethDraw. Но эта проблема поправима - можно использовать функции API. Далее приведены основные поля и методы объекта Printers : 

СВОЙСТВА 
  • Aborted: boolean - Показывает, что процесс печати прерван 
  • Canvas: Tcanvas - Стандартный Canvas, как у любого графического объекта. Он позволяет рисовать на листе бумаге графику, выводить текст ... . Тут есть несколько особенностей, они описаны после описания объекта. 
  • Fonts: Tstrings - Возвращает список шрифтов, поддерживаемых принтером 
  • Handle: HDS - Получить Handle на принтер для использования функций API (см. Далее) 
  • Orientation: TprinterOrientation - Ориентация листа при печати : (poPortrait, poLandscape) 
  • PageHeight: integer - Высота листа в пикселах 
  • PageNumber: integer - Номер страницы, увеличивается на 1 при каждом NewPage 
  • PageWidth: integer - Ширина листа в пикселах 
  • PrinterIndex: integer - Номер используемого принтера по списку доступных принтеров Printers 
  • Printers: TStrings - Список доступных принтеров 
  • Printing: boolean - Флаг, показывающий, что сейчас идет процесс печати 
  • Title: String - Имя документа или приложения. Под этим именем задание на печать регистрируется в диспетчере печати
МЕТОДЫ
  • AssignPrn(f: TextFile) - Связать текстовый файл с принтером. Далее вывод информации в этот файл приводит к ее печати. Удобно в простейших случаях. 
  • Abort - Сбросить печать 
  • BeginDoc - Начать печать 
  • NewPage - Начать новую страницу 
  • EndDoc - Завершить печать. 
Пример: 

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  with Printer do
  begin
    BeginDoc; { Начало печати }
    Canvas.Font:=label1.font; { Задали шрифт }
    Canvas.TextOut(100,100,'Это тест принтера !!!'); { Печатаем текст }
    EndDoc; { Конец печати }
  end;
end;


Особенности работы с TPrinter 

1. После команды BeginDoc шрифт у Canvas принтера сбрасывается и его необходимо задавать заново 
2. Все координаты даны в пикселах, а для нормальной работы необходимы миллиметры (по двум очевидным причинам:          очень трудно произвести разметку страницы в пикселах (особенно если необходима точность), и , главное, при                 изменении разрешающей способности принтера будет изменяться число точек на дюйм, и все координаты "поедут". 
3. У TPrinter информация о принтере, по видимому, определяются один раз - в момент запуска программы (или смены             принтера). Поэтому изменение настроек принтера в процессе работы программы может привести к некорректной             работе, например, неправильной печать шрифтов True Type. 

Определение параметров принтера через API 

Для определения информации о принтере (плоттере, экране) необходимо знать Handle этого принтера, а его можно узнать объекта TPrinter - Printer.Handle. 

Далее вызывается функция API (unit WinProcs): 

Код

GetDevice(Handle:HDC; Index:integer):integer;


Index - код параметра, который необходимо вернуть. 

Для Index существует ряд констант :
  • DriverVersion - вернуть версию драйвера 
  • Texnology - Технология вывода, их много, основные 
  • dt_Plotter - плоттер 
  • dt_RasPrinter - растровый принтер 
  • dt_Display - дисплей 
  • HorzSize - Горизонтальный размер листа (в мм) 
  • VertSize - Вертикальный размер листа (в мм) 
  • HorzRes - Горизонтальный размер листа (в пикселах) 
  • VertRes - Вертикальный размер листа (в пикселах) 
  • LogPixelX - Разрешение по оси Х в dpi (пиксел /дюйм) 
  • LogPixelY - Разрешение по оси Y в dpi (пиксел /дюйм)
Кроме перечисленных еще около сотни, они позволяют узнать о принтере практически все. Параметры, возвращаемые по LogPixelX и LogPixelY очень важны - они позволяют произвести пересчет координат из миллиметров в пиксели для текущего разрешения принтера. 

Пример таких функций: 

Код

{ Получить информацию о принтере }
procedure TForm1.GetPrinterInfo;
begin
  PixelsX:=GetDeviceCaps(printer.Handle, LogPixelsX);
  PixelsY:=GetDeviceCaps(printer.Handle, LogPixelsY);
end;

{ переводит координаты из мм в пиксели }
function TForm1.PrinterCoordX(x: integer): integer;
begin
  PrinterCoordX:=round(PixelsX/25.4*x);
end;

{ переводит координаты из мм в пиксели }
function TForm1.PrinterCoordY(Y: integer): integer;
begin
  PrinterCoordY:=round(PixelsY/25.4*Y);
end;

GetPrinterInfo;
Printer.Canvas.TextOut(PrinterCoordX(30), PrinterCoordY(55),
'Этот текст печатается с отступом 30 мм от левого края и '+
'55 мм от верха при любом разрешении принтера');


Данную методику можно с успехом применять для печати картинок - зная размер картинки можно пересчитать ее размеры в пикселах для текущего разрешения принтера, масштабировать, и затем уже распечатать. Иначе на матричном принтере (180 dpi) картинка будет огромной, а на качественном струйнике (720 dpi) - микроскопической. 

Я производил печать следующим образом: 

Код

procedure TForm6.SpeedButton1Click(Sender: TObject);
var
  PRect: Trect;
  PBitMap: TBitmap;
begin
  PBitmap:=TBitMap.Create;
  PBitmap.LoadFromFile('C:\1.bmp');
  with PRect do
  begin
    left:=0;
    top:=0;
    right:=Printer.PageWidth;
    Bottom:=Printer.PageHeight;
  end;
  with printer do
  begin
    BeginDoc;
    font.name:='Times New Roman';
    Canvas.StretchDraw(PRect,Bitmap);
    EndDoc;
  end;
  PBitmap.Free;
end;




Microsoft Office Document Image Writer - появляется после установки Microsoft Office и явл. как-бы виртуальным принтером... smile

Добавлено @ 12:24 
Если что, то Yanis меня поправит smile  


--------------------
 мы знаем столько, сколько можем, а можем столько, сколь хотим... 

Тестируем программу: SPL-программа аналогов функций  
PM MAIL WWW ICQ   Вверх
Yanis
Дата 1.6.2006, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



К сожалению у меня нету виртуального принтера. Проверить немогу... Где скачать можно? 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0898 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.