0

我有以下问题。我正在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 个),但我不知道怎么做。

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

4

3 回答 3

0

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

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

接下来将水晶报表导出为 html 文本。

然后注入带有样式标签的 html 文本,例如:

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

然后,此 html 应应用 CSS 值并可以呈现到打印机。

于 2018-10-12T10:02:54.313 回答
0

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

这是我的 UFL中 GetFontSizeToFitText() 函数的描述。

于 2018-10-12T10:36:56.663 回答
0

我最终做了什么:

  1. 获取字体文件(在我的例子中:C:\Windows\Fonts\arialbd.ttf);
  2. 在FontForge中打开它(“关于”表示它是 31.07.2017 的版本);
  3. 更改它的名称(元素 - 字体信息 - PS 名称)。我最终得到了 Fontname: ArialShrunk-050-BoldMT, Family Name: Arial Shrunk 050, Name For Humans: Arial Shrunk 050 Bold; 当被问及更改唯一 ID 时,请按“更改”;
  4. 更改或删除翻译的字体名称(元素 - 字体信息 - TTF 名称),否则将不会安装(因为 Windows 出于某种原因检查本地化字体名称)。我删除了不是“英语(美国)”的每一行。
  5. 另存为.sfd;
  6. 编辑 - 选择 - 值得输出的字形;
  7. 元素 - 变换 - 变换;
  8. 原点设置为Glyph Origin;第一个动作到ScaleX50(将Y留在100); Transform All LayersTransform Guide Layer TooRound To Int未选中; 也变换宽度也变换字距调整类变换简单定位特征和检查字距对; 设置 FontForge
  9. 按 OK 并稍等;
  10. 文件 - 生成字体,确保TrueType选中,取消选中Validate Before Saving(节省点击);按Generate ,在“查找可能太大”-警告中按OK ;
  11. 找到新生成的ArialShrunk-050-BoldMT.ttf文件,双击,按Install安装字体。

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

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

于 2018-10-12T14:47:52.770 回答