Ориентация макета по умолчанию при печати XPSs с использованием WPF XPS Viewer
-
21-08-2019 - |
Вопрос
Есть ли способ установить ориентацию макета по умолчанию при печати XPSs с помощью WPF XPS Viewer?
В моем фиксированном документе XPS ориентация страницы установлена на альбомную, размер носителя страницы имеет ширину, которая больше его высоты, и он корректно отображается в программе просмотра как альбомный.Просто, когда вы нажимаете кнопку печати, в настройках диалогового окна печати по умолчанию используется значение Портрет, и оно печатается как таковое.
Я бы предпочел, чтобы мне не приходилось изменять настройки печати пользователей по умолчанию, я бы предпочел, чтобы XPS Viewer печатал XPS так, как он был разработан для печати.
Решение
Заполните поле распечатанного билета:
PrintDialog pd = new PrintDialog();
PrintTicket pt = new PrintTicket();
pt.PageOrientation = PageOrientation.Landscape;
pd.PrintTicket = pd.PrintQueue.MergeAndValidatePrintTicket(pd.PrintQueue.DefaultPrintTicket, pt).ValidatedPrintTicket;
if (pd.ShowDialog() == true)
{
...
}
Другие советы
Я считаю, что правильный способ сделать это при создании FixedDocument - установить RenderTransform = RotateTransform(90) для содержимого страницы, когда размеры больше, чем они имеют ширину.Пример:
var visualContent = new Image
{
Source = image,
Stretch = Stretch.Uniform
};
visualContent.RenderTransformOrigin = new Point(0.5, 0.5);
visualContent.RenderTransform = new RotateTransform(90);
FixedPage fixedPage = new FixedPage();
fixedPage.Children.Add(visualContent);
var pageContent = new PageContent
{
Child = fixedPage
};
Однако не уверен, поможет ли это с уже существующим документом XPS.
На самом деле это проблема не с MXDW, а с тем, как драйверы работают в Windows.Выбранные пользователем параметры сохраняются для конкретного сеанса.Это означает, что вы можете повторно использовать настройки firs-print при печати между первым отпечатком и выходом из приложения.Большинство принтеров ведут себя подобным образом до тех пор, пока кто-то не придумает способ сохранить эту информацию где-нибудь и позволить пользователю повторно использовать ее в разных сеансах.
Итак, я попытался взломать файл GPD (где обычно хранится информация о печати для принтера).Ориентация имеет два возможных значения:PORTRAIT и LANDSCAPE_CC270 с установленным по умолчанию значением PORTRAIT.Смотрите ниже:
*%****************************************************************************** *% Ориентация *%****************************************************************************** *Характеристика:Ориентация { *rcNameID:=ОРИЕНТАЦИЯ_DISPLAY *Опция по умолчанию:ПОРТРЕТ
*Option: PORTRAIT
{
*rcNameID: =PORTRAIT_DISPLAY
}
*Option: LANDSCAPE_CC270
{
*rcNameID: =LANDSCAPE_DISPLAY
}
}
Теперь, если бы я изменил значение по умолчанию на LANDSCAPE_CC270, настройки печати перестали бы отображаться (и любая печать завершилась бы неудачей).На самом деле, похоже, что при указании любого другого значения значение по умолчанию остается равным PORTRAIT.Определенно, MS выполняет какую-то проверку, чтобы помешать нам взломать этот драйвер.Похоже, MS не делает хочет, чтобы кто-нибудь вмешивался в его настройки: (
Но вы могли бы попробовать еще немного пофлиртовать со значениями GPD и посмотреть, появится ли что-то по вашему вкусу.Буду продолжать взламывать еще немного.
Предостережение:Файлы GPD не следует подделывать, если вы не знаете, что делаете.Если вы все еще хотите продолжить, сделайте резервную копию!
Подсказка:Они хранятся в %WINDOWS%system32\spool\drivers\w32x86\3
папка.