You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将条形码添加至FlowDocument以实现打印?

解决FlowDocument中插入BarcodeLib生成的条形码图片问题

你遇到的核心问题是BarcodeLib生成的SKImage无法直接加入FlowDocument——因为FlowDocument只接受WPF原生的文档元素或UI控件。解决思路是先把SKImage转换成WPF兼容的BitmapSource,再封装成合适的容器添加到文档中。

步骤1:实现SKImage到BitmapSource的转换

写一个辅助方法,将SkiaSharp的图片转成WPF可识别的位图源:

using System.IO;
using SkiaSharp;
using System.Windows.Media.Imaging;

BitmapSource ConvertSKImageToBitmapSource(SKImage skImage)
{
    using var imageStream = new MemoryStream();
    // 将SKImage编码为PNG流
    skImage.Encode(SKEncodedImageFormat.Png, 100).SaveTo(imageStream);
    imageStream.Seek(0, SeekOrigin.Begin);

    var bitmapImage = new BitmapImage();
    bitmapImage.BeginInit();
    bitmapImage.CacheOption = BitmapCacheOption.OnLoad; // 确保流关闭后图片仍可用
    bitmapImage.StreamSource = imageStream;
    bitmapImage.EndInit();
    bitmapImage.Freeze(); // 冻结对象,提升性能并支持跨线程访问
    return bitmapImage;
}

步骤2:将条形码图片加入FlowDocument

修改你的原有代码,加入转换逻辑并使用BlockUIContainer嵌入图片:

using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows;

FlowDocument fDoc = new FlowDocument();
fDoc.PagePadding = new Thickness(50);

Barcode b = new Barcode();
var img = b.Encode(BarcodeStandard.Type.Ean13, serialNum, 290, 120);

// 转换图片格式
var bitmapSource = ConvertSKImageToBitmapSource(img);

// 创建WPF Image控件,设置尺寸和间距
var barcodeImage = new Image
{
    Source = bitmapSource,
    Width = 290,
    Height = 120,
    Margin = new Thickness(0, 0, 0, 20) // 与下方文本保持间距
};

// 用BlockUIContainer将图片添加到FlowDocument的块元素中
fDoc.Blocks.Add(new BlockUIContainer(barcodeImage)
{
    HorizontalAlignment = HorizontalAlignment.Center // 可选:让条形码居中显示
});

// 添加原有文本段落
Paragraph p = new Paragraph();
p.FontSize = 12;
p.Inlines.Add(labelText);
fDoc.Blocks.Add(p);

额外说明

  • 如果需要将条形码和文本放在同一行,可替换BlockUIContainer为InlineUIContainer,并将其加入Paragraph的Inlines集合中。
  • 确保项目已引用SkiaSharp和SkiaSharp.Wpf NuGet包,否则可能出现类型找不到的问题。

内容的提问来源于stack exchange,提问作者Kc491

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:12:53