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:
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é:cry:).
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.
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 :
Citation:
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:
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:
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();
}
} |