![]() |
UTF-8 Drucker Befehle direkt an Drucker senden
Hallo,
um Befehle zu einem Barcode-Drucker zu schicken habe ich bisher folgenden Code verwendet, das Problem ist das ich jetzt Text als UTF-8 an den Drucker senden muss, der Code kann jedoch nur AnsiString verarbeiten.
Delphi-Quellcode:
var
Template: TStringList; dwCount: DWORD; AnsiData: AnsiString; hPrinter: THandle; DocInfo: TDocInfo1; dwJob: DWORD; dwBytesWritten: DWORD; begin //init dwCount := Length(Template.Text); AnsiData := AnsiString(Template.Text); if OpenPrinter('Printername', hPrinter, nil) then begin try DocInfo.pDocName := 'RAWPrint'; DocInfo.pOutputFile := nil; DocInfo.pDatatype := 'RAW'; dwJob := StartDocPrinter(hPrinter, 1, @DocInfo); if dwJob <> 0 then begin try if StartPagePrinter(hPrinter) then begin try if WritePrinter(hPrinter, PAnsiChar(AnsiData), dwCount, dwBytesWritten) then begin if dwBytesWritten <> dwCount then raise Exception.Create('Daten konnten nicht an Drucker gesendet werden!'); end;{if} finally EndPagePrinter(hPrinter) end;{try..finally} end;{if} finally EndDocPrinter(hPrinter); end;{try..finally} end;{if} finally ClosePrinter(hPrinter); end;{try..finally} end else ShowMessage('Fehler: Barcode-Druck fehlgeschlagen!'); Bei meiner Suche nach einer Lösung bin ich über folgendes Beispiel gestolpert, damit das funktioniert muss der Drucker aber freigegeben werden. Was ich testweise gemacht habe und es funktioniert, das Barcode Label wird korrekt gedruckt.
Delphi-Quellcode:
Meine Frage ist, gibt es eine Möglichkeit den Text auch ohne die Freigabe direkt über den Namen des Druckers (Druckerspooler) an den Drucker zu schicken?
procedure TForm1.Button2Click(Sender: TObject);
var F: TStreamWriter; T: TStringList; begin T := TStringList.Create; try T.LoadFromFile('..\..\Test.txt', TEncoding.UTF8); F := TStreamWriter.Create('\\localhost\Printername', False, TEncoding.UTF8); try F.Write(T.Text); finally FreeAndNil(F); end; finally FreeAndNil(T); end; end; Oder gibt es noch eine andere Alternative wie ich den Text als UTF-8 an den Drucker gesendet bekomme? |
AW: UTF-8 Drucker Befehle direkt an Drucker senden
Versuch mal sowas wie
Delphi-Quellcode:
anstelle von
if WritePrinter(hPrinter, PAnsiChar(@SomeUtf8String[1]), dwCount, dwBytesWritten) then
Delphi-Quellcode:
in deinem ursprünglichen Kode. Du mußt nur sicherstellen dass dwCount die Zahl der Bytes im UTF8-String ist und nicht die Zahl der Zeichen. Und natürlich darf der String nicht leer sein...
if WritePrinter(hPrinter, PAnsiChar(AnsiData), dwCount, dwBytesWritten) then
|
AW: UTF-8 Drucker Befehle direkt an Drucker senden
Zitat:
Die Anzahl der Bytes habe ich sowohl mit ByteLength() versucht zu ermitteln also auch mit..
Delphi-Quellcode:
dwCount := TEncoding.UTF8.GetByteCount(Template.Text);
Aber das Fazit war immer, das gar nichts mehr an den Drucker geschickt wurde. |
AW: UTF-8 Drucker Befehle direkt an Drucker senden
Mal versucht einen String als UTF8String zu deklarieren? Template.Text ist jedenfalls KEIN UTF-8, sondern Unicode!
|
AW: UTF-8 Drucker Befehle direkt an Drucker senden
Zitat:
Delphi-Quellcode:
var
Template: TStringList; dwCount: DWORD; UTF8Str: UTF8String; hPrinter: THandle; DocInfo: TDocInfo1; dwJob: DWORD; dwBytesWritten: DWORD; begin //init UTF8Str := UTF8String(Template.Text); dwCount := TEncoding.UTF8.GetByteCount(Template.Text); if OpenPrinter('Printername', hPrinter, nil) then begin try DocInfo.pDocName := 'RAWPrint'; DocInfo.pOutputFile := nil; DocInfo.pDatatype := 'RAW'; dwJob := StartDocPrinter(hPrinter, 1, @DocInfo); if dwJob <> 0 then begin try if StartPagePrinter(hPrinter) then begin try if WritePrinter(hPrinter, PAnsiChar(@UTF8Str[1]), dwCount, dwBytesWritten) then begin if dwBytesWritten <> dwCount then raise Exception.Create('Daten konnten nicht an Drucker gesendet werden!'); end;{if} finally EndPagePrinter(hPrinter) end;{try..finally} end;{if} finally EndDocPrinter(hPrinter); end;{try..finally} end;{if} finally ClosePrinter(hPrinter); end;{try..finally} end else ShowMessage('Fehler: Barcode-Druck fehlgeschlagen!'); |
AW: UTF-8 Drucker Befehle direkt an Drucker senden
Hmm..
In deinem Original Code hättest Du nur zwei Zeile ändern müssen.. ;) Zitat:
|
AW: UTF-8 Drucker Befehle direkt an Drucker senden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz