Как установить размер страницы для документа Xps?

Я пытаюсь сохранить документ XPS с FixedDocument. Пока что мне не удалось изменить размер страницы. Как я могу изменить его на нестандартный размер?

Я основал свой код на первом ответе на этот вопрос, более конкретно, я использую этот код:

        if (File.Exists(filename)) {
            File.Delete(filename);
        }

        var oldParent = LogicalTreeHelper.GetParent(this) as ContentControl;
        try {
            oldParent.Content = null;

            FixedDocument doc = new FixedDocument();

            PageContent pageCnt = new PageContent();
            FixedPage page = new FixedPage();

            page.Children.Add(this);
            try {
                ((System.Windows.Markup.IAddChild)pageCnt).AddChild(page);
                doc.Pages.Add(pageCnt);

                XpsDocument xpsDoc = new XpsDocument(filename, FileAccess.ReadWrite);
                try {
                    var writer = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
                    writer.Write(doc);
                }
                finally {
                    xpsDoc.Close();
                }
            }
            finally {
                page.Children.Clear();
            }
        }
        finally {
            ((ContentControl)oldParent).Content = this;
        }

Он копирует пользовательский элемент управления в документ XPS и делает это успешно, но, как я уже сказал, использует размер бумаги по умолчанию.

Я пытался использовать DocumentPaginator.PageSize свойство для установки нового размера страницы (после создания экземпляра FixedDocument), но все, что я назначаю этому свойству, похоже, игнорируется; страница в итоговом документе XPS сохраняет формат бумаги по умолчанию.

Выполняя пошаговое выполнение, я вижу, что значение PageSize свойство действительно изменилось, поэтому новое значение как-то не принимается DocumentPaginator,

Я нашел различные онлайн-ресурсы, ни один из которых еще не решил мою проблему:

  • Этот форум на MS Social утверждает, что установка PageSize собственность работает, но это не так, как я могу сказать.
  • Документы утверждают, что установка PageSize свойство работает и привести пример, который делает то же самое, что я пытался. (Кроме этого, основываясь на этой странице документов, я даже не могу сказать, какую единицу чисел использовать.)
  • Документы также указывают на DocumentPage.Size собственность, однако эта собственность не может быть публично изменена. Действительно ли мне нужно переопределить некоторый класс страницы перед добавлением страницы в документ, чтобы получить другой размер страницы?
  • Эта публикация на форуме описывает ту же проблему, но ответ кажется мне бессмысленным. Я использую DocumentPaginator свойство только когда-либо один раз, так что нет "вызова (...).DocumentPaginator снова", для которого я мог бы сохранить экземпляр.
  • Этот вопрос звучит многообещающе, но на самом деле речь идет не о размере страницы, а о масштабе изображения на данной странице.
  • Помимо вышеупомянутого PageSize свойство (которое в любом случае здесь установлено равным размеру по умолчанию), этот учебник использует Width а также Height свойства FixedPage, Однако присвоение им некоторых положительных случайных значений для быстрого теста может привести к повреждению моего документа XPS и отображению сообщения об ошибке при открытии XPS Viewer.

2 ответа

FixedDocuments имеют фиксированные страницы. Высота и ширина FixedPage можно контролировать. Примерно так:

        FixedPage pageOne = new FixedPage();
        pageOne.Height = 20;
        pageOne.Width = 10;

или в XAML:

Высота ="20" Ширина ="10"

Я считаю, что FixedDocument будет печатать только по размеру своих страниц. Даже при загрузке FixedDocument в DocumentViewer изменение размера страницы настроек принтера при нажатии кнопки печати не будет иметь никакого эффекта. FixedDocument по самому своему определению точно сохраняет точность своего содержимого.

Единственный способ изменить его - создать производный DocumentPaginator, который вызывает внутренние функции FixedDocument.DocumentPaginator и соответствующим образом изменяет возвращаемые значения.

Другие вопросы по тегам