Экспорт страниц FlowDocument в файл PNG

У меня есть требование распечатать изображения, представленные в определенном каталоге, без запуска / рендеринга в любом UIElement на дисплее, например, tableView

поэтому я решил использовать FlowDocument

Но я столкнулся с проблемой при сохранении страницы FlowDocument в виде изображений (некоторые изображения не отображаются и отображаются как черные, я приложил снимок экрана с проблемой), уже обсуждавшиеся на форуме Msdn

Я приложил мой код ниже

FlowDocumentReader flowDocumentReader = new FlowDocumentReader();
FlowDocument flowDocument = new FlowDocument();
Table table = new Table();
flowDocumentReader.Document = flowDocument;
flowDocument.Blocks.Add(table);
flowDocument.LineHeight = 116.4;
flowDocument.PageHeight = 745.6;
flowDocument.ColumnWidth = 999999999;
table.Columns.Add(new TableColumn() { Width = new GridLength(30) });
table.Columns.Add(new TableColumn() { Width = new GridLength(279) });
table.Columns.Add(new TableColumn() { Width = new GridLength(279) });
table.Columns.Add(new TableColumn() { Width = new GridLength(279) });
var imageFilePaths = Directory.GetFiles(@"C:\Images", "*.jpg").ToList();
for (int i = 0; i < imageFilePaths.Count; i++)
{
    if (i % 4 <= 0)
    {
        var tableRowGroupCol = new TableRowGroup() { Background = Brushes.Black };
        var tableRowCol = new TableRow();
        tableRowGroupCol.Rows.Add(tableRowCol);
        table.RowGroups.Add(tableRowGroupCol);
        tableRowCol.Cells.Add(new TableCell() { Background = Brushes.LightGray, LineHeight = 30 });

        var par = new Paragraph();
        var header = new TextBlock
        {
            Text = "Col1",
            TextWrapping = TextWrapping.WrapWithOverflow,
        };
        par.Inlines.Add(header);
        tableRowCol.Cells.Add(new TableCell(par) { Background = Brushes.LightGray, LineHeight = 30 });

        var par2 = new Paragraph();
        var header2 = new TextBlock
        {
            Text = "Col2",
            TextWrapping = TextWrapping.WrapWithOverflow,
        };
        par2.Inlines.Add(header2);
        tableRowCol.Cells.Add(new TableCell(par2)
            { Background = Brushes.LightGray, LineHeight = 30 });

        var par3 = new Paragraph();
        var header3 = new TextBlock
        {
            Text = "Col3",
            TextWrapping = TextWrapping.WrapWithOverflow,
        };
        par3.Inlines.Add(header3);
        tableRowCol.Cells.Add(new TableCell(par3) { Background = Brushes.LightGray, LineHeight = 30 });
    }
    var tableRowGroup = new TableRowGroup() { Background = Brushes.Black };
    var tableRow = new TableRow();
    tableRowGroup.Rows.Add(tableRow);
    table.RowGroups.Add(tableRowGroup);
    for (int j = 0; j < 4 && (j * i) < imageFilePaths.Count; j++)
    {
        var paragraph = new Paragraph();
        if (j != 0)
        {
            var bitmap = new BitmapImage();
            bitmap.BeginInit();
            bitmap.UriSource = new Uri(imageFilePaths[i * j], UriKind.Absolute);
            bitmap.CacheOption = BitmapCacheOption.OnLoad;
            bitmap.EndInit();
            var image = new Image() { Source = bitmap };
            image.Height = 116.4;
            paragraph.Inlines.Add(image);
        }
        else
        {
            var textBlock = new TextBlock
            {
                Text = "row-" + i,
                TextWrapping = TextWrapping.WrapWithOverflow,
            };
            paragraph.Inlines.Add(textBlock);
        }
        tableRow.Cells.Add(new TableCell(paragraph) { Background = j != 0 ? Brushes.White : Brushes.LightGray });
    }
}
DocumentPaginator dp = ((IDocumentPaginatorSource)flowDocument).DocumentPaginator;
dp.ComputePageCount();
for (int i = 0; i < dp.PageCount; i++)
{
    var rtb = new RenderTargetBitmap((int)dp.PageSize.Width, (int)dp.PageSize.Height, 96, 96, PixelFormats.Pbgra32);
    rtb.Render(dp.GetPage(i).Visual);
    var enc = new PngBitmapEncoder();
    enc.Frames.Add(BitmapFrame.Create(rtb));
    using (var stm = System.IO.File.Create(folderPath + fileName))
    {
        enc.Save(stm);
    }
}

Может ли помочь мне решить проблему

Спасибо

Сантош Деви

0 ответов

Другие вопросы по тегам