2010-03-22 3 views
12

Ich versuche, ein XPS-Dokument von einem WPF-Steuerelement zu generieren. Drucken funktioniert soweit, aber ich finde keine Möglichkeit, das XPS im Querformat zu erstellen.WPF zu XPS im Querformat

Mein Code der XPS-Datei zu erstellen, die meist aus einer anderen SO Seite genommen

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(); 
     } 
    } 

Jede Hilfe sehr geschätzt wird.

Antwort

12

Versuchen Sie die Größe Ihrer FixedPage in ReturnFixedDoc Einstellung:

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

Die Zahlen in der Form sind (Zoll) x (dots per inch). 96 ist die DPI von WPF. Ich habe die Abmessungen einer A4-Seite verwendet.

+0

Danke, das scheint den Trick zu machen. Ich habe "new RotateTransform (90)" verwendet, um das Steuerelement zu drehen, aber die Größe der Seite auf die richtigen Dimensionen zu ändern ist besser :-) – Felix