Konwertuj kontrolę WPF (XAML) na dokument XPS
Czy mogę pobrać istniejącą kontrolę WPF (XAML), zmodyfikować ją i przekształcić w dokument XPS, który można wyświetlić i wydrukować za pomocą przeglądarki dokumentów WPF XPS? Jeśli tak, to w jaki sposób? Jeśli nie, jak powinienem robić "raportowanie" w WPF za pomocą XPS / PDF / etc?
Zasadniczo chcę wziąć istniejącą kontrolę WPF, zmodyfikować ją, aby uzyskać do niej przydatne dane, a następnie uczynić ją drukowaną i możliwą do zapisania dla użytkownika końcowego. Najlepiej, aby tworzenie dokumentu odbywało się w pamięci i nie trafiało na dysk, chyba że użytkownik specjalnie zapisał dokument. Czy to możliwe?
1 answers
Właściwie po grzebaniu w stosach różnych próbek, z których wszystkie są niesamowicie zawiłe i wymagają użycia pisarzy dokumentów, kontenerów, kolejek drukowania i biletów drukowania, znalazłem artykuł Erica Sinksa o drukowaniu w WPF
Kod uproszczony ma tylko 10 linii
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ść uproszczona, nie zawiera rozmiaru i orientacji strony, która zawiera zupełnie inny zestaw problemów, które nie działają tak, jak można się spodziewać. Ani nie zawierać wszelkie funkcje zapisu, ponieważ MS zdaje się zapomnieć włączyć przycisk Zapisz w przeglądarce dokumentów.
Funkcjonalność zapisu jest stosunkowo prosta (i jest również z artykułu Erica Sinksa)
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ącą kontrolę WPF (XAML), databind go i przekształcić go w dokument XPS - i to nie jest takie trudne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-03 01:21:52