Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1234528231
Maacheba
2009-02-13 15:30
2009.05.03
Защита программ: генерирование серийных ном., активационных etc


2-1237745274
Кузя
2009-03-22 21:07
2009.05.03
Delphi Scintilla Interface Components


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


2-1237293422
ivanoff
2009-03-17 15:37
2009.05.03
как получить список дней недели от Windows (на его языке)


3-1220428975
GanibalLector
2008-09-03 12:02
2009.05.03
FireBird стартует "с опозданием"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский