Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.03;
Скачать: CL | DM;

Вниз

Как распечатать 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.021 c
10-1155787788
DmiSb
2006-08-17 08:09
2009.05.03
Как вставить в ячейку таблицы в WinWord картинку ?


15-1235770201
Юрий
2009-02-28 00:30
2009.05.03
С днем рождения ! 28 февраля 2009 суббота


2-1237375660
ply
2009-03-18 14:27
2009.05.03
MessageBox без звука. Как?


3-1219995619
sql
2008-08-29 11:40
2009.05.03
Транзакции в триггере


15-1234853071
24ruswebmaster
2009-02-17 09:44
2009.05.03
This is a multi-part message in MIME format