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:
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;
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?
Oder gibt es noch eine andere Alternative wie ich den Text als UTF-8 an den Drucker gesendet bekomme?