在 CrystalReports 中水平收缩文本

horizontally shrink text in CrystalReports

我有以下问题。 我正在 CrystalReports 中重新创建一个 A3 大小的标签,并且有一个文本字段必须是 Arial 115,粗体,通常宽度为 0.5。

可以在 HTML 中使用 transform:scaleX(0.5)

<p style="font-family: 'Arial'; font-weight:bold; font-size: 115px;transform:scaleX(0.5);">SOME LONGER TEXT (scaled down)</p>

<p style="font-family: 'Arial'; font-weight:bold; font-size: 115px;">SOME LONGER TEXT (no scaling)</p>

虽然 CrystalReports 对 HTML 有一些了解,但它不支持 transforms。

所以我想问问有没有什么办法。 该报告是 .net 程序的一部分,可能有一些 API 功能吗?

我想过生成并安装我需要的缩小字体(将有 6 个),但我找不到方法。

更新 我已经在下面发布了我的解决方案。

我建议使用 HTML 作为中介,我没有测试过它,因为它有点复杂,所以可能需要一些调试才能开始工作。

首先向 Crystal 文档中的文本对象添加一个 cssClass 值(在属性中)。类似于 shrinkobject.

接下来将 crystal 报告导出为 html 文本。

然后用样式标签注入 html 文本:

html = html.Replace("<HTML>", "<HTML><style>p.shrinkObject {transform:scaleX(0.5);}</style>");

此 html 应应用 CSS 值并可呈现给打印机。

您可以使用 UFL(用户函数库)来计算适合给定边界区域内文本的最大字体大小。创建您自己的或查看第 3 方 UFL 的列表 here

这是我的 UFL 中的一个 description of GetFontSizeToFitText() 函数。

我最后做了什么:

  1. 获取字体文件(在我的例子中:C:\Windows\Fonts\arialbd.ttf);
  2. FontForge中打开("About"说是2017年7月31日的版本);
  3. 更改它的名称(元素 - 字体信息 - PS 名称)。我最终得到了字体名称:ArialShrunk-050-BoldMT,姓氏:Arial Shrunk 050,人类名称:Arial Shrunk 050 Bold;当被问及更改唯一 ID 时,请按 "Change";
  4. 更改或删除翻译后的字体名称(元素 - 字体信息 - TTF 名称),否则将无法安装(因为 windows 出于某种原因检查本地化字体名称)。我删除了不是 "English (US)".
  5. 的每一行
  6. 另存为.sfd;
  7. 编辑 - Select - 值得输出的字形;
  8. 元素 - 变换 - 变换;
  9. 原点设置为Glyph Origin;第一个动作到 ScaleX50(将 Y 留在 100); Transform All LayersTransform Guide Layer TooRound To Int未选中; 也变换宽度也变换字距类变换简单的定位特征和字距对检查;
  10. 按确定,稍等一下;
  11. 文件-生成字体,确保选中TrueType,取消选中Validate Before Saving(保存一次点击);按生成,在"Lookup potentially too big"-警告中按确定
  12. 找到刚刚生成的ArialShrunk-050-BoldMT.ttf文件,双击,按Install安装字体

现在有一种新的系统范围字体 Arial Shrunk 050 供我在任何地方使用,尤其是在 CrystalReports 中。

它不是很理想,但由于我不需要生成太多缩放变化,所以它可以工作。