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

时间:2017-04-19 06:16:31

标签: c# rdlc barcode report-designer ean-13

我有一些特殊字体: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>

有什么想法吗?

打开字体窗口: enter image description here

3 个答案:

答案 0 :(得分:0)

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

LoïcHaye的回答

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的基本报告,请点击以下链接:

步骤2:从此站点下载条形码字体3 of 9:

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

步骤4:右键单击要创建的表达式(TextBox)barcode->select->"TextBox Properties"

第5步:文本框属性 - &gt;字体 - >选择字体类型 - >确定

步骤6:然后右键单击要制作条形码的表达式(TextBox) - >选择 - &gt;'表达式'

步骤7:将“*”附加到表达式值,然后单击“确定”。

步骤8:运行您的应用程序,您可以在报告中看到您的条形码。

以上内容完全从上述网站中复制而来,我与他们没有任何关系

如果您访问该网站,他们也会有图片说明并链接到其他一些资源。

答案 1 :(得分:0)

为了能够嵌入字体,字体必须满足以下条件:

  • 字体嵌入权限由字体作者授予。安装 fonts包含一个属性,指示是否为字体作者 打算允许在文档中嵌入字体。如果属性 值为EMBED_NOEMBEDDING,字体未嵌入PDF文件中。 有关更多信息,请参阅&#34; TTGetEmbeddingType&#34;在msdn.microsoft.com上。
  • 字体为TrueType。

如果未满足其中一个或多个条件,您将无法按照自己喜欢的方式嵌入字体。而且我相信你唯一的另一个选择就是代码,在运行时,就像你已经发现的那样。

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

设计报告的计算机显然也需要安装此字体。您只需选择您自己的屏幕截图所示的字体,该屏幕应按字体名称和其他必要属性在.rdlc文件中注册。

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

不幸的是,SSRS(rdlc)不够先进,只能通过xml节点完成此任务。

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

答案 2 :(得分:0)

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

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

要生成图像,我使用Zen Barcode Rendering Framework许可的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

结果图片:

Code128:
code128 example
Datamatrix:
datamatrix example

它在设计师中的表现:
From SSRS Designer

“导出PDF”中的示例PDF演示正确调整大小:

Screenshot of barcode having been resized properly enter image description here

打印时也是如此。