Форум: "Начинающим";
Текущий архив: 2009.05.03;
Скачать: [xml.tar.bz2];
ВнизКак распечатать TXT файл Найти похожие ветки
← →
abhtr (2009-03-18 11:57) [0]Отчет формируется в ТХТ файл.
Как его распечатать в сжатом (Condens...) режиме.
← →
Slym © (2009-03-18 12:00) [1]PCL
выдай в принтер перед текстовиком PCL esc последовательность для настройки шрифтов в принтере
← →
Anatoly Podgoretsky © (2009-03-18 12:00) [2]> abhtr (18.03.2009 11:57:00) [0]
ReadLn/WriteLn
← →
abhtr (2009-03-18 13:52) [3]Взял пример из интернета:
procedure TfrmMain.btnPrintFileClick(Sender: TObject);
var
port, prnfile: file;
buffer: array [1..128] of Char;
Read: Integer;
begin
// Specify a file to print
AssignFile(prnfile, "c:\111\!!RtlTrd\DOC\Bordereau\ВедРаспределения1108.txt");
Reset(prnfile, 1);
// specify printer port HP1320NOIT
//AssignFile(port, "LPT1");
AssignFile(port, "hp LaserJet 1320 PCL 6"); //"HP1320NOIT"); //"hpLaserJet1320series");
Rewrite(port, 1);
repeat
BlockRead(prnfile, buffer, SizeOf(buffer), Read);
BlockWrite(port, buffer, Read);
// Application.ProcessMessages;
until EOF(prnfile) or (Read <> SizeOf(buffer));
CloseFile(prnfile);
CloseFile(port);
end;
Т.к. у меня сетевой принтер, то заменил строку
AssignFile(port, "LPT1");
Код проходит без ошибок, но не печатает.
Пробовал по разному обращаться к принтеру. Не получается.
Помогите.
← →
Slym © (2009-03-18 14:22) [4]весь файл грузим в Str
procedure TDirectPrint.PrintStr(const Str: String);
var
s,PrinterName:string;
hPrinter:THandle;
DocInfo:TDocInfo1;
Len,Writed:DWORD;
begin
s:=Str;
Len:=Length(s);
if Len=0 then exit;
if s[Len]<>#12 then
begin
s:=s+#12;
inc(Len);
end;
//конец страницы на всякий случай
PrinterName:=GetDefaultPrinterName;
if not OpenPrinter(PChar(PrinterName),hPrinter, nil) then RaiseLastOSError;
try
DocInfo.pDocName:="DirectPrint";
DocInfo.pOutputFile:=nil;
//DocInfo.pDatatype:="RAW";
DocInfo.pDatatype:="TEXT";
if StartDocPrinter(hPrinter,1,@DocInfo)=0 then RaiseLastOSError;
//if not StartPagePrinter(hPrinter) then RaiseLastOSError;
if not WritePrinter(hPrinter,PChar(s),Len,writed) then RaiseLastOSError;
if writed<>Len then RaiseLastOSError;
//if not EndPagePrinter(hPrinter) then RaiseLastOSError;
if not EndDocPrinter(hPrinter) then RaiseLastOSError;
finally
ClosePrinter(hPrinter);
end;
end;
← →
blackman © (2009-03-18 21:06) [5]Если расширение файла зарегистрировано в системе, то
ShellExecute файла с командой Print
if OpenDialog1.Execute then
ShellExecute(0,"print",pchar(OpenDialog1.FileName),nil, nil, SW_SHOWNORMAL);
← →
abhtr (2009-03-19 12:26) [6]
> blackman
спасибо, заработало.
Т.е. удалось распечатать на сетевой принтер
Но как распечатать его в "сжатом", т.е. "уплотненном", т.е. "Condensed" режиме.
← →
abhtr (2009-03-19 12:33) [7]Или как задать тип шрифта в создаваемом текстовом файле?
Файл создаю:
AssignFile(MyTextFile,sDirBordereau+"\"+sNameBrdDistribution);
Rewrite(MyTextFile);
...
WriteLn(MyTextFile,sss);
← →
Сергей М. © (2009-03-19 12:35) [8]
> как задать тип шрифта в создаваемом текстовом файле?
Никак.
← →
Slym © (2009-03-19 13:13) [9]Сергей М. © (19.03.09 12:35) [8]
PCL!!! Esc последовательность
← →
Сергей М. © (2009-03-19 13:18) [10]
> Slym © (19.03.09 13:13) [9]
А если принтер не поддерживает PCL ? Что и зачем тогда пихать в файл ?)
Не надо туда вообще ничего пихать. Или пихать, но потом не пенять на результат
← →
Slym © (2009-03-19 13:18) [11]http://sources.codenet.ru/file/282/pcl5.zip
← →
abhtr (2009-03-19 14:44) [12]
> http://sources.codenet.ru/file/282/pcl5.zip
К сожалению мало что понял :о(
Но "Condensed" режим не нашел
← →
Anatoly Podgoretsky © (2009-03-19 14:50) [13]> abhtr (19.03.2009 12:33:07) [7]
Наслаждайся, назначая любой шрифт в строчке
Printer.Canvas.Font
procedure TMainForm.mfPrintClick(Sender: TObject);
var
POutput : TextFile;
Ln : LongInt;
begin
if PrintDialog.Execute then begin // if Print Dialog OK
AssignPrn(POutput); // assign
ReWrite(POutput); // open printer
Printer.Canvas.Font := EditWnd.Font; // assign font to printer
for Ln := 0 to EditWnd.Lines.Count - 1 do begin
WriteLn(POutput,EditWnd.Lines[Ln]); // print one line
end;
CloseFile(POutput); // close printer
end
end; // mfPrintClick
← →
abhtr (2009-03-19 16:26) [14]
> Anatoly Podgoretsky
- Здорово! Большое спасибо!
Правда, получается только менять величину шрифта, пропорционально.
А "уплотнения" не получается.
Но и так уже приемлемо.
Так что БОЛЬШОЕ СПАСИБО!
← →
Anatoly Podgoretsky © (2009-03-19 16:52) [15]> abhtr (19.03.2009 16:26:14) [14]
Ну как же не получается, возьми уплотненый шрифт или уменьши размер. Поскольку точно не понятно что именно нужно.
← →
abhtr (2009-03-19 18:06) [16]Вот как у меня получилось:
RichEdit.Font.Name := "Courier New";
RichEdit.Font.Size := 8;
RichEdit.Lines.LoadFromFile("c:\111\!!RtlTrd\DOC\Bordereau\ВедРаспределения1108. txt");
AssignPrn(POutput); // assign
ReWrite(POutput); // open printer
Printer.Canvas.Font := RichEdit.Font; // assign font to printer
for Ln := 0 to RichEdit.Lines.Count - 1 do begin
WriteLn(POutput,RichEdit.Lines[Ln]); // print one line
end;
CloseFile(POutput); // close printer
Но как установить уплотненый шрифт докопаться не могу.
Если можно помогите.
← →
Smile (2009-03-19 18:23) [17]> Но как установить уплотненый шрифт докопаться не могу.
Что-то мне "подсказывает", что у тебя древний принтер типа FX/LX 800, там на сколько я помню были такие "опции" типа Condensed
В настоящий момент трудно себе представить, что тебе можно посоветовать
← →
blackman © (2009-03-19 20:14) [18]Condesed было на матричных. Даже кнопка была на принтере и соответственно управляющая последовательность для перевода в этот режим.
Иных уж нет, а те далеко :)
И даже если остался, то надо заменить.
Есть конечно некоторые шрифты. Совет [15] полезный,
но в общем случае можно посоветовать, печатать через WinWord или Excel. Т.е. подготовливать всегда файл вида DOC или XLS.
(Xls несколько ограничен по возможностям)
Можно будет легко менять шрифты, межстрочник, поля и все остальное...
Как
Delphi/Pascal » MsOffice
http://articles.org.ru/cn/?c=92
Довольно много статей
← →
abhtr (2009-03-23 09:15) [19]
> Можно будет легко менять шрифты, межстрочник, поля и все
> остальное...
Это все хорошо. И первоначально я так и делал. НО!
Отчет который я делал в Word, где заполнялась таблица, составлялся более 4 мин.
При выводе результатов в текстовый файл (ReadLn/WriteLn) время создания около 1 СЕК. !!!
А время для заказчика является определяющим.
← →
Юрий Зотов © (2009-03-23 19:29) [20]> abhtr (23.03.09 09:15) [19]
> Отчет который я делал в Word, где заполнялась таблица,
> составлялся более 4 мин.
Может быть, это из-за неоптимальной работы с Word? Вот пример: если идет многократное обращение к какому-нибудь свойству какого-то вложенного объекта, то это приводит к вызову кучи геттеров, а они, надо полагать, в Word"е не маленькие - то есть, выполняется куча лишнего кода.
Однажды удалось буквально за 5 минут ускорить работу VBA-скрипта в 50 раз простым кэшированием таких обращений.
← →
blackman © (2009-03-23 20:09) [21]Юрий Зотов как всегда прав.
Но можно еще существенно ускорить формирование, если отключить проверку орфо и не показывать документ.
WrdApp.Options.CheckSpellingAsYouType:=False; // отключить проверку орфо
WrdApp.Options.CheckGrammarAsYouType:=False; // отключить проверку орфо
WrdApp.Visible:=False;
← →
AndreyV © (2009-03-24 12:59) [22]А генераторы отчётов чем не устраивают?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.05.03;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.007 c