Hi,
Für die Adressaufkleber auf Endlospapier ein "Nadler" : Star LC 24-100.
(Bei der DOSe wundert mich zwischenzeitlich auch einiges .. direkter Druck übern Druckerport war/ist für mich aufm Amiga kein Problem.)
Dann nimm den Amiga.
Nein, ich meine das durchaus ernst.
Was heißt das jetzt für mich ?
Ich muß übern Treiber gehen?
Wäre das " exec(PRINT datei) " ?
Ich glaube ja (kenne mich mit DOS/Windows nicht so aus)
Hab ich schon versucht, aber bei der Variante, kann ich meinen Drucker nicht überreden, den Druck nach 5 Zeilen Adresse zu stoppen. Ich kann machen, was ich will, er "wirft ne A4-Seite" aus.
Ja, am Ende wird ein Paperfeed (0x0c) eingesetzt.
Dann komst Du wohl tatsächlich nicht drumherum, Dir einen eigenen Triber zu schreiben (Wenn Du Postscript kannst, könnetst Du es damit versuchen, aber ich bezweifele das, habe auch nichts entsprechendes gefunden). Ist in diesem Fall aber einfach. Dein Ansatz war schon ganz richtig, nur nicht sauber.
Du hast ja schon eine Probedruck gemacht (das mit der Tabelle) und weißt welcher Buchstabe falsch ist und welcher dafür eingesetzt werden muß und wie die dezimalen Werte dafür sind. Statt nun mühselig auf der Tastatur rumzuklimpern, nimmst Du einfach die dezimalen Werte aus der Tabelle.
Dafür kannst Du ord() nehmen. ord($zeichen) gibt den Zeichenwert zurück. Mit $string{$nummer} bekommst Du das Zeichen an der $nummer-Stelle des Strings $string. MIt ord($string{$nummer}) also den Wert. Das kannst Du dann als Bedingung in einen switch() einbauen und dann einfach die Nummer ändern (kannst Du ab php4 direkt anweisen, also $string{$number} = $ersatznummer).
Folgendes von php.net geklaut:
function convert_text($str){
$out = '';
for ($i = 0; $i<strlen($str);$i++){
$ch = ord($str{$i});
switch($ch){
case 252: $out .= chr(129);break; //u Umlaut
case 220: $out .= chr(154);break;//U Umlaut
case 228: $out .= chr(132);break;//a Umlaut
case 196: $out .= chr(142);break;//A Umlaut
case 214: $out .= chr(153);break;//O Umlaut
case 246: $out .= chr(148);break;//o Umlaut
case 223: $out .= chr(225);break;//SZ
default : $out .= chr($ch) ;
}
}
return $out;
}
Nachteil: Du mußt den gesammten String abklappern. Das mußt Du aber normalerweise immer.
Etwas habe ich noch gefunden, das sieht eleganter aus und würde auch für Unicode funktionieren (ist auch aus einer Umwandlungsroutine geklaut ;-):
<?php
$map_array = array(
"\xb2" => "\xe4", /* hochgestellte 2 gegen 'ä' austauschen */
...
);
function myPrinterDriver($str) {
global $map_array;
return strtr($str, $map_array);
}
?>
Ich habe aber hier kein PHP drauf und kann das nicht ausprobieren.
Ganz regulär wäre es natürlich, wenn Du herausfindest, welchen Code Du hast und welchen Code der Drucker möchte. Dann gibt es iconv(), das z.B. von windows-1251 nach latin-1 umwandeln kann. Soviele sind das aber nicht, könntest Du glatt ausprobieren. Allerdings weiß ich nicht, ob Du die entspr Lib hast, siehe auch http://de3.php.net/manual/en/ref.iconv.php (da siehst Du auch, woher ich den Code oben geklaut habe ;-)
Verzweiflung macht sich breit ...
Ruhe ist die erste Bürgerpflicht! >;->
so short
Christoph Zurnieden