Faktycznie po aprowizacji z stert różnych próbek, z których wszystkie są bardzo zawiłe i wymagają użycia dokumentu Writers, kontenerów, kolejek wydruku oraz Bilety druk, znalazłem artykuł Eric Zlewy o Printing in WPF
Kod uproszczony jest zaledwie 10 wierszy długie
public void CreateMyWPFControlReport(MyWPFControlDataSource usefulData)
{
//Set up the WPF Control to be printed
MyWPFControl controlToPrint;
controlToPrint = new MyWPFControl();
controlToPrint.DataContext = usefulData;
FixedDocument fixedDoc = new FixedDocument();
PageContent pageContent = new PageContent();
FixedPage fixedPage = new FixedPage();
//Create first page of document
fixedPage.Children.Add(controlToPrint);
((System.Windows.Markup.IAddChild)pageContent).AddChild(fixedPage);
fixedDoc.Pages.Add(pageContent);
//Create any other required pages here
//View the document
documentViewer1.Document = fixedDoc;
}
Moja próbka jest dość proste, to nie obejmuje stronę doborze i orientacji, która zawiera całe inny zestaw problemów, które nie pracują, jak można by oczekiwać. Nie zawiera też żadnych funkcji składowania, ponieważ MS zapomniało włączyć przycisk Zapisz w przeglądarce dokumentów.
Zapisz Funkcjonalność jest stosunkowo proste (i jest również z Eric Zlewozmywak artykułu)
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 = (FixedDocument)documentViewer1.Document;
XpsDocument xpsd = new XpsDocument(filename, FileAccess.ReadWrite);
System.Windows.Xps.XpsDocumentWriter xw = XpsDocument.CreateXpsDocumentWriter(xpsd);
xw.Write(doc);
xpsd.Close();
}
}
Więc odpowiedź brzmi: tak, można wziąć istniejącego WPF (XAML) sterowania, DataBind go i przekształcić go w XPS dokument - i nie jest to wcale takie trudne.
[http://msdn.microsoft.com/en-us/library/system.windows.xps.visualstoxpsdocument.aspx](http://msdn.microsoft.com/en-us/library/system.windows .xps.visualstoxpsdocument.aspx) –