0

我有一些特殊的字体: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到这个rdlcxml 节点呢?

      <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>

有任何想法吗?

打开字体窗口: 在此处输入图像描述

4

3 回答 3

0

一个非常小的答案在这里动态修改 rdlc 报告(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);

这里有一个关于生成条形码的资源

第 1 步:有关 RDLS 报告的基本信息,请点击以下链接:

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

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

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

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

第6步:然后右键单击要制作条形码的Expression(TextBox)->选择->'Expression'

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

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

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

如果您访问该站点,它们也有图像描述和指向其他一些资源的链接。

于 2017-06-14T13:34:09.060 回答
0

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

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

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

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

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


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

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

可以在 这里找到官方 MSDN 文档文章

于 2017-06-14T14:37:04.137 回答
0

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

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

为了生成图像,我使用了Zen Barcode Rendering Framework ,它在免版税许可下获得许可,但该理论同样适用于任何条形码渲染器。

我使用应用程序托管的 http 服务器来允许动态条形码呈现:

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

结果图像:

Code128: 数据矩阵:
code128 示例

数据矩阵示例

它在设计器中的外观:
来自 SSRS 设计师

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

已正确调整大小的条形码的屏幕截图在此处输入图像描述

打印时也会出现同样的情况。

于 2017-06-17T17:19:53.387 回答