В настоящее время я пытаюсь распечатать содержимое контейнера контента (он содержит только данные с информацией) и изображение с использованием PrintFixedDocument. Он безошибочно печатает на моей машине (окна 10) с полным качеством изображения, а на другом ПК, который является окном 8, качество одинаковое.PrintFixedDocument wpf print quality - Windows 10/8 vs Windows 7
Однако, когда это делается на ПК с Windows 7, качество изображения становится очень низким, а конечный результат очень размытым. Это проблема, поскольку компьютер не может быть обновлен из Windows 7 по разным причинам, поэтому им интересно, если кто-то еще испытал это, и если это так, то обходной путь? Также может быть проблема с моим GetFixedDocument
методом, хотя я не могу понять, почему это будет работать на обоих выиграть 10 и 8, но не 7.
ПРИМЕЧАНИЕ ЭТО РАБОТАЕТ ОТ УСТАНОВЛЕННОМУ версии приложения на каждом компьютере
тАКЖЕ опробована НА НЕСКОЛЬКИХ ПРИНТЕРОВ НА ВСЕ 3 ОПЕРАЦИОННОЙ СИСТЕМЫ
Любая помощь будет оценили
Xaml:
<StackPanel Margin="-105,146,66,0" Height="900" VerticalAlignment="Top" x:Name="PrintImageContextMenu">
<Image Canvas.ZIndex="0" Source="{Binding Coupon.OverlayImagePath}" Margin="0,-21,-76,108" Stretch="Fill" />
<ContentControl Content="{Binding}" ContentTemplateSelector="{StaticResource DataViewerDataTemplateSelector}" />
</StackPanel>
C#: общественного частичного класса CouponViewerView { общественного CouponViewerView() { InitializeComponent(); }
public void Print()
{
//Executes On Thread
Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (EventHandler)delegate
{
UpdateLayout();
var fixedDoc = PrintHelper.GetFixedDocument(StackPanelToPrint, new PrintDialog());
PrintHelper.ShowPrintPreview(fixedDoc);
}, null, null);
}
private void PrintCurrentForm(object sender, RoutedEventArgs e)
{
Print();
}
C# Выводим помощник код:
public static void ShowPrintPreview(FixedDocument fixedDoc)
{
var wnd = new Window();
var viewer = new DocumentViewer();
viewer.Document = fixedDoc;
wnd.Content = viewer;
wnd.ShowDialog();
}
public static FixedDocument GetFixedDocument(FrameworkElement toPrint, PrintDialog printDialog)
{
var capabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket);
var pageSize = new Size(printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight);
var visibleSize = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);
var fixedDoc = new FixedDocument();
//If the toPrint visual is not displayed on screen we neeed to measure and arrange it
toPrint.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
toPrint.Arrange(new Rect(new Point(0, 0), toPrint.DesiredSize));
//
var size = toPrint.DesiredSize;
//Will assume for simplicity the control fits horizontally on the page
double yOffset = 0;
while (yOffset < size.Height)
{
var vb = new VisualBrush(toPrint)
{
Stretch = Stretch.None,
AlignmentX = AlignmentX.Left,
AlignmentY = AlignmentY.Top,
ViewboxUnits = BrushMappingMode.Absolute,
TileMode = TileMode.None,
Viewbox = new Rect(0, yOffset, visibleSize.Width, visibleSize.Height)
};
var pageContent = new PageContent();
var page = new FixedPage();
((IAddChild)pageContent).AddChild(page);
fixedDoc.Pages.Add(pageContent);
page.Width = pageSize.Width;
page.Height = pageSize.Height;
var canvas = new Canvas();
FixedPage.SetLeft(canvas, capabilities.PageImageableArea.OriginWidth);
FixedPage.SetTop(canvas, capabilities.PageImageableArea.OriginHeight);
canvas.Width = visibleSize.Width;
canvas.Height = visibleSize.Height;
canvas.Background = vb;
page.Children.Add(canvas);
yOffset += visibleSize.Height;
}
return fixedDoc;
}
Просто для хихиканья, хотя я уверен, что вы, вероятно, уже проверили.Вы проверили настройки на машине win7, чтобы убедиться, что она не печатает в черновом режиме или не выполняет ручное изменение размера и т. Д., А также убедитесь, что все драйверы принтеров обновлены? –
Да устранили всех обычных подозреваемых. Печать на прекрасное качество на всех принтерах и всех драйверах актуальна. Его действительно странно, поскольку я никогда не видел ничего подобного. – philmckendry
Да, я знаю, что они внесли некоторые изменения в пакеты драйверов и прочее, чтобы попытаться уговорить производителей прекратить загрузку на кучу OEM-блэтов, но, насколько я знаю, все они должны питаться одинаково независимо от версии ОС. Это интересно. –