IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques Perl Discussion :

Impression d'un canvas


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut Impression d'un canvas
    Bonjour,
    Je cherche comment imprimer un canvas, je suis sous Windows 7.

    J'ai trouvé ceci.
    J'ai donc fait quelques essais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #!/usr/bin/perl
    # file canvas_10_print.pl
    use warnings;
    use strict;
    use utf8;
    use Tk;
     
    # open(IMPRIMANTE, "| lpr -Plp1")    || die "Erreur d'exécution de lpr: $!";
    # \\HPC4346BE4025D
    # CN44H7C8BS0602
    # HP Photosmart 5520 series (réseau)
    #open(IMPRIMANTE, "| lpr -PLPT1")    || die "Erreur d'exécution de lpr: $!";
     
    #to change the background color, edit the ps file 
    #  0.000 0.000 0.000 setrgbcolor AdjustColor 
    #  fill 
     
    my $width = 80;
    my $height = 80;
    my $main = MainWindow->new();
    my $canvas = $main->Canvas( -width=>$width, -height=>$height, -background=>"black");
    $canvas->pack( -expand=>1,-fill=>'both');
     
    &create;
     
    $canvas->update;
    $main->update;
     
    $main->Button(
    	-text    => "Save",
    	-command => [sub {
    		$canvas->update;
    		my @capture=();
    		my ($x0,$y0,$x1,$y1)=$canvas->bbox('all');
    		@capture=('-x'=>$x0,'-y'=>$y0,-height=>$y1-$y0,-width=>$x1-$x0);
    		$canvas -> postscript(-colormode=>'color',
    			-file=>$0.'.ps',
    			-rotate=>0,
    			-width=>800,
    			-height=>500,
    			@capture);
    		}
    	] )->pack;
     
    $main->Button(
    	-text    => "Print",
    	-command => [sub {
    		open (PS, "| lpr -PLPT1"); # customize with -Pname e.g. 
    		print PS $canvas;
    		close (PS);
    	}
    	] )->pack;
     
    MainLoop;
     
    sub create{
    	$canvas->createOval(10, 10, 60, 60,-fill=>'green');
    }
    J'ai des soucis d'impression avec lpr en Windows7.

    Existe t-il une autre façon d'imprimer des canvas en Perl ?
    NB : Le canvas en question ne contiendrait que des courbes (tracé de cadrans solaires) et quelques libellés.
    MERCI d'avance !

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Avec ce code mieux indenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    #!/usr/bin/perl
    # file canvas_10_print.pl
    use warnings;
    use strict;
    use utf8;
    use Tk;
     
    # open(IMPRIMANTE, "| lpr -Plp1")    || die "Erreur d'exécution de lpr: $!";
    # \\HPC4346BE4025D
    # CN44H7C8BS0602
    # HP Photosmart 5520 series (réseau)
    #open(IMPRIMANTE, "| lpr -PLPT1")    || die "Erreur d'exécution de lpr: $!";
     
    #to change the background color, edit the ps file
    #  0.000 0.000 0.000 setrgbcolor AdjustColor
    #  fill
     
    my $width  = 80;
    my $height = 80;
    my $main   = MainWindow->new();
    my $canvas = $main->Canvas(
    	-width      => $width,
    	-height     => $height,
    	-background => "black"
    );
    $canvas->pack( -expand => 1, -fill => 'both' );
     
    &create;
     
    $canvas->update;
    $main->update;
     
    $main->Button(
    	-text    => "Save",
    	-command => [
    		sub {
    			$canvas->update;
    			my @capture = ();
    			my ( $x0, $y0, $x1, $y1 ) = $canvas->bbox('all');
    			@capture = ( '-x' => $x0, '-y' => $y0, -height => $y1 - $y0, -width => $x1 - $x0 );
    			$canvas->postscript(
    				-colormode => 'color',
    				-file      => $0 . '.ps',
    				-rotate    => 0,
    				-width     => 800,
    				-height    => 500,
    				@capture
    			);
    		  }
    	]
    )->pack;
     
    $main->Button(
    	-text    => "Print",
    	-command => [
    		sub {
    			open( PS, "| lpr -PLPT1" );    # customize with -Pname e.g.
    			print PS $canvas;
    			close(PS);
    		  }
    	]
    )->pack;
     
    MainLoop;
     
    sub create {
    	$canvas->createOval( 10, 10, 60, 60, -fill => 'green' );
    }
    Voici mon résultat :
    Envoie un travail d'impression vers une imprimante du réseau

    Utilisation*: lpr -S Serveur -P Imprimante [-C Classe] [-J Travail]
    [-o Option] [-x] [-d] nom du fichier

    Options*:
    -S Serveur Nom ou adresse IP de l'hôte fournissant le service lpd
    -P Imprimante Nom de la file d'attente d'impression
    -C Classe Classification du travail pour utilisation sur la page
    de salve
    -J Travail Nom du travail à imprimer sur la page de salve
    -o Option Indique le type de fichier (suppose par défaut que
    c'est un fichier texte)
    Utilisez "-o l" pour les fichiers binaires (par ex*:
    Postscript)
    -x Compatibilité avec SunOS 4.1.x et versions antérieures
    -d Envoyer d'abord le fichier de données
    Il faut voir pour utiliser les bons paramètres.

  3. #3
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour djibril et merci pour ta réponse.
    Désolé pour l'indentation, j'ai fait un copier/coller du net juste pour tester la faisabilité de l'impression...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    E:\_DEV\_Canvas>lpr -help
    Usage: lpr [--help|-help] [-h] [-D] [-d device] [-l] [-P device]
     
    where:
     
      -h        does nothing. Accepted for compatibility.
      -d device spools to the specified device.
      -D        enable debugging output.
      -l        prevent <LF> -> <CR><LF> processing. By default, standalone
                <LF> characters are converted to <CR><LF>.
      -P device spools to the specified device.
      --help    print this message.
      -help     print this message.
     
    Notes:
     
    -d and -P are aliases of each other and perform the same function.
    Device names may take the form of DOS devices (e.g., lpt1:) if the printer
    is connected locally. Network printers can be accessed using the form
    '\\server\printer_name'. Forward slashes can be used as well, e.g.,
    '//server/printer_name'.
     
    The environment variable PRINTER can be used to set the default printer
    device.
    -S n'existe plus
    - J'ai valué une variable PRINTER, pas mieux
    - avec l'option -D debug :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    E:\_DEV\_Canvas>lpr -D -P LPT1 print.bat
    Windows printer name = 'LPT1'
    isWindows9x = 0, isWindows2K_NT4 = 1
    Printer name: 'HP Photosmart 5520 series (r▒seau)', Port name: 'CN44H7C8BS0602'
    Printer name: 'Fax', Port name: 'SHRFAX:'
    lpr: printer error: can't open 'LPT1' for writing: Le nom de l▒imprimante n▒est pas valide.
    - LPT1 est bien reconnu
    - Le nom imprimante est bien reconnu
    ...
    Bref en 2014 c'est toujours une galère pour faire une impression !

    S'il n'y a pas une autre solution en Perl/Kk je continue sur le forum Windows7

    Encore MERCI !

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Perl/Tk te permettra juste d'avoir ton fichier postscript. Pour lancer l'impression, c'est une autre histoire.
    J'essaye de regarder les modules printer sur le cpan, mais .
    Imprimer en ligne de commande sous Windows
    L'idéal, ce serait de pouvoir lancer la fenêtre Windows pour choisir son imprimante, mais comment faire cela en ligne de commande

  5. #5
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Citation Envoyé par djibril Voir le message
    Perl/Tk te permettra juste d'avoir ton fichier postscript. Pour lancer l'impression, c'est une autre histoire.
    J'essaye de regarder les modules printer sur le cpan, mais .
    Imprimer en ligne de commande sous Windows
    L'idéal, ce serait de pouvoir lancer la fenêtre Windows pour choisir son imprimante, mais comment faire cela en ligne de commande
    MERCI djibril !
    ATTENTION ça semble être un pb exclusivement Windows7 !

    Comme d'hab, perso c'est pour meubler le temps, donc n'y consomme pas tout le tien !
    Bien sûr il serait intéressant de pouvoir imprimer un canvas en Win7, si j'ai posé la question sur Tk c'est pour être certain qu'il n'y avait pas d'autres solutions...

    J'ai déjà réalisé le pgm en Borland C++ sur XP il y a une dizaine d'années !!!
    Je n'ai pas envie de me remettre à C++ et j'avais envie de voir ce qu'on pouvait faire sur un canvas Perl/Tk en réalisant quelques variantes du cadran de berger (pyrénéen)...


    [EDIT 17/10 11:05] Résolu

  6. #6
    Membre habitué

    Homme Profil pro
    Statisticien
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Points : 134
    Points
    134
    Par défaut
    Bonjour,

    Pour mon programme kandela, je passe par GhostScript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       my $path_mswin_gs;
        if ($^O eq "MSWin32") {
            my $path="C:\\Program Files\\Ghostgum\\gsview\\gsview64.exe";
            if (-e $path) {$path_mswin_gs=$path;}
            $path="C:\\Program Files (x86)\\Ghostgum\\gsview\\gsview32.exe";
            if (-e $path) {$path_mswin_gs=$path;}
            system("\"$path_mswin_gs\" -p $nameFile");
        }

  7. #7
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    MERCI alainbb pour le supplément d'information.

    Je ne l'ai pas encore fait sur un bouton Tk, main il me semble qu'il doit être nécessaire de passer les paramètres pour que, entre autre, la fenêtre gs ne s'ouvre pas comme ICI

    Je recolle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gswin64 -sDEVICE=mswinpr2 -sOutputFile="%printer%" -dNoCancel -dBATCH -dNOPAUSE canvas_10_print.pl.ps
    [EDIT] Je n'ai pas encore vérifié, je ne suis pas certain que TOUS les paramètres soient nécessaires.
    Trop content que ça fonctionne

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    J'ai testé GhostScript et ça fonctionne bien. Il y a juste la fenêtre gs qui s'ouvre et se ferme une fois l'imprimante choisie. Mais bon, c'est déjà bien.
    Cela fonctionne avec les PDF et les ps.

    alain, l'option -p n'est pas connue chez moi. J'utilise la commande suivante :
    Code dos : Sélectionner tout - Visualiser dans une fenêtre à part
    >"C:\Program Files\gs\gs9.15\bin\gswin64.exe" -sDEVICE="mswinpr2" -dNoCancel -dBATCH -dNOPAUSE "C:\Program Files\gs\gs9.15\examples\chess.ps"


  9. #9
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Citation Envoyé par djibril Voir le message
    Avec GhostScript, on peut imprimer tout type de fichier : PDF, WORD, Excel ?
    @alainbb si tu repasses par ici, tu remarqueras que nous cherchons à imprimer en ligne de commande, donc si tu as une info MERCI d'avance !!!

    La ligne de commande vue des développeurs patentés c'est ringard...
    Du coup on demande à GhostScript de faire ce que devrait faire :
    - Microsoft Office en .xls, .doc, .ppm...
    - Microsoft Paint en .gif, .png, .bmp, .tiff...
    - Adobe Reader en .pdf
    ...

    GhostScript qui est gratuit contrairement à aux produits Microsoft fait déjà les .pdf en plus des .ps
    Mais chut, il ne faut pas le dire, il faut faire l'autruche, sinon il y a risque de se faire ostracisé, mettre à l'index inquisitorial des dieux de l'informatique, risquer le bûcher, l'ordalie...
    Et pour si peu !
    Alors que visiblement, s'accommode si facilement de la médiocrité

    En fouillant, il semble que ce soit possible en Open Office, quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "c:\program files\openoffice.org 3\program\swriter.exe" -p d:\data\document.odt
    Mais je n'ai pas Oo sous Windows

  10. #10
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Ayant OpenOffice et Libre office, je confirme que c'est possible d'imprimer un ODT, ODS... en ligne de commande avec l'option -p. Ils permettent aussi de convertir en PDF.

  11. #11
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Et donc j'imagine qu'il n'est pas possible d'imprimer en ligne de commande un .xls avec l'un ou l'autre ?
    [EDIT 16:30]
    Citation Envoyé par djibril
    avec PDF Creator, image magick tu peux faire des tas de conversion
    Et en convertissant les images en .ps ou .pdf avant de les passer à GhostScript ?
    Ça ferait usine à gaz mais bon...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Impression d'un canvas dans Silverlight
    Par h4miel dans le forum C#
    Réponses: 0
    Dernier message: 11/03/2014, 12h53
  2. Impression de canvas
    Par MiniCesc dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 26/01/2011, 22h07
  3. impression d'un canvas
    Par Leena666 dans le forum Flex
    Réponses: 0
    Dernier message: 22/12/2008, 11h48
  4. Impression de plusieurs éléments d'un Canvas
    Par PhilTheGap dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 06/05/2008, 13h10
  5. Impression du Canvas d'une Form
    Par blondelle dans le forum C++Builder
    Réponses: 7
    Dernier message: 20/01/2008, 20h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo