2010-03-22 6 views
12

J'essaie de générer un document XPS à partir d'un contrôle WPF. Impression fonctionne jusqu'à présent, mais je ne peux pas trouver un moyen de créer le XPS en mode paysage.WPF vers XPS en orientation paysage

Mon code pour créer le fichier XPS, la plupart du temps pris d'une autre SO Page

public FixedDocument ReturnFixedDoc() 
    { 
     FixedDocument fixedDoc = new FixedDocument(); 
     PageContent pageContent = new PageContent(); 
     FixedPage fixedPage = new FixedPage(); 

     var ctrl = new controlToPrint(); 

     //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; 
    } 


    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(); 
      XpsDocument xpsd = new XpsDocument(filename, FileAccess.Write); 
      System.Windows.Xps.XpsDocumentWriter xw = XpsDocument.CreateXpsDocumentWriter(xpsd); 
      xw.Write(doc); 
      xpsd.Close(); 
     } 
    } 

Toute aide est appréciée.

Répondre

12

Définissez la taille de votre FixedPage dans ReturnFixedDoc:

// hard coded for A4 
fixedPage.Width = 11.69 * 96; 
fixedPage.Height = 8.27 * 96; 

Les chiffres sont sous la forme (pouces) x (points par pouce). 96 est le DPI de WPF. J'ai utilisé les dimensions d'une page A4.

+0

Merci, cela semble faire l'affaire. J'utilisais "new RotateTransform (90)" pour faire tourner le contrôle mais le redimensionnement de la page aux bonnes dimensions est meilleur :-) – Felix

Questions connexes