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

Windows Presentation Foundation Discussion :

WPF : Imprimer un document XPS


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 53
    Points : 71
    Points
    71
    Par défaut WPF : Imprimer un document XPS
    Bonjour à tous,
    Mon problème c'est que je n'arrive pas à enregistrer un document xps au format A4 pour l'imprimer.

    J'ai un grid qui contient un ensemble d'information prêtes à imprimer, je clique sur un bouton et j'appelle la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private void VisualToXps(string fileName, Grid gridOfMyData)
            {
                 package = Package.Open(fileName, FileMode.Create);
     
     
                XpsDocument doc = new XpsDocument(package);
                XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(doc);
     
                writer.Write(gridOfMyData);
                doc.Close();
                package.Close();
     
            }
    La fonction enregistre bien le fichier (en .xps) sur mon bureau, mais je n'ai pas un document A4 (le doc est très mal imprimé).
    J'ai dû louper quelque chose dans la méthode Write() à laquelle j'ai passé un Grid (du coup la taille du document est celle du grid !), je n'arrive pas à faire autrement (avec les FixedDocuement ou PageMediaSize ou autres ...), je ne comprends pas trop et la documentation de Microsoft n'en parle pas assez !!!
    Merci de bien vouloir m'aider s'il vous plait.
    Très cordialement.

  2. #2
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Hello,

    Je ne sais pas personnellement comment cela fonctionne mais le "sams teach yourself" consacré à WPF en parle avec profusion et je pense que tu y trouvera ton bonheur.

    Bon courage,
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 53
    Points : 71
    Points
    71
    Par défaut
    Merci pour la réponse, mais je ne connaissais pas le "sams teach yourself" !
    Je viens de faire une recherche, il parait qu'il s'agit d'une formation intensifiée, le bémol c'est qu'elle est payante....
    je galère toujours, si quelqu'un peut me solutionner prière d'intervenir.... au secours....
    D'avance merci.

  4. #4
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Blop,

    Tu trouveras ton bonheur la : http://stackoverflow.com/q/2493244

    Bon courage,
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 53
    Points : 71
    Points
    71
    Par défaut L'élément spécifié est déjà l'enfant logique d'un autre élément. Déconnectez-le d'abord
    Merci bien pour la solution Jimix90, bravo.

    J'ai une autre exception d'un autre type :
    L'élément spécifié est déjà l'enfant logique d'un autre élément. Déconnectez-le d'abord.
    Elle se produit à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FixedDocument doc = ReturnFixedDoc();
    du code que tu m'as passé dans le dernier message.
    Je ne sais pas si tu l'as déjà rencontré auparavant.

    Merci quand même pour tout...
    cordialement

    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
     //méthode qui retourne l'élément (le grid) à sauvegarder en xps
            public FixedDocument ReturnFixedDoc()
            {
                FixedDocument fixedDoc = new FixedDocument();
                PageContent pageContent = new PageContent();
                FixedPage fixedPage = new FixedPage();
     
                var ctrl = this.Grid1;//Grid1 est le tableau à sauvegarder
     
                fixedPage.Width = 11.69 * 96;
                fixedPage.Height = 8.27 * 96;
                //Create first page of document
                fixedPage.Children.Add(ctrl);
                ((System.Windows.Markup.IAddChild)pageContent).AddChild(fixedPage);
                fixedDoc.Pages.Add(pageContent);
                //Create any other required pages here
     
                return fixedDoc;
            }
            //méthode qui sauvegarder le fichier xps (avec une 
            public void SaveCurrentDocument()
            {
                // Configure save file dialog box
                Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
                dlg.FileName = "MyReport"; // Default file name
                dlg.DefaultExt = ".xps"; // Default file extension
                dlg.Filter = "XPS Documents (.xps)|*.xps"; // Filter files by extension
     
                // Show save file dialog box
                Nullable<bool> result = dlg.ShowDialog();
     
                // Process save file dialog box results
                if (result == true)
                {
                    // Save document
                    string filename = dlg.FileName;
     
                    FixedDocument doc = ReturnFixedDoc(); // C'est ici que l'exception se déclenche
                    XpsDocument xpsd = new XpsDocument(filename, FileAccess.Write);
                    System.Windows.Xps.XpsDocumentWriter xw = XpsDocument.CreateXpsDocumentWriter(xpsd);
                    xw.Write(doc);
                    xpsd.Close();
                }
            }

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 208
    Points : 136
    Points
    136
    Par défaut
    je pense que ton erreur est là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fixedPage.Children.Add(ctrl);
    tu dois déconnecter le parent de ctrl avant de l'ajouter ou alors tu en fais un clone

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Points : 73
    Points
    73
    Par défaut
    Ton objet 'Grid1' est déjà enfant d'un objet dans ton interface graphique. Il faut que tu le détache de cet élément, ensuite tu pourras l'attacher à ta page.

    Par exemple (pour un composant parent de type Border, qui n'accepte qu'un enfant) :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    leParentDeGrid1.Child = null;

    Au lieu de Child, ca peut être Content ou Children.Remove(Grid1)...

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 53
    Points : 71
    Points
    71
    Par défaut
    Merci pour la réponse, j'ai fait autrement, j'ai instancié le UserControl qui contient le Grid par du code, j'ai initialiser les champs que je voulais imprimer avec leurs valeurs appropriées, et puis je l'ai appelé dans ma fonction (désormais il n'a pas d'élément parent), et tout marche nickel.

    L'inconvénient de mettre à nul l'élément parent, comme tu l'as indiqué dans la réponse est qu'on en a besoin dans l'interface graphique, mais je ne sais pas ce que ça pourrais donner .... à tester peur être....

    En tout cas mon problème est résolu, je vous remercie infiniment pour vos interventions.

    Cordialement.

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

Discussions similaires

  1. Fonction ASP pour imprimer un document
    Par leclone dans le forum ASP
    Réponses: 5
    Dernier message: 17/10/2007, 14h10
  2. Réponses: 6
    Dernier message: 06/04/2006, 10h43
  3. [C#][1.1] Imprimer des documents RTF
    Par SmokE dans le forum ASP.NET
    Réponses: 5
    Dernier message: 26/12/2005, 09h47
  4. Imprimer un document publisher sous access
    Par alkmehd dans le forum Access
    Réponses: 2
    Dernier message: 22/09/2005, 12h25
  5. [stratégie][débutant]Comment imprimer un document ?
    Par Kcirtap dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 06/07/2005, 11h12

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