保存为PDF时,WPF DataGrid GridLines不可见
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保存为PDF时,WPF DataGrid GridLines不可见相关的知识,希望对你有一定的参考价值。
我正在使用DataGrid来表示WPF应用程序中的一些数据。在我正在使用PDFSharp保存将DataGrid转换为PDF的特定WPF窗口的功能中,我遇到的问题是,当以较小的查看百分比查看保存的PDF时,DataGrid GridLines不可见。 (请参阅附图,仅当PDF视图设置为139%时,GridLines才可见。但是,在较小的视图%中,某些网格线会被省略。)
这是PDF保存代码: -
MemoryStream lMemoryStream = new MemoryStream();
Package package = Package.Open(lMemoryStream, FileMode.Create);
var doc = new System.Windows.Xps.Packaging.XpsDocument(package);
XpsDocumentWriter writer = System.Windows.Xps.Packaging.XpsDocument.CreateXpsDocumentWriter(doc);
VisualBrush sourceBrush = new VisualBrush(this);
DrawingVisual drawingVisual = new DrawingVisual();
using (var drawingContext = drawingVisual.RenderOpen())
{
drawingContext.DrawRectangle(sourceBrush, null, new Rect(new Point(0, 0), new Point(this.ActualWidth, this.ActualHeight)));
}
writer.Write(drawingVisual);
doc.Close();
package.Close();
var pdfXpsDoc = PdfSharp.Xps.XpsModel.XpsDocument.Open(lMemoryStream);
XpsConverter.Convert(pdfXpsDoc, sFileName, 0);
我认为它与视觉效果的质量有关。然后我尝试了这个片段,我正在使用DrawImage以更高的分辨率制作视觉效果。这是片段: -
MemoryStream lMemoryStream = new MemoryStream();
Package package = Package.Open(lMemoryStream, FileMode.Create);
var doc = new System.Windows.Xps.Packaging.XpsDocument(package);
XpsDocumentWriter writer = System.Windows.Xps.Packaging.XpsDocument.CreateXpsDocumentWriter(doc);
double dpiScale = 600.0 / 96.0;
var renderBitmap = new RenderTargetBitmap(Convert.ToInt32(this.Width * dpiScale),
Convert.ToInt32(this.Height * dpiScale),
600.0,
600.0,
PixelFormats.Pbgra32);
renderBitmap.Render(this);
var visual = new DrawingVisual();
using (var dc = visual.RenderOpen())
{
dc.DrawImage(renderBitmap, new Rect(0, 0, this.Width, this.Height));
}
writer.Write(visual);
doc.Close();
package.Close();
var pdfXpsDoc = PdfSharp.Xps.XpsModel.XpsDocument.Open(lMemoryStream);
XpsConverter.Convert(pdfXpsDoc, _pdfFileName, 0);
这个片段正在工作,因为即使在较小的查看百分比中网格线也可见,但它使我的应用程序停留在PDF保存操作,并且它还会抛出System.OutofMemoryException,并显示消息“内存不足以继续执行程序”。但是,应用程序不会崩溃。
为了检查PDF查看器的行为,我在MS Word中生成了一个包含多行和多列的表,并将其另存为PDF。在这种情况下,即使在较小的观察百分比下,表格网格线也清晰可见。
谁能帮我这个?
我假设第一个代码片段以矢量格式创建了一个表(您不提供允许验证这一点的PDF)。
第二个代码段尝试创建位图图像(栅格格式)。
无论哪种方式:对于矢量和光栅图像,它依赖于PDF查看器是否可见细线。 Adobe Reader有许多选项(如“增强细线”,“平滑线条艺术”,“平滑图像”),这些选项将对实际显示产生影响 - 在客户端计算机上设置,无需在PDF中设置。
我假设您使用MS Word进行的测试也创建了一个矢量格式的表格,但可能使用较粗的线条。所以这个测试没有任何证据。
以上是关于保存为PDF时,WPF DataGrid GridLines不可见的主要内容,如果未能解决你的问题,请参考以下文章