HTMLBody 拒绝输出我指定的字体大小,总是以不同的大小结束

Posted

技术标签:

【中文标题】HTMLBody 拒绝输出我指定的字体大小,总是以不同的大小结束【英文标题】:HTMLBody refuses to output the font size I specify, always ends up a different size 【发布时间】:2012-05-22 03:55:19 【问题描述】:

我正在尝试让我的 C# 应用程序生成表单电子邮件。我应该在周五一个小时内完成这件事……但 Outlook 实在是太不听话了。

似乎无论我在 MailItem 的 htmlBody 中指定字体大小的方式如何,它的大小都略有不同。 Font face 总是按指定显示,但大小永远不正确。

email.HTMLBody = "<p style='font-size:11px;font-family:Calibri;'>girl look at that body</p>";
email.HTMLBody = "<style> body  font-family:'Calibri'; font-size:11px;  </style> <body>girl look at that body</body>";
email.HTMLBody = "<html><header><style> body  font-family:'Calibri'; font-size:11px;  </style></header> <body>girl look at that body</body></html>";
email.HTMLBody = "<span style='font-size:11px;font-family:calibri;'>girl look at that body</span>";

生成大小为 8.5 的字体。

email.HTMLBody = "<html><body><font face='Calibri' size='11px'>girl look at that body</font></body></html>";
email.HTMLBody = "<font face='Calibri' size='11px'>girl look at that body</font>";

生成 12 号字体。

所以,似乎通过 CSS 指定 11px(或 11pt,也尝试过)字体让我得到 8.5px,而通过字体标签让我得到 12px。

我对此做了一些进一步的尝试,基本上,字体标签无论如何都会产生 12pt 字体。所以这是一个死胡同,但我知道字体标签无论如何都被弃用了。 CSS 标签会给我不同的尺寸,但很少是我要求的。它总是关闭,而且数量不固定。

代码中的字体大小 = 电子邮件中的字体大小:

12 = 9 13 = 10 14 = 10.5 15 = 11.5 16 = 12 17 = 13 18 = 13.5 19 = 14.5 20 = 15

在 CSS 中指定 14.5px 为我提供了我想要的 11px...但我不喜欢部署依赖于此的东西。

这里有什么问题?有什么我忽略在 CSS 中指定的吗?我需要在 MailItem 或 Outlook.Application 的其他地方进行调整?

【问题讨论】:

【参考方案1】:

这是因为你使用了 11px 而不是 pt。 “px”代表像素,文本的 1 个像素大小并不意味着字体大小为 1 个点。使用 11pt 而不是 11px。

根据此处的讨论:https://graphicdesign.stackexchange.com/questions/199/point-vs-pixel-what-is-the-difference

像素是单个方形“图片元素”(因此是像素),即图像中的单个点。 10x10 的图像由 10 宽 x 10 深的网格中的一组像素组成,总共 100 个像素。

另一方面,“点”(pt) 是长度单位,通常用于测量字体的高度,但在技术上可以测量任何长度。在应用中,1pt 正好等于 1/72 英寸;在传统印刷中,从技术上讲,72pt 是 0.996264 英寸,尽管我认为您可以将其四舍五入!

多少像素 = 1pt 取决于图像的分辨率。如果您的图像是 72ppi(每英寸像素数),那么一个点将正好等于一个像素。

【讨论】:

我在代码后面的段落中提到,我也尝试在所有使用“px”的地方使用“pt”,但得到了相同的结果。 我知道这真的很老了,我希望我当时能想到这个,但如果我们讨论的只是字体本身的大小差异问题怎么办?看看我的意思,去这里:Type Tester。您可以将最右侧的基本字体大小更改为 14 像素,并在 Calibri、Arial(差别不大)和 Times New Roman(差别很大)之间进行比较。也许 Calibri 不是您想要使用的字体。【参考方案2】:

这很旧,但我遇到了与 OP 完全相同的问题,并找到了适合我的解决方案。如下所示格式化 HTML:

.HTMLBody = "<style> bodyfont-family:Calibri;font-size:11pt;" & "<HTML><body>Your text goes here"

【讨论】:

【参考方案3】:

在我看来,电子邮件中的某些设置被设置为从您指定的字体缩小。这可能因不同的用户设置而异。你说它“不是一致的数量”,但我不同意。根据您的数字,所有偶数都以您声明的数量出现在.75,而所有奇数都大约是.76xxxx。所以这就像邮件被设置为将您给定的字体大小乘以大致相当于.75em

是的,您可以通过将目标值乘以大约1.33 来进行补偿,但您这样做只是为了自己吗?换句话说,正如我最初所说,这可能是用户特定的设置(我不知道在 Outlook 中默认情况下可能是 .75),在这种情况下,您无法保证所有用户的字体大小。

也许以em 为单位调整字体大小可能在这里起作用。如果您提供1.33em,这可能会使您与您的目标尺寸保持最一致,并且还可以响应用户设置。

在查看自己的 Outlook 版本时,我无法确定专门用于缩放字体的设置。可以设置默认字体大小,并且可能会根据默认大小到请求大小的某些公式进行缩放。

【讨论】:

【参考方案4】:

在编写使用 Excel 数据制作 Outlook 电子邮件的 VBA 宏时,我遇到了同样的问题。有趣的是,无论我做什么,使用 pt 或 px,都不重要:无论我使用哪个值,输出总是跳过字体大小 11。使用 11pt 给了我 8.5 字体大小。使用 12pt 给了我 9。使用 14 给了我 12...

无论如何,当我添加一个小数时,它突然起作用了。 试试这个:11.0pt。希望对您有所帮助。

【讨论】:

【参考方案5】:

试试这个:&lt;span style="font-size:11pt"&gt;

希望对你有帮助。

【讨论】:

OP 声明 11px 和 11pt 的结果相同。

以上是关于HTMLBody 拒绝输出我指定的字体大小,总是以不同的大小结束的主要内容,如果未能解决你的问题,请参考以下文章

在 Outlook 中修改 HTMLBody 以进行内联响应

带有 html 正文的 Powershell 电子邮件发件人 (htmlbody.Replace)

在 R 图中指定字体大小

在 HTML 表格中指定字体和大小

以编程方式更改 PowerShell 控制台字体

无法打开输出文件,权限被拒绝