【发布时间】:2017-12-18 15:51:26
【问题描述】:
我正在使用 DataGrid 来表示 WPF 应用程序中的一些数据。在我使用 PDFSharp 将具有 DataGrid 的特定 WPF 窗口保存到 PDF 的功能中,我面临一个问题,即当以较小的查看百分比查看保存的 PDF 时,DataGrid GridLines 不可见。 (参考附图,只有当PDF视图设置为139%时,网格线才可见。但是,在较小的查看%中,一些网格线会被忽略。)
这是 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);
我认为这与绘制视觉效果的质量有关。然后我尝试了这个 sn-p,我使用 DrawImage 以更高分辨率制作视觉效果。这是sn-p:-
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);
这个 sn-p 正在工作,因为网格线即使在较小的查看百分比下也可见,但它使我的应用程序卡在 PDF 保存操作中,并且它抛出 System.OutofMemoryException 并显示消息“内存不足,无法继续执行程序。”但是,应用程序不会崩溃。
为了检查 PDF 查看器的行为,我在 MS Word 中生成了一个包含多行和多列的表格,并将其保存为 PDF。在这种情况下,即使在较小的查看百分比下,表格网格线也清晰可见。
谁能帮我解决这个问题?
【问题讨论】:
标签: wpf datagrid resolution pdfsharp gridlines