現在、コンテンツコンテナの内容(情報付きのデータグリッドのみ)とPrintFixedDocumentを使用したイメージを印刷しようとしています。それは完全な画像品質と私のマシン(ウィンドウ10)に完璧に印刷し、Windows 8である別のPCで、品質は同じです。PrintFixedDocument wpf印刷品質 - Windows 10/8とWindows 7
しかし、これがWindows 7 PCで行われると、画質が非常に悪くなり、最終的な結果が非常にぼやけます。これは、Windows 7からさまざまな理由でコンピュータを更新できないため、他の誰かがこれを経験しているのか不思議ですが、回避策があるのでしょうか?私はうまくいかないことができますが、これは両方で動作する理由も、私のGetFixedDocument
方法の問題である可能性があり10および8ではなく7
NOTEに勝つこれは、各PC上のアプリケーションのインストール済みのバージョンから実行されている
<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>
:
はまた、任意のヘルプは
XAMLをいただければ幸いです
ALL 3つのオペレーティングシステム上で複数のプリンタで試みられて
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のbloatwareをやめさせるのをやめさせることを試みたが、OSのバージョンにかかわらず、同じ方法で全てを得るべきだと私が知っていた限り、それは興味深いものです。 –