[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Mar 2005
    Beiträge
    148

    Kyrillisch drucken

    Hallo zusammen,
    ich verzweifel langsam mit meinen blöden russischen Ausdrucken hier.
    Die Lösung ist sicher einfach.
    Ich komm nur nicht drauf.


    Ich habe ein RPG Programm, das einen Lieferschein druckt.
    Neben den normalen Sachen, die man dort so drauf hat soll auch ein Feld mit der russischen Artikelbezeichnung gedruckt werden.


    Diese Bezeichnung habe ich in einer Datei mit ein paar CHAR Feldern und einem GRAPHIC Feld in dem die kyrillischen Daten stehen.

    Code:
    CREATE TABLE LIB123.DAZ63P ( 
    	AZFIRM CHAR(3) CCSID 273 NOT NULL DEFAULT '' , 
    	AZNILA CHAR(2) CCSID 273 NOT NULL DEFAULT '' , 
    	AZARTN CHAR(30) CCSID 273 NOT NULL DEFAULT '' , 
    	AZZTN1 CHAR(15) CCSID 273 NOT NULL DEFAULT '' , 
    	AZZTN2 CHAR(15) CCSID 273 NOT NULL DEFAULT '' , 
    	AZBZRU GRAPHIC(200) CCSID 13488 NOT NULL DEFAULT '' )
    	RCDFMT DAZ63F1;
    Ich hab die Daten dort per JDBC SQL reingeschrieben und die sind dort auch tatsächlich angekommen.
    Per SQL von meinem Rechner und per System i Navigator kann ich sie sehen.
    Per strsql im 5250 gehts nicht, der Emulator kann kein Unicode vermute ich mal.


    Mein Testsystem hier ist auf V5R4 mit QCCSID 65535.
    Meine Job-CCSID ist 273.

    Mein Drucker ist als Remote-Outq über *IP angebunden und es handelt sich um einen Kyocera FS2020D mit PCL6.
    TRANSFORM(*NO) und MFRTYPMDL(*HPII)
    Ein *PRT Device gibts dazu nicht.


    Jetzt hab ich ein Printerfile mit dem Positionsformat hier:
    Code:
    A          R D632102                                           
    A                                      SPACEB(002)             
    A            ZPPOSI         3S 0O     2                        
    A                                      SPACEB(001)             
    A            ZPARTN        15A  O    +2                        
    A            ZPBEZ1        30G  O    +1CCSID(1200 *CONVERT 15) 
    A            ZPZTEU        11A  O    +1                        
    A            ZPHELA         3A  O    +1                        
    A            ZPMENG         8S  O    +7                        
    A            ZPNGEW         8S 2O    85                        
    A            ZPTGEW         8S 2O    97                        
    A            ZPLTNO        10A  O    +4                        
    A            ZPPANO        10A  O    +2                        
    A            ZPBEZ2        30A  O    23                        
    A                                      SPACEB(001)             
    A            ZPZTRU        11A  O    +1
    Das ist meine Positionszeile und in ZPBEZ1 sollte die russische Bezeichnung aus meiner Datei (AZBZRU) oben stehen.


    Im Programm fülle ich diese Zeile so:
    Code:
    c                   clear                   d632102
    c                   z-add     znposi        zpposi 
    c                   eval      ZPARTN=%trim(azartn) 
    c                   eval      ZPBEZ1=%char(azbzru) 
    c                   eval      ZPBEZ2=%trim(tzbez2) 
    c                   eval      ZPZTEU=%trim(tzztnr) 
    c                   eval      ZPHELA=*blanks
    c                   eval      ZPMENG=0
    c                   eval      ZPNGEW=0
    c                   eval      ZPTGEW=0
    c                   eval      ZPLTNO=*blanks
    c                   eval      ZPPANO=*blanks
    c                   eval      ZPZTRU=%trim(azztn2) 
    c                   write     d632102

    Auf dem Ausdruck ist dann alles drauf, nur die kyrillischen Zeichen wurden durch Bindestriche ersetzt.
    Die Anzahl der Striche stimmt, Leerzeichen sind auch da, nur ists halt nicht kyrillisch (siehe http://bit.ly/QI5XLE).


    Jetzt frag ich mich, was zu tun ist und worans liegt.
    Liegts am Programm, am Printerfile, an der Druckerdefinition oder am Drucker selber?
    Hat wer eine Idee?
    Gruß
    Martin

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Leider ist es nicht so, wie du dir das vorgestellt hast.
    Man kann in einer PRTF keine gemischten Zeichendaten ausgeben.

    Der Zeichensatz wird durch die CHRID der PRTF bestimmt (CRTPRTF, OVRPRTF).
    So lange man da nichts tut, gilt der Standard *DEV, also der Drucker entscheidet.

    Möchtest du also kyrillisch drucken, kann das nur mit der gesamten PRTF gehen, nicht für einzelne Felder.

    Die etwas schwierigere Variante ist Hosttransform mit AFPDS und dem Schlüsselwort FONTNAME.
    Hier kann ein TrueType-Font gewählt werden (der vorher installiert werden muss), der wiederum auch Unicodefähig sein muss.
    Dann wird dieser Font als Bitmap an den Drucker gesendet.
    Soweit die Theorie, ausprobiert habe ich das noch nicht.
    FONTNAME (Font name) keyword in printer files


    Die CHRID für kyrillisch müsste 960 880 sein.

    System i basic printing: CHRID values supported
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Mar 2005
    Beiträge
    148
    Hallo Baldur,
    danke für die Tipps.
    Aber irgendwie krieg ichs nicht hin.

    Ich habe versucht das *SCS Printerfile per CHGPRTF umzustellen auf CHRID(960 880) und CHRID(1150 1025).

    Mein Feld ZPBEZ1 im Printerfile ist 30A und ich fülle es mit
    Code:
    eval ZPBEZ1=%char(azbzru)
    AZBZRU ist wie oben schon geschrieben 200G mit CCSID 13488.

    Wenn ich mir im Debugger das Feld ZPBEZ1 nach meinem eval oben angucke, sieht es so aus:
    Code:
    > EVAL ZPBEZ1 :x                                                       
         00000     3F3F3F3F 3F3F3F3F 3F403F3F 3F3F3F3F   - ......... ......
         00010     40404040 40404040 40404040 4040....   -               ..
    Das sieht für mich aus, als würde der %char nicht funktionieren.
    Ich brauch den aber, ansonsten krieg ich die Graphic Daten ja nicht in das Alpha Feld.

    Das Problem scheint mit der CCSID meines Jobs zusammenzuhängen.
    %char scheint diese für die Konvertierung zu nutzen.

    Standardmässig hab ich:
    ID des codierten Zeichensatzes (CCSID) . . . . . : 65535
    Standard-ID des codierten Zeichensatzes . . . . . : 273

    Wenn ich jetzt ein CHGJOB CCSID(1025) oder 880 mache, sieht der %char schon ganz anders aus.

    Code:
    > EVAL ZPBEZ1 :x                                                       
         00000     EDDBFABC EBFBDAEF CC40BECB CEEEEADE   - Òû³¯ÔÛ¹Õ¦ ´ôóÓ²ú
         00010     40404040 40404040 40404040 4040....   -               ..
    Ein einfaches Eval im Debugger sagt mir:
    Code:
    ZPBEZ1 = 'VOZDUSNIJ FIL'TR              '
    Was ist eigentlich haben will ist ein: "ВОЗДУШНЫЙ ФИЛЬТР" (Fängt mit nem kyrillischen "BO3" an und hört mit "bTP" auf, ich denk das Forum kriegts hin.)

    Auf dem Drucker kommt dann folgendes raus: http://bit.ly/UDzjQy
    Anzahl Zeichen stimmt, Zeichensatz irgendwie nicht.

    Könnte das am TRANSFORM(*NO) USRDTATFM(*LIBL/TSPRWPR) MFRTYPMDL(*HP6) der OUTQ liegen?


    ===

    *AFPDS hab ich auch versucht, das funktioniert aber noch weniger.
    Haben wir hier noch nie genutzt, scheint aber sinnvoll zu sein.
    Ich kann jetzt zwar PDF drucken, Barcodes und Overlays machen, aber mit FONTNAME funktionierts dann nicht.
    Der Spool wird erstellt, geht kurz auf SND und dann in HLD.

    Ich hatte die OUTQUEUE mit TRANSFORM(*YES) MFRTYPMDL(*HP6) eingerichtet.

    Code:
     * POSITIONEN                                                       
    A          R D632102                                                
    A                                      SPACEB(002)                  
    A            ZPPOSI         3S 0O     2                             
    A                                      EDTCDE(Z)                    
    A                                      SPACEB(001)                  
    A            ZPARTN        15A  O    +2                             
    A            ZPBEZ1        40G  O    +1FONTNAME('Monotype Sans WT' +
    A                                      (*POINTSIZE 10.0)) +         
    A                                      CCSID(13488 *NOCONVERT)      
    A            ZPZTEU        11A  O    +1                             
    A            ZPHELA         3A  O    +1                             
    A            ZPMENG         8S  O    +7                             
    A            ZPNGEW         8S 2O    85                             
    A            ZPTGEW         8S 2O    97                             
    A            ZPLTNO        10A  O    +4                             
    A            ZPPANO        10A  O    +2                             
    A            ZPBEZ2        30A  O    23                             
    A                                      SPACEB(001)                  
    A            ZPZTRU        11A  O    +1
    Im Programm dann einfach:
    Code:
    eval ZPBEZ1=azbzru
    Das Zielfeld ist ja jetzt auch Graphic.

    Wenn ich mir den Spool angucke, sind da auch nicht anzeigbare Zeichen drin.
    Drucken geht dann halt nicht.


    Ich glaube, die *SCS Methode verspricht eher Erfolg.
    Gruß
    Martin

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Hier laufen verschiedene Sachen zusammen.

    %CHAR wandelt natürlich falls möglich in die Job-CCSID um. Steht diese auf *HEX wird die Default-CCSID verwendet.

    Fontname wird soweit ich nachgelesen habe nur mit AFPDS, Hosttransform bzw. IPDS-Druckern mit Rasterarchitektur oder PDF-Ausgabe unterstützt.
    Die Fonts müssen aber korrekt installiert und vorhanden sein.
    Bei der Umwandlung als *SCS werden dir ggf. Warnhinweise ausgegeben wenn Schlüsselworte ignoriert werden.
    Klappt auf diesem Wege z.B. die PDF-Ausgabe und diese ist auch dann korrekt zu lesen, sollte es mit dem Drucker auch klappen.

    Um mittels Unicode (CCSID 13488) ohne Fontname zu drucken ist *CONVERT erforderlich, da ja der Unicode in die Ziel-CCSID (CHRID) konvertiert werden muss.

    Um also zur Laufzeit nicht noch andere Probleme zu bekommen (CCSID Kyrillisch ist nicht mit der CCSID der Datenbank kompatibel und beim Lesen/Open gibts CPF-Abbrüche), kann der Job also passend zur DB auf 273 stehen.
    Die CHRID des Spools sollte dann auf Kyrillisch überschrieben werden.

    Durch den Unicode werden die Daten korrekt durchgereicht.

    Dass du im Debugger die kyrillischen Zeichen nicht lesen kannst ist ganz normal.
    Wenn du dir dann aber den Inhalt mit Hex "eval Field:x" ansiehst kannst du den 2-Byte-Code prüfen.
    Hierzu kannst du dir die "Zeichentabelle" aus Windows heranziehen. In der wählst du eine Unicode-Schrift aus (z.B. Arial).
    In der erweiterten Ansicht kannst du den Zeichensatz für Kyrillisch auswählen.
    Beim anclicken eines Zeichens wird dir in der Statuszeile der Hexcode "U+XXXX" angzeigt der mit deinen Zeichen im Programm übereinstimmen sollte.

    Nun kommt es noch auf den Drucker an.
    Ohne Hosttransform kann Fontname nicht funktionieren da der Font als Grafik gesendet wird (wie in Windows).
    Über die CHRID wird eine ESC-Sequenz für die kyrillische Codepage gesendet.
    Das heißt nun schlussendlich, dass der Drucker selber einen residenten Schriftsatz für kyrillisch haben muss!

    Mittels Hosttransform und Fontname kannst du das ja auch mal ausprobieren.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Mar 2005
    Beiträge
    148
    Danke für deine Tipps, aber ich geb auf.
    Das hat keinen Sinn hier.

    Falls irgendwer das am laufen hat und ein Howto postet, guck ichs mir gerne nochmal an.
    Aber nach 1 Woche rumfrickeln hab ich keine Lust mehr auf das Thema.
    Gruß
    Martin

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Vielleicht ist das ja so, dass dein Drucker einfach kein kyrillisch kann.
    Frag mal den Lieferanten.
    Windows-Druck gilt hier nicht, da hier immer grafisch ausgegeben wird (TrueType).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Drucken und Heften
    By Karo in forum NEWSboard Drucker
    Antworten: 14
    Letzter Beitrag: 28-07-09, 14:48
  2. Logos Farbig drucken AFP300
    By bechert in forum NEWSboard Drucker
    Antworten: 3
    Letzter Beitrag: 06-01-07, 10:57
  3. Query's drucken
    By dino in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 03-07-06, 10:44
  4. negative Rückmeldung mit Prüfdaten beim Drucken
    By horni in forum NEWSboard Drucker
    Antworten: 8
    Letzter Beitrag: 29-05-06, 11:32
  5. CA Anzeige drucken
    By Joe in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 27-04-06, 08:50

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •