Я просто использую порт .NET Pdfium
с именем PdfiumViewer. Он просто отлично работает после визуализации в элементах управления WinForm, но когда я пытаюсь отобразить его на Bitmap
для отображения в окнах WPF (или даже с сохранением на диске), у вынесенного текста проблема.Графика растровой графики и графика управления WinForm
var pdfDoc = PdfiumViewer.PdfDocument.Load(FileName);
int width = (int)(this.ActualWidth - 30)/2;
int height = (int)this.ActualHeight - 30;
var bitmap = new System.Drawing.Bitmap(width, height);
var g = System.Drawing.Graphics.FromImage(bitmap);
g.FillRegion(System.Drawing.Brushes.White, new System.Drawing.Region(
new System.Drawing.RectangleF(0, 0, width, height)));
pdfDoc.Render(1, g, g.DpiX, g.DpiY, new System.Drawing.Rectangle(0, 0, width, height), false);
// Neither of these are readable
image.Source = BitmapHelper.ToBitmapSource(bitmap);
bitmap.Save("test.bmp");
// Directly rendering to a System.Windows.Forms.Panel control works well
var controlGraphics = panel.CreateGraphics();
pdfDoc.Render(1, controlGraphics, controlGraphics.DpiX, controlGraphics.DpiY,
new System.Drawing.Rectangle(0, 0, width, height), false);
Примечательно сказать, что я испытал почти все возможные варианты на Graphics
объекта, включая TextContrast
, TextRenderingHint
, SmoothingMode
, PixelOffsetMode
...
Какие конфигурации я пропускаю на Bitmap
объект, причина это?
Edit 2
После большого поиска и, как упоминалось @BoeseB я только обнаружил, что Pdfium делают ручку устройства и растровые изображения по-разному, предоставляя второй метод визуализации FPDF_RenderPageBitmap и в настоящее время я изо всех сил для преобразования своего родного формата растрового изображения BGRA в управляемый Bitmap
.
Редактировать
Различные режимы TextRenderingHint
также попытался Application.SetCompatibleTextRenderingDefault(false)
без заметной разницы.
На моем проекте заставки я была аналогичная проблема рендеринга текста на изображение. Это помогло установить TextRenderingHint. Вы уже пробовали все настройки? как результат выглядит для разных настроек? – BoeseB
Опишите проблему с предоставлением текста или еще лучше укажите ссылку на снимок экрана с ошибкой. Кроме того, я бы просто отметил, что WPF всегда рисует растровые изображения, масштабированные до их DPI. Поскольку вы явно не устанавливали DPI в свой код выше, может произойти ошибка между DPI Bitmap и DPI вашего дисплея. – RogerN
Также, если вы используете Application.SetCompatibleTextRenderingDefault (false); Перед отображением элемента управления? Я полагаю, что Control использует GDI + (graphics.DrawString) для отображения текста, а ваша ничья для растрового изображения использует GDI (TextRenderer.DrawText), см. Этот ответ http://stackoverflow.com/a/23230570/4369295 – BoeseB