Visual Studio 报表设计器:嵌入字体

Visual Studio Report Designer: Embed font

我有一些特殊字体:EAN-13 我需要在我的报告中插入条形码,所以我不知道如何使用嵌入字体。

我可以在运行时加载我的字体:

    private static PrivateFontCollection Pfc;
    private static async Task<FontFamily> EAN13()
    {
        if (Pfc == null)
        {
            Pfc = new PrivateFontCollection();

            Stream fontStream = typeof(DefferedPurchase)
                .Assembly
                .GetManifestResourceStream("ActionsC.Resources.EAN-13.ttf");

            byte[] fontdata = new byte[fontStream.Length];
            await fontStream.ReadAsync(fontdata, 0, (int)fontStream.Length);
            fontStream.Close();
            unsafe
            {
                fixed (byte* pFontData = fontdata)
                {
                    Pfc.AddMemoryFont((IntPtr)pFontData, fontdata.Length);
                }
            }
        }
        return Pfc.Families.FirstOrDefault();
    }

但是我怎样才能 apply 它到这个 rdlc xml 节点?

      <Textbox Name="textbox19">
        <CanGrow>true</CanGrow>
        <ToggleImage>
          <InitialState>true</InitialState>
        </ToggleImage>
        <KeepTogether>true</KeepTogether>
        <Paragraphs>
          <Paragraph>
            <TextRuns>
              <TextRun>
                <Value>=Parameters!BarCode.Value</Value>
                <Style>
                  <FontFamily><!--     


                        see here       


                   --></FontFamily>
                  <FontSize>12pt</FontSize>
                </Style>
              </TextRun>
            </TextRuns>
            <Style />
          </Paragraph>
        </Paragraphs>
        <rd:DefaultName>textbox1</rd:DefaultName>
        <Top>13.4995cm</Top>
        <Left>21.53213cm</Left>
        <Height>3.10467cm</Height>
        <Width>5.6385cm</Width>
        <ZIndex>30</ZIndex>
        <Style>
          <PaddingLeft>2pt</PaddingLeft>
          <PaddingRight>2pt</PaddingRight>
          <PaddingTop>2pt</PaddingTop>
          <PaddingBottom>2pt</PaddingBottom>
        </Style>
      </Textbox>

有什么想法吗?

打开的字体window:

这里有一个非常小的答案Modify dynamically a rdlc report (c#)

在 Loïc Haye 的回答中

Stream st = this.GetType().Assembly.GetManifestResourceStream(_NomRessourceRpt);

// convert stream to string
StreamReader reader = new StreamReader(st);
string reportDef = reader.ReadToEnd();

XmlDocument document = new XmlDocument();
document.LoadXml(reportDef);

关于生成条码有一个resource here

第 1 步:对于 RDLS 基础报告,请遵循此 link:

第 2 步:从该站点下载条码字体 3(共 9):

第 3 步:然后转到您的 rdlc 报告页面:

第 4 步:右键单击要制作的表达式(文本框)barcode->select->"TextBox Properties"

第五步:文本框属性->字体->Select字体类型->确定

第六步:然后右击要制作条形码的Expression(TextBox)->select->'Expression'

第 7 步:将“*”附加到表达式值并单击“确定”。

第 8 步:运行 您的申请,您可以在您的报告中看到您的条形码,就像这样。

以上内容完全复制自提到的网站,我与他们没有任何关系

如果您访问该网站,他们也有图像描述和 link 一些其他资源。

要完全嵌入字体,字体必须满足以下条件:

  • 字体嵌入权限由字体作者授予。已安装 字体包括一个 属性 指示字体作者是否 打算允许在文档中嵌入字体。如果 属性 值为 EMBED_NOEMBEDDING,字体未嵌入 PDF 文件中。 有关详细信息,请参阅 msdn.microsoft.com 上的 "TTGetEmbeddingType"。
  • 字体为 TrueType。

如果不满足这些条件中的一个或多个,您将无法按照您希望的方式嵌入字体。我相信您唯一的其他选择是在 运行 时间通过代码,就像您已经发现的那样。

两个条件都满足就很简单了。您所要做的就是在报表服务器上安装此字体。
当任何用户将报告导出为 PDF 时,它将自动嵌入到 PDF 文档中,并且字体将正确显示。这样您就省去了必须在客户端计算机上安装此字体的麻烦。

设计报表的电脑显然也需要安装这个字体。您只需 select 您自己的屏幕截图所示的字体,它应该通过字体名称和其他必要的属性在 .rdlc 文件中注册它。


但是,如果您在不使用报表服务器的情况下为桌面应用程序编写此程序。据我所知,除了像现在这样(通过代码)进行操作之外,没有其他方法可以使这项工作正常进行。

不幸的是,SSRS (rdlc) 不够先进,无法仅通过 xml 个节点来完成此任务。

MSDN官方文档文章可以查到 here

与直觉相反,将条形码转换为 PDF 的最佳方式通常是使用位图。它们通常比等效的矢量或基于字体的解决方案更小,可以存储在生成的 pdf 中,并且大多数条形码根据定义以单个单位模块宽度为中心,可以直接表示为单个像素。

SSRS 和 RDLC 确实支持此工作流程,但它在屏幕上看起来很糟糕,因为它在屏幕上使用的插值模式与打印和导出为 pdf 时不同。

为了生成图像,我使用 Zen Barcode Rendering Framework which is licensed under a royalty free license,但该理论同样适用于任何条形码渲染器。

我使用 application-hosted http server 来允许动态条形码呈现:

' Make sure to use EscapeDataString if parameter is not URL safe
=Parameters!BarcodeServiceUri.Value & "2d/datamatrix?moduleSize=2&data=" & Parameters!ToteID.Value

结果图像:

代码 128:

数据矩阵:

它在设计器中的外观:

示例 PDF 来自 "Export PDF" 演示正确调整大小:

打印时也是如此。