2010-03-22 13 views
12

sto provando a generare un documento XPS da un controllo WPF. La stampa funziona finora, ma non riesco a trovare un modo per creare l'XPS in modalità orizzontale.Da WPF a XPS con orientamento orizzontale

Il mio codice per creare il file XPS, per lo più preso da un altro SO pagina

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

Ogni aiuto è apprezzato.

risposta

12

impostare la dimensione del vostro FixedPage in ReturnFixedDoc Prova:

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

I numeri sono in forma (pollici) x (punti per pollice). 96 è il DPI di WPF. Ho usato le dimensioni di una pagina A4.

+0

Grazie, questo sembra fare il trucco. Stavo usando "new RotateTransform (90)" per ruotare il controllo ma il ridimensionamento della pagina alle dimensioni corrette è migliore :-) – Felix