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" 演示正确调整大小:
打印时也是如此。
我有一些特殊字体: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" 演示正确调整大小:
打印时也是如此。