Hallo zusammen,
nach drei Tagen Arbeit und vielen Versuchen mit Google sowie rumstümpern, muss ich jetzt mal nach Hilfe fragen.
Wir benutzen auf der Arbeit ein Tool (printraw.exe) mit welchem wir XXX.txt Files (in IPL) als Konfigurationseinstellungen an Drucker senden.
Bisherige vorgehensweisse:
CMD öffnen --> printraw.exe C:\DATA\blablabla.txt Drucker1 (jeweils mit Leerzeichen)
also -----------> Programm Konfig-Datei Installierter-Drucker
Da die IPL Programmierer das anscheinend nicht hinbekommen über die CMD, dachte ich mir: Mach ich ein kleiner Program, mit Eingabefeldern. Sprich C# WinForms 😃
Habe dann erstmal geschaut, ob das überhaupt klappt:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Project1
{
class Class1
{
public static void Main()
{
//Variabelen
string line1;
string line2;
string output;
//Text Config
Console.WriteLine("Config-File");
Console.WriteLine();
line1 = Console.ReadLine();
//Text Printer
Console.WriteLine("Printer");
Console.WriteLine();
line2 = Console.ReadLine();
//String combine
output = String.Format("/K C:\\DATA\\Intermec\\VW\\printraw.exe C:\\DATA\\Intermec\\VW\\{0} {1}", line1, line2);
System.Diagnostics.Process.Start("CMD.exe", output);
}
}
}
Soweit, sogut! Nun die realisierung in der Forms-Variante:
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
//Variabelen
static string Config;
static string Printer;
public Form1()
{
InitializeComponent();
}
//Config-File
public void Configfile_TextChanged(object sender, EventArgs e)
{
Config = Configfile.Text;
}
//Printer
public void Printername_TextChanged(object sender, EventArgs e)
{
Printer = Printername.Text;
}
public string Output = String.Format("/K \"C:\\DATA\\Intermec\\VW\\printraw.exe C:\\DATA\\Intermec\\VW\\{0} {1}\"", Config, Printer);
//Sendbutton
private void button1_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("CMD.exe", this.Output);
}
}
}
Und da klappt irgendwas nicht. Die CMD öffnet sich, ich erhalte aber immer eine Anzeige, als wenn ich nur Printraw.exe ohne Parameter eingegeben hätte.
Das ist bestimmt nur eine Kleinigkeit im Syntax, aber ich komme nicht drauf!
Bin "nur" ein Systemintegrator und meine Programmier-Erfahrung ist schon ein gutes stück eingerostet. Sorry, sollte es wirklich einfach sein, aber ich bin einfach am Ende.
(Anhang die Win-Form für Visual C#)
Danke schonmal für die Mühe
Wenn es keinen Grund gibt dass man printraw verwenden muss... dann findest Du x-Beispiele im Internet wie das DIREKT geht (File einlesen und an einen Drucker pushen).
z.B: KB322091: Wie Sie unformatierte Daten an einen Drucker senden, indem Sie mithilfe von Visual C# .NET
Googeln nach "c# print raw"
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Hallo Programmierhans,
ist zwar ein guter Ansatz, aber zum einen macht C# RawPrinterHelper nichts anderes als Printraw.exe (außer das ich noch ganze seiten Code dazu schreiben muß), zum anderen wird es im RawPrinterHelper so beschrieben: "However, with the .NET Framework, you cannot send preformatted printer-ready data to a printer".
Heist also: keine formatierten Daten.
Um das nochmal deutlich zu machen, ICH WILL NICHT DRUCKEN, es geht um das Senden von, in IPL verfassten, Konfigurationsfiles.
Diese werden im Speicher des Druckers in vorgegebenen Locationen abgelegt und werden dann über SAP mit Daten gefüttert.
SAP-Zeichenketten + Konfig File = Barcode-Label
Naja dein "Output" wird beim Start des Programs einmal gesetzt und bleibt dann für immer so. Das ist aber etwas was du innerhalb von 1 min hättest selber rausfinden können:
[Artikel] Debugger: Wie verwende ich den von Visual Studio?
@SteelLynx1978
Na wenn Du keine erprobte Lösung willst, dann viel Spass beim frickeln.
Dieses Basisverfahren funktioniert bei Pago / Zebra / Intermec und sicher auch bei anderen Makrodruckern im Hostmodus.
Nb: ihr seid nicht die einzigen die aus SAP auf solche Druckertypen drucken.
Gruss
Programmierhans
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Wenn schon frickeln... Dann in etwa so
(Gar nicht so einfach zu editieren auf einem Pad)
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public string Output
{
get
{
return String.Format("/K \"C:\\DATA\\Intermec\\VW\\printraw.exe C:\\DATA\\Intermec\\VW\\{0} {1}\"", Configfile.Text, Printername.Text);
}
}
//Sendbutton
private void button1_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("CMD.exe", this.Output);
}
}
}
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
@Programmierhans
Ja!!! Genau das hatte ich gesucht.....Danke.
War schon etwas her bei mir, mit dem Programmieren, und ich bin einfach nicht mehr auf den get/set Syntax gekommen.
Welche wir allerdings als bekannt voraussetzen. Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1.