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

C# Discussion :

Aperçu et impression d'un fichier PDF


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Architecte système
    Inscrit en
    Avril 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte système

    Informations forums :
    Inscription : Avril 2010
    Messages : 28
    Par défaut Aperçu et impression d'un fichier PDF
    Bonjour,

    Je rencontre un problème avec la création d'un aperçu avant impression d'un fichier au format PDF que je crée dans mon programme.

    Je récupère un logo (présents dans les ressources du projet) uniquement pour le PDF, ajoute une entête et affiche un tableau contenant des résultats de calculs précédemment effectués pour obtenir un fichier PDF (via ItextSharp), XLSX ou CSV (via Excel).

    Le problème se situe au niveau de la création d'un aperçu avant impression, ItextSharp ne permettant pas de convertir directement le fichier PDF qu'il crée en image pour pouvoir l'afficher par exemple dans un PrintPreviewControl présent sur un de mes Forms.

    Au cours de ma recherche de solution, je suis tombé sur ce topic

    qui m'a dirigé vers ce site
    En utilisant la librairie GhostScript, cela serait donc possible de convertir ce fichier PDF en image. Seul problème, je n'ai pas pu essayer puisque Visual Studio 2008 refuse d'ajouter une référence vers GhostScript. Voici l'erreur qu'il m'affiche :

    Une référence à 'C:\Program Files\gs\gs8.64\bin\gsdll32.dll' n'a pas pu être ajoutée. Assurez-vous que ce fichier est accessible et qu'il s'agit d'un assembly ou d'un composant COM valide
    J'ai essayer avec d'autres version que la 8.64 conseillée mais le résultat était le même. J'ai manqué quelque chose?

    Ensuite en continuant mes recherches, je suis tombé sur un autre topic

    où la création du fichier PDF serait faite à partir d'un Flow Document imprimé dans un imprimante PDF. Étant donné que je n'y connais rien en Flow Document, je suis allé sur MSDN chercher des renseignements

    sauf que même si le principe me semble assez intéressant, je n'ai pas réussis à essayer l'exemple proposé puisque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    using System.Windows.Controls;
    using System.Windows.Documents;
    entrainent l'erreur

    Le type ou le nom d'espace de noms 'Controls' n'existe pas dans l'espace de noms 'System.Windows' (une référence d'assembly est-elle manquante*?)
    pour "Controls" et "Documents" et je n'ai pas trouvé pourquoi.

    Je précise que je travail sous .NET Frameworks 3.5 SP1. Que je sélectionne le .NET Framework 4 ou .NET Framework 3.5, le code exemple de MSDN reste le même donc je ne pense pas que ça puisse venir de là.
    (Il y a d'ailleurs une erreur dans la représentation du 1er exemple de code en langue française, les 2 textes étant en gras alors que seul le premier devrait l'être).

    Depuis ce matin que je tourne la dessus et impossible de voir le/les problèmes, une idée?

    Merci d'avance

  2. #2
    Membre très actif Avatar de oussi
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 192
    Par défaut
    Si j'étais à ta place je ne me casserai pas la tête pour ça.

    Tu peux utiliser Crystal report (natif avec VS2008) sur lequel tu peut mettre ton image et ton tableau et charger des données à partir d'une base de données ...etc (renseigne-toi) et qui permet en plus d'exporter le rapport vers plusieurs format dont PDF et doc...

    @++ et bonne chance

  3. #3
    Membre averti
    Homme Profil pro
    Architecte système
    Inscrit en
    Avril 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte système

    Informations forums :
    Inscription : Avril 2010
    Messages : 28
    Par défaut
    Il n'y a pas de moyen de résoudre l'une des méthodes précédentes plutôt que de se lancer dans du Crystal Report ? Surtout que ça m'a l'air légèrement complexe pour juste effectuer un aperçu et une impression

    Finalement j'ai réussis à intégrer la dll de GhostScript (juste en redémarrant VS...) dans le projet pour qu'elle soit copiée dans le répertoire contenant l'exécutable histoire de ne pas avoir à aller la télécharger à chaque lancement.

    Du coup ça fonctionne sauf que la qualité des images est plutôt mauvaise, en dehors du TIFF (qui n'est géré qu'en noir et blanc) le reste rend les tableaux et les valeurs baveuses. En revanche, même avec ça je n'arrive pas à utiliser cette image pour crée un aperçu, j'ai lu qu'il fallait un BMP pour l'utiliser dans un printPreviewControl / printPreviewDialog mais ça ne m'avance pas pour autant sur la manière de lui envoyer l'image.


    Concernant l'impression de PDF, j'ai testé ça

    mais impossible de trouver la clé registre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regedit = RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive.ClassesRoot, "").OpenSubKey(value + @"\shell\printto\command");
    dans HKEY_CLASSES_ROOT\.pdf il n'y a aucun shell, juste un ShellEx mais "vide"

    Décidément je ne suis pas vraiment l'ami du PDF

  4. #4
    Membre très actif Avatar de oussi
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 192
    Par défaut
    Pour ma part j'ai jamais travailler avec ItextSharp et j'ai vraiment pas le temps en ce moment pour me documenter sur ce composant donc je peux rien te dire la dessus.

    Et pour la complexité de Crystal Report ta tord c'est pas vraiment compliqué et son intégration avec .NET est bien faites à mon avis. Et pour ton ça sera vraiment très simple à mettre en place.

    Renseigne toi auprès de notre cher Google.

  5. #5
    Membre averti
    Homme Profil pro
    Architecte système
    Inscrit en
    Avril 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte système

    Informations forums :
    Inscription : Avril 2010
    Messages : 28
    Par défaut
    J'ai commencé à jeter un oeil à Crystal Report, je verrais bien si ça me convient.

    En attendant, j'ai gardé une méthode plus simple, j'envoie le PDF vers le lecteur de PDF par défaut après avoir vérifié que le fichier est bien présent (au cas ou).

    Ça joue office d'aperçu avant impression et l'utilisateur n'aura plus qu'à l'imprimer depuis ce même lecteur s'il le désire. Après, un ordinateur sans lecteur PDF ça reste très rare (quoique ça s'est déjà vu ... ) donc un petit try/catch et c'est tout bon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try
    {
        if(System.IO.File.Exists("Resultat.pdf"))System.Diagnostics.Process.Start("Resulta.pdf");
        else MessageBox.Show("Une erreur est survenu lors de l'ouverture du fichier", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    catch
    {
        MessageBox.Show("Impossible de trouver un lecteur de fichier PDF sur votre ordinateur, veuillez en installer un", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }

  6. #6
    Membre très actif Avatar de oussi
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 192
    Par défaut
    un ordinateur sans lecteur PDF ça reste très rare
    Mais ça reste possible.
    Et d’ailleurs l'ouverture de Adobe reader te consommera plus de ressources que celle de Crystal Report qui sera, lui, intégré dans ton application.

    Une question : Est ce que tu récupère tes résultat depuis une BDD ou c'est juste un calcul que tu effectue au sein de l'application?
    Dans les 2 cas poste le code avec lequel tu fait le calcul.

Discussions similaires

  1. Impression d'un fichier PDF sur une imprimante de mon choix
    Par juhel philippe dans le forum Documents
    Réponses: 2
    Dernier message: 04/11/2008, 18h10
  2. Impression dans un fichier PDF
    Par Souleyre dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 08/05/2008, 23h06
  3. impression d'un fichier pdf
    Par vince2005 dans le forum Langage
    Réponses: 3
    Dernier message: 26/09/2007, 00h16
  4. Impression d'un fichier PDF
    Par Orionmel dans le forum VB.NET
    Réponses: 3
    Dernier message: 28/04/2007, 22h51
  5. impression d'un fichier PDF
    Par rogger dans le forum Access
    Réponses: 6
    Dernier message: 01/01/2006, 17h31

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