在 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 有一些了解,但它不支持 transform
s。
所以我想问问有没有什么办法。
该报告是 .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() 函数。
我最后做了什么:
- 获取字体文件(在我的例子中:C:\Windows\Fonts\arialbd.ttf);
- 在FontForge中打开("About"说是2017年7月31日的版本);
- 更改它的名称(元素 - 字体信息 - PS 名称)。我最终得到了字体名称:
ArialShrunk-050-BoldMT
,姓氏:Arial Shrunk 050
,人类名称:Arial Shrunk 050 Bold
;当被问及更改唯一 ID 时,请按 "Change";
- 更改或删除翻译后的字体名称(元素 - 字体信息 - TTF 名称),否则将无法安装(因为 windows 出于某种原因检查本地化字体名称)。我删除了不是 "English (US)".
的每一行
- 另存为.sfd;
- 编辑 - Select - 值得输出的字形;
- 元素 - 变换 - 变换;
- 将原点设置为
Glyph Origin
;第一个动作到 Scale
,X 到 50
(将 Y 留在 100
);
Transform All Layers、Transform Guide Layer Too、Round To Int未选中;
也变换宽度,也变换字距类,变换简单的定位特征和字距对检查;
- 按确定,稍等一下;
- 文件-生成字体,确保选中
TrueType
,取消选中Validate Before Saving
(保存一次点击);按生成,在"Lookup potentially too big"-警告中按确定;
- 找到刚刚生成的ArialShrunk-050-BoldMT.ttf文件,双击,按Install安装字体
现在有一种新的系统范围字体 Arial Shrunk 050
供我在任何地方使用,尤其是在 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 有一些了解,但它不支持 transform
s。
所以我想问问有没有什么办法。 该报告是 .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() 函数。
我最后做了什么:
- 获取字体文件(在我的例子中:C:\Windows\Fonts\arialbd.ttf);
- 在FontForge中打开("About"说是2017年7月31日的版本);
- 更改它的名称(元素 - 字体信息 - PS 名称)。我最终得到了字体名称:
ArialShrunk-050-BoldMT
,姓氏:Arial Shrunk 050
,人类名称:Arial Shrunk 050 Bold
;当被问及更改唯一 ID 时,请按 "Change"; - 更改或删除翻译后的字体名称(元素 - 字体信息 - TTF 名称),否则将无法安装(因为 windows 出于某种原因检查本地化字体名称)。我删除了不是 "English (US)". 的每一行
- 另存为.sfd;
- 编辑 - Select - 值得输出的字形;
- 元素 - 变换 - 变换;
- 将原点设置为
Glyph Origin
;第一个动作到Scale
,X 到50
(将 Y 留在100
); Transform All Layers、Transform Guide Layer Too、Round To Int未选中; 也变换宽度,也变换字距类,变换简单的定位特征和字距对检查; - 按确定,稍等一下;
- 文件-生成字体,确保选中
TrueType
,取消选中Validate Before Saving
(保存一次点击);按生成,在"Lookup potentially too big"-警告中按确定; - 找到刚刚生成的ArialShrunk-050-BoldMT.ttf文件,双击,按Install安装字体
现在有一种新的系统范围字体 Arial Shrunk 050
供我在任何地方使用,尤其是在 CrystalReports 中。
它不是很理想,但由于我不需要生成太多缩放变化,所以它可以工作。