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

Lazarus Pascal Discussion :

[Windows] Problème d'impression d'image [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 334
    Par défaut [Windows] Problème d'impression d'image
    Bonjour à tous
    Lors de l'impression d'image sous windows , message 'erreur d'impression' alors que lors d'impression de texte pas de problème.
    j'ai les paquets cairocanvas_pkg, printers4lazide, printerlazarus dans l'inspecteur de projet

    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
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, Forms, Controls, Graphics, printers,osprinters,Dialogs, StdCtrls;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
     
      public
     
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Scale: double;
      image1:graphics.Tbitmap;
      RR: TRect;
    begin
      image1:=graphics.Tbitmap.Create;
      image1.LoadFromFile('d:\test.bmp');
      with Printer do
      begin
        BeginDoc;
        try
             scale := Printer.PageWidth / image1.Width;
          RR := Rect(0, 0, trunc(Image1.Width * scale), trunc(Image1.Height * Scale));
      canvas.StretchDraw(RR, Image1);
     
        finally
          EndDoc;
        end;
      end;
    end;
     
    end.

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Bonjour,

    pour les problèmes tordus de ce genre, il est bon de lancer l'exécutable depuis la ligne de commande, on a souvent plus d'informations remontées.

  3. #3
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 334
    Par défaut
    J'ai un message 'erreur impression' en provenance de mon imprimante epson.
    Si le lance l'impression depuis photoshop, aucun problème.
    Le problème vient de lazarus ou de mon code.

    " canvas.Draw(0,0,, Image1)" ne fonctionne pas non plus.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    L'impression ne se fait-elle pas en dehors de la zone imprimable ?
    A moins que le Printer.PageWidth ne renvoie que la largeur imprimable.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Citation Envoyé par sematimo Voir le message
    Le problème vient de lazarus ou de mon code.
    C'est bien pour ça que j'ai suggéré de lancer l'application depuis la ligne de commande (pourquoi faut-il que je me répète ?)

    Citation Envoyé par sematimo Voir le message
    " canvas.Draw(0,0,, Image1)" ne fonctionne pas non plus.
    ne fonctionne pas non plus n'est pas un message d'erreur valide...

  6. #6
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 334
    Par défaut
    dès que je lance l'application même en ligne de commande je n'ai aucun message, mon imprimante me renvoi direct une notification "erreur impression" et plante.
    Mon imprimante étant connectée en wifi, je suis obligé de relancer la connexion.
    Mon image de test fait 944*590 pixels avec une résolution de 96 (25 cm sur15.6 cm) .
    Mon imprimante me renvoie: printer.PageWidth=2892 printer.PageHeight=4125 printer.XDPI=360 printer.YDPI=360
    je suis sous windows 11.

    Lors de l'impression de texte, il n'y a pas de problème
    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
    procedure TForm1.Button_printClick(Sender: TObject);
     
    begin
     
    try
      Printer.BeginDoc;
      Printer.Canvas.Font.Name := 'Arial';
      Printer.Canvas.Font.Size := 12;
      Printer.Canvas.Font.Color := clBlack;
        Printer.Canvas.TextOut(100 , 100,'Ceci est un test d''impression');
     
    finally
      Printer.EndDoc;
    end;
    end;

  7. #7
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Citation Envoyé par sematimo Voir le message
    dès que je lance l'application même en ligne de commande je n'ai aucun message, mon imprimante me renvoie direct une notification "erreur impression" et plante.
    Ça alors ! Tu es bien le premier à qui ça arrive.
    Tu peux encore aller fouiller dans les messages d'erreur de l'ordi (Clic droit sur Poste de travail ou Ce PC ou comment ça s'appelle aujourd'hui et choisir Gérer et fouiner dans les journaux), sinon, la solution doit surement être quelque part là-dedans : https://wiki.lazarus.freepascal.org/Using_the_printer

  8. #8
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Si elle n'est pas top-secret, tu devrais poster l'image et le code que tu utilises, parce que là, quand même, c'est fort ce que tu racontes !

    Et je repose la question de Tourlourou d'une autre manière : ça ne le fait qu'avec un seul fichier ou avec plusieurs ?

    Et si plusieurs, est-ce qu'il y en a qui passent bien ? Si oui, c'est quoi la différence avec ceux qui ne passent pas ? Taille ? Résolution ? Autre ?

  9. #9
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 334
    Par défaut
    J'ai essayé avec plusieurs images et toujours le même problème.
    Mon code et les images de test dans le zip
    test print image .zip

  10. #10
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 642
    Par défaut
    Bonjour,

    Si le problème se produit avec d'autres applications développées en Lazarus, c'est ce dernier ou, plus vraisemblablement, l'une des bibliothèques (paquets) qui est en défaut. Utiliser des alternatives... si elles existent.

    Est-ce que le problème se produit avec d'autres imprimantes ?

    Salutations

  11. #11
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 642
    Par défaut
    Bonjour,

    Indépendamment du problème rencontré, le code ne fonctionne correctement que pour une image en format paysage car le calcul de Scale ne s'appuie que sur la largeur.

    Le rectangle peut être plus grand que la page d'une unité : 0 à PageWidth fait PageWidth + 1 si la division tombe juste.

    Ajout : testé sur une imprimante laser sans problème hormis des chemins en absolu que j'ai du corriger.

    Salutations

  12. #12
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par sematimo Voir le message
    J'ai essayé avec plusieurs images et toujours le même problème.
    Mon code et les images de test dans le zip
    test print image .zip
    Bonjour,
    Je travaille sous Windows 10, Lazarus 2.2.6 et j'ai une imprimante EPSON XP-760.

    J'ai téléchargé ton fichier zip, dézippé, compilé et exécuté : d'entrée de jeux, il me dit que le répertoire C:\ ... serge ... n'existe pas alors qu'il n'y est même pas fait mention dans ton code.

    J'ai alors supprimé tous les fichiers sauf :

    project1.lpi, project1.lpr, unit1.pas, unit1.lfm et le dossier "release.

    J'ai recompilé le tout, lancé le programme, appuyé sur le bouton et l'image1 s'est imprimée sans problème.

    Essaie d'en faire autant ..

    Cordialement.

    Pierre.

  13. #13
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 231
    Par défaut
    Hello,
    quand on a un problème il est très important de préciser sa configuration ( O.S, version de l'O.S, version de Lazarus, si possible versions des paquets utilisés (ceux où il y a un problème). Cela peut faire gagner pas mal de temps plutôt (pas le chien) que de tourner en rond.
    Ami calmant, J.P (sans T)

  14. #14
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Quant à moi, étant sous Linux, je ne vais pas être d'une grande aide concernant les impressions, j'ai cependant tenté une manip, histoire de voir ce que donnent tes calculs.

    J'ai donc fait ça, qui n'est probablement pas exact :
    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
    ...
    //image1.LoadFromFile('images\image2.bmp');
      image1.LoadFromFile(Application.Location + 'images/image2.bmp');
      with Printer do begin
        BeginDoc;
        try
          scale := Printer.PageWidth / image1.Width;
          showmessage(inttostr(Printer.PageWidth)); // 2479
          showmessage(inttostr(image1.Width)); // 811
          showmessage(inttostr(round(scale))); // 3
          RR := Rect(0, 0, trunc(image1.Width * scale), trunc(image1.Height * Scale));
          showmessage(inttostr(RR.Left) + ' ' + inttostr(RR.Top) + ' ' + inttostr(RR.Width) + ' ' + inttostr(RR.Height));
          // --> 0 0 2479 1965
          canvas.StretchDraw(RR, Image1);
          showmessage(inttostr(RR.Left) + ' ' + inttostr(RR.Top) + ' ' + inttostr(RR.Width) + ' ' + inttostr(RR.Height));
          // --> 0 0 2479 1965
        finally
          EndDoc;
        end;
      end;
      ...
    Les valeurs 2479 et 1965 donnent une image de 82,8 x 65,7 cm.

    Allez, je repasse la main aux copains sous Windows.

  15. #15
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 334
    Par défaut
    Je suis parti d'un nouveau projet, réécrit le même code et toujours le même problème.

  16. #16
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 334
    Par défaut
    Bon finalement j'ai trouvé. Le problème vient de ma version de windows 11 professionnelle 23H2.
    En effet j'ai testé le même code sous windows 10 et windows 8 et là pas de problème, l'impression se fait correctement.
    Se que je ne comprend pas sous windows 11, avec gimp ou photoshop mes image sont imprimées sans problème.
    Merci à tous.

  17. #17
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 334
    Par défaut
    à l'origine se code était pour imprimer des captures d'écran, les images étant toutes en paysages.
    ce code fonctionne sur mon pc de bureau en windows 8, mais ne fonctionne toujours pas sur mon portable en windows 11.

  18. #18
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 642
    Par défaut
    Bonjour Sematimo,

    Citation Envoyé par sematimo Voir le message
    ...ce code fonctionne sur mon pc de bureau en windows 8, mais ne fonctionne toujours pas sur mon portable en windows 11.
    Je l'ai testé OK en Windows 11 sur une imprimante laser B&W Brother.

    Salut

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

Discussions similaires

  1. [Batch] Batch Windows et PDFCreator - Impression images email
    Par Tenza06 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 06/03/2014, 13h51
  2. Impression d'image .png
    Par Premium dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 09/10/2006, 16h47
  3. [VS2005][VB.NET] Questions sur l'impression d'images
    Par annedeblois dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/09/2006, 16h10
  4. Réponses: 9
    Dernier message: 01/06/2006, 08h01
  5. Impression d'image bmp
    Par Invité dans le forum Langage
    Réponses: 6
    Dernier message: 18/07/2002, 09h38

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