Я использую DataGrid для представления некоторых данных в приложении WPF. В функции, в которой я сохраняю конкретное окно WPF с DataGrid в PDF-файл с помощью PDFSharp, я сталкиваюсь с проблемой, что линии сетки DataGrid не отображаются, когда сохраненный PDF-файл просматривается с меньшим процентом просмотра. (Обращайтесь к прикрепленным изображениям, только когда для просмотра 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);
Я считаю, что это связано с качеством изображения. Затем я попробовал этот фрагмент, в котором я использую 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-файл. В этом случае линии сетки таблицы хорошо видны даже при небольшом проценте просмотра.
Кто-нибудь может мне с этим помочь?