Forum général.général Prn sous Linux

Posté par  (site web personnel) .
Étiquettes : aucune
0
21
fév.
2005
Bonjour,

je compte coder une application me permettant d'imprimer sur l'imprimante windows de mon taf, car celle-ci ne semble pas aimer les .ps générés par mes drivers linux.

Pour se faire, j'ai demandé a ce qu'un client windows me donne un .ps bidon pour voir les différences avec le mien.

Probleme : sous windows, la fonction "imprimer dans un fichier" ne génère pas un .ps, mais un .prn, qui a priori, n'est pas du tout pareil syntaxiquement qu'un .ps

J'ai beau séléctionner mon imprimante sous linux, il me génère toujours un .ps avec des en-tete adobe (comme pour le pdf quoi..), et je ne sais pas comment obtenir un .prn a peu près similaire a celui obtenu sous windows.

Une petite piste ?

Merci.
  • # Pour info

    Posté par  (site web personnel) . Évalué à 1.

    Bien que les recherches google tendent a me dire qu'un .prn, c'est juste un .ps avec une extension différente, voici ce que j'obtiens, avec un hello world sous oowriter :
    windows :
    @PJL COMMENT OCE *JEC BEGIN^M
    @PJL COMMENT OCE IDENT:^M
    @PJL COMMENT OCE EMULATION PCL5^M
    @PJL COMMENT OCE JOBNAME hello.sxw^M
    @PJL COMMENT OCE USERNAME Administrateur^M
    @PJL COMMENT OCE JOBDATE 19:04:49 21-02-2005^M
    @PJL COMMENT OCE HOSTNAME SEBMOB^M
    @PJL COMMENT OCE JOBTYPE INTERACTIVE^M
    @PJL COMMENT OCE PROCESS:^M
    @PJL COMMENT OCE PRINTQUALITY BITMAPFATTENING 0^M
    @PJL COMMENT OCE BIND LONGEDGE ^M
    @PJL COMMENT OCE COPIES 1^M
    @PJL COMMENT OCE FLAGSHEET AUTOMATIC HEADER^M
    @PJL COMMENT OCE *JEC BODY^M
    ^[E^[*r0F^[&u600D^[%0BINWU0PW0,0PW0,1UL1,60,40UL2,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5UL3,40,25,10,25UL4,35,15,10,15,10,15LT0,10,1LTLA1,4,2,1SP1TD1LO21TR0CF2PP1^[%0A^[&l1X^[&l26A^[&l0o4d1E^[*t600R^[*v1onT^[*l1R^[*pxY^[*c5701.2x8122.8yT^[%0BIP0,0,1016,1016SC0,600,0,600;^[%0A^[*v0n1O^[(s1p0s0b16901t12.00V^[(5T^[*l252O^[*l1R^[*v0T^[*p365x443Y^[&p11XHello world^L^[%-12345X@PJL EOJ NAME="hello.sxw"
    ^[%-12345X


    sous linux (j'ai épuré, c'est plus long, mais on voit bien que c'est radicalement différent) :
    %%EndProlog
    %%BeginSetup
    %
    (Times-Roman-iso1252) cvn (Times-Roman) cvn ISO1252Encoding psp_definefont
    %%DocumentNeededResources: font Times-Roman
    /#copies 1 def
    << /NumCopies null /Policies << /NumCopies 1 >> >> setpagedevice
    %%EndSetup
    %%Page: 1 1
    %%PageBoundingBox: 0 0 595 842
    %%BeginPageSetup
    %
    [{
    %%BeginFeature: *PageSize A4
    <</PageSize[595 842]/ImagingBBox null>>setpagedevice
    %%EndFeature
    } stopped cleartomark
    %%EndPageSetup
    gsave
    [0.24 0 0 -0.24 0 842] concat
    gsave
    237 283 moveto
    0 setgray
    (Times-Roman-iso1252) cvn findfont 50 -50 matrix scale makefont setfont
    <48656C6C6F20776F726C64>
    [35 23 14 13 26 12 36 25 17 14 0]
    xshow
    grestore grestore
    showpage
    %%PageTrailer

    %%Trailer
    %%BoundingBox: 0 0 595 842
    %%Pages: 1
    %%EOF



    Hum, je suis perplexe...
    • [^] # Re: Pour info

      Posté par  . Évalué à 5.

      Salut,

      Les lignes commençant par @PJL sont des commandes de paramétrage envoyées à l'imprimante (résolution, taille de papier, bacs d'entrée/sortie à utiliser, ...). De plus, j'ai l'impression que sous Windows c'est un pilote PCL qui est utilisé et pas un postscript (de nombreuses imprimantes acceptent les deux).

      Tout l'intérêt, sous Linux, d'utiliser un pilote spécifique à l'imprimante est de pouvoir envoyer ces commandes de paramétrage afin d'utiliser les options disponibles (par ailleurs ces commandes avertissent également l'imprimante du langage utilisé : quand j'imprime sur une hP4000 en Postrcript, ma machine envoie, par exemple, la ligne "@PJL ENTER LANGUAGE = POSTSCRIPT").

      Quelques pistes pour essayer de résoudre ton problème sans réinventer la poudre (c'est à dire sans avoir à réécrire un pilote) ;
      Quel serveur d'impression est-ce que tu utilises pour imprimer (lpr, cups, ...) ?
      Qu'est-ce que tu appelles une "imprimante Windows" ? (elle est reliée à une machine Windows ?)
      Quel protocole permet de joindre cette imprimante (lpr, ipp, samba, ...) ?
      Comment as-tu paramétré l'imprimante sur la machine Linux ?

      Espérant avoir pu t'aider ...

      JJD
      • [^] # Re: Pour info

        Posté par  (site web personnel) . Évalué à 3.

        Salut et merci pour ton aide,

        l'imprimante en question est une Oce 3155. En fait, il s'agit d'une imprimante et d'un serveur d'impression Windows ecoutant sur le port 515 (je n'ai pas accés au serveur lui-même, Océ ne nous en donne pas le droit). Les drivers du modele 3165 sont dispos sur linuxprinting.org, donc mon idée etait de les utiliser, et de créé un programme me convertissant mes .ps made_in_linux en .prn made_in_windows, pour ensuite les balancer directement au serveur d'impression.
        Théoriquement l'imprimante est compatible linux avec les bons drivers.
        Dans la pratique, personne n'a jamais réussi.
        Dans mon cups j'ai réglé ca sur lpr, puis sur tous les protocoles possibles et inimaginable, et a chaque fois c'est pareil, ca marche pas !
        J'ai essayé de balancer le fichier via un netcat sur le port 515 du serveur Océ, mais il me coupe la connexion sans rien faire.

        Donc mon idée n'etait pas de recréer un driver (je ne sais pas faire je pense..), mais de créer un convertisseur de ps linux, en ps windows, pour faire croire a cette maudite imprimante que j'imprime depuis un client windows meme si ce n'est pas le cas.

        Voilà, j'espere avoir été un peu plus clair...

        Merci
        • [^] # Re: Pour info

          Posté par  (site web personnel) . Évalué à 3.

          Clair ?

          je sais pas si c'est le problème,

          a mon avis le problème ne vient pas du format de fichier mais plutot du mode de communication que tu utilise
          pour addresser ton serveur d'impression, qui n'est pas un serveur windows mais bien un serveur Unix LPD.

          J'ai déjà eu a faire a ce genre d'engins et la solution est souvent très simple:
          Récupérer le ppd du driver fournit pour windows, l'ajouter aux PPD de cups et
          de configurer le serveur en LPD/LPR Host Printer, lpd://fqdn/nom_file_impression.
          Puis de selectionner le bon fichier PPD dans la liste.

          Après quand il y a des problèmes la solution se trouve regulierement dans
          les log de debug de cupsys.
          • [^] # Re: Pour info

            Posté par  (site web personnel) . Évalué à 0.

            Hum, j'ai essayé la manip, mais avec les PPD linux, pas windows.
            Je veux bien réessayer demain au taf avec les PPD windows.

            Je vous tiens au courant. Merci.
      • [^] # Re: Pour info

        Posté par  (site web personnel) . Évalué à 1.

        Ah et sur le site d'océ, les drivers linux n'existe qu'en ppd (comme sur linuxprinting.org), pas de drivers PCL, donc je ne sais pas comment je vais faire pour générer un fichier .ps ressemblant a celui d'un windows...
        • [^] # Re: Pour info

          Posté par  . Évalué à 3.

          Je crois que quelque chose t'a échappé...
          Le fichier PPD n'est pas directement lié au langage d'impression. En revanche, il contient les instructions pour convertir le document à imprimer vers un format reconnu par l'imprimante en question (par exemple pour mon imprimante perso, une Epson, je trouve dans le fichier ppd la ligne :
          *cupsFilter: "application/vnd.cups-command 33 commandtoepson")

          L' imprimante en question supporte aussi bien le Postcript que le PCL. Sous Linux le plus simple est d'utiliser le Postcript. Normalement, si on ne tient pas à utiliser toutes les options de l'imprimante, en envoyant du postcript 'brut' il ne devrait pas il y avoir de problème. Si tu n'arrives pas à imprimer, je te conseille donc de suivre ce qu'a expliqué Benoit plus haut : tu configures dans cups une nouvelle imprimante en spécifiant une connexion lpd/lpr et en précisant le nom du serveur d'impression et de la queue (URI de périphérique de la forme lpd://adresseIP/queue) comme sous Windows.

          En aucun cas tu n'as besoin de générer un fichier qui "ressemble" à celui de Windows : d'abord tu vas envoyer du Postcript et pas du PCL, ensuite les éventuelles lignes du début (@PJL) seront rajoutés par ton serveur d'impression (cups) en fonction des options sélectionnées, si tu utilises le fichier PPD en provenance de Océ (ce que je te conseille tout de même vivement).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.