Как сериализовать несколько элементов xaml в один файл xps и распечатать приложение WPF c # - PullRequest
0 голосов
/ 20 сентября 2018

Прошло очень очень много времени, и мы не могли найти решение.

Мое приложение содержит десять панелей стека с форматированным текстом.Каждая панель стека имеет высоту 800 и ширину 500. (Представьте себе десять страниц с текстом в приложении WordPad).Моя главная цель - напечатать содержимое панели стека.Каждое содержимое панели стека должно отображаться точно на печатной странице.Существует десять панелей стека, поэтому итоговый печатный документ также должен содержать десять страниц.

До сих пор я мог сериализовать любую панель стека в файл xps и распечатать ее.

Примечание. Одно из названий панели стека - 'spanel0'

Мой код:

private void PrintDocument() {
            PrintDialog pd = new PrintDialog();
            FrameworkElement fe = (spanel0 as FrameworkElement);
            fe.Measure(new Size(Int32.MaxValue, Int32.MaxValue));
            Size visualSize = fe.DesiredSize;
            fe.Arrange(new Rect(new Point(0, 0), visualSize));
            MemoryStream stream = new MemoryStream();
            string pack = "pack://temp.xps";
            Uri uri = new Uri(pack);
            DocumentPaginator paginator;
            XpsDocument xpsDoc;

            using (Package container = Package.Open(stream, FileMode.Create))
            {
                PackageStore.AddPackage(uri, container);
                using (xpsDoc = new XpsDocument(container, CompressionOption.Fast, pack))
                {
                    XpsSerializationManager rsm =
                      new XpsSerializationManager(new XpsPackagingPolicy(xpsDoc), false);
                    rsm.SaveAsXaml(spanel0);
                    paginator = ((IDocumentPaginatorSource)
                      xpsDoc.GetFixedDocumentSequence()).DocumentPaginator;
                    paginator.PageSize = visualSize;

                }
                PackageStore.RemovePackage(uri);
            }
        }

В чем проблема?

Я хочу сериализовать все панели стека в xps, чтобы при печати документа xps я получал PDF-файл на десять страниц.С помощью приведенного выше кода я смог бы сериализовать любую из стековых панелей в xps и получить с нее печать.

Надеюсь, вы поняли мою проблему.Пожалуйста, ведите меня.Заранее спасибо.

Примечание: мои остальные панели стека - spanel1, spanel2, spanel3, spanel4, spanel5 и т. Д.

1 Ответ

0 голосов
/ 22 сентября 2018

Наконец много копаний позже нашли решение.

В приложении WPF мы можем сериализовать несколько элементов xaml по отдельности.Все сериализованные элементы xaml будут в формате .xps.Затем мы можем собрать обратно все файлы .xps и сформировать один файл .xps.Таким образом, мы можем сериализовать несколько элементов xaml.Благодарю.

...