Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.119.148] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Как можно распечатать файлы .pdf, .doc, .xls, .gif, .csv, .jpg, .txt, .bmp?
|
Сообщ.
#2
,
|
|
|
Цитата seriy @ Как можно распечатать файлы .pdf, .doc, .xls, .gif, .csv, .jpg, .txt, .bmp? По-разному! Можно OLE или COM использовать для .pdf, .doc, .xls. Для .txt - TMemo. Для картинак - TImage. |
Сообщ.
#3
,
|
|
|
А можно какой-нибудь для OLE или COM?
|
Сообщ.
#4
,
|
|
|
Цитата seriy @ А можно какой-нибудь для OLE или COM? что можно то? |
Сообщ.
#5
,
|
|
|
Компоненты поищи на Torry, а распечатать можно, используя переменную Printer. Соответственно, RTFM. Если неохота его читать, то там есть канвас, через который можно отправить изображение на принтер.
|
Сообщ.
#6
,
|
|
|
Большинство если не все из форматорв можно распечатать с помощью ShellExecute с командой Print
Возможность можно проверить правой кнопкой мыши на файле, если есть пункт Печать, то напрямую, если нет то откроется программа, которой можно печатать. |
Сообщ.
#7
,
|
|
|
Мне нужна эта программа в качестве сервиса. При использовании ShellExecute каждый раз открывается окно программы в которой выполняется печать. К сожалению для моей программы это критично.В принципе с Word, Excel(работаю с ними через компоненты WordApplication и ExcelApplication ) и картинками(открываю в TImageList и оттуда печатаю) я вроде разобрался, а с pdf есть некоторые проблемы. Может кто-то знает способ как через OLE можно связаться с Adobe Reader?
|
Сообщ.
#8
,
|
|
|
Цитата seriy @ При использовании ShellExecute каждый раз открывается окно программы в которой выполняется печать дык, запускается то она запускается, просто не показывай само окно, делай невидимым и всё... что разве не подходит? |
Сообщ.
#9
,
|
|
|
А можно пример как это сделать, а то чего-то я в MSDN не нашел как окно сделать невидимым
|
Сообщ.
#10
,
|
|
|
seriy
лично я вот так работаю с вордом uses ComObj; var Word:variant; function CreateWord:boolean; begin CreateWord := true; try Word := CreateOleObject('Word.Application'); except CreateWord := False; end; function VisibleWord(Visible:boolean):boolean; begin VisibleWord := True; try Word.Visible := Visible; except VisibleWord := False; end; end; ну а дальше делаю то что мне нужно для решения задачи... |
Сообщ.
#11
,
|
|
|
Цитата seriy Может кто-то знает способ как через OLE можно связаться с Adobe Reader? С Adobe Reader'ом идет ActiveX-компонент TAcroPDF. Лежит он в C:\Program Files\Adobe\Acrobat 7.0\ActiveX\AcroPDF.dll. Его надо инсталлировать через Component->Import ActiveX Control. |
Сообщ.
#12
,
|
|
|
Спасибо за все ответы. Помогло, но теперь возникла следующая проблема : при попытке печати документа используя WordApplication, в свойствах печати в списке принтеров по умолчанию выбран Microsoft Office Document Image Writer. Можно ли программно установить нужный мне принтер? Или это где-то в Windows нужно настроить?
И что это за Image Writer такой, че-то раньше я его не видел. Ксати при попытке печати pdf возникает та же самая проблема. |
Сообщ.
#13
,
|
|
|
Цитата seriy @ Можно ли программно установить нужный мне принтер WordApplication1.ActiveDocument.PrintOut(Background, Append_, Range, OutFileName, From, To_, Item, Copies, Pages, PageType, PrintToFile, Collate, ActivePrinterMacGX, ManualDuplexPrint, PrintZoomColumn, PrintZoomRow, PrintZoomPaperWidth, PrintZoomPaperHeight); все параметры типа OleVariant From - номер страницы с которой нужно начинать печать To_ - номер последней печатаемой страницы, если стоит EmptyParam, то последняя Copies - определяет количество копий PrintToFile - указывает, должно ли печататься в файл (false и EmptyParam - не должно) Collate - указывает, нужно ли разбирать по копиям (false и EmptyParam - не должно) остальное могу только предположить, т.к. ещё не разбирался: OutFileName - путь имя файла в который печатать ActivePrinterMacGX - какой принтер использовать ManualDuplexPrint - двухсторонняя печать и т.д. |
Сообщ.
#14
,
|
|
|
Цитата seriy @ Можно ли программно установить нужный мне принтер? можно... вот так uses IniFiles, Printers; {...} procedure TMainForm.FormCreate(Sender: TObject); begin cbPrinters.Items.Assign(Printer.Printers); cbPrinters.Text := Printer.Printers[Printer.PrinterIndex]; lblPrinter.Caption := Printer.Printers[Printer.PrinterIndex]; end; procedure TMainForm.cbPrintersChange(Sender: TObject); var IniFile: TIniFile; TempStr1, TempStr2: string; S: array[0..64] of char; begin with Printer do begin PrinterIndex := cbPrinters.ItemIndex; TempStr1 := Printers[PrinterIndex]; System.Delete(TempStr1, Pos(' on ', TempStr1), Length(TempStr1)); IniFile := TIniFile.Create('WIN.INI'); try TempStr2 := IniFile.ReadString('Devices', TempStr1, ''); IniFile.WriteString('windows', 'device', TempStr1 + ',' + TempStr2); StrCopy(S, 'windows'); SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@S)); finally IniFile.Free; end; end; lblPrinter.Caption := Printer.Printers[Printer.PrinterIndex]; end; cbPrinters - это ComboBox, lblPrinter - это Label |
Сообщ.
#15
,
|
|
|
Спасибо, все работатет, только не могу понять что делает строка SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@S))?
|