有没有办法通过 Migradoc/PdfSharp 提供的宽度来计算字符串的高度?

问题描述 投票:0回答:2

我必须渲染一个 3 列布局的 PDF。但是我必须知道什么时候我没有足够的空间来容纳专栏中的下一段并切换到下一段。我尝试使用库所有者使用的 XTextFormatterEx,但我仍然没有我需要的准确性。

c# pdf pdfsharp migradoc
2个回答
0
投票

PDFsharp:当使用

XTextFormatterEx
测量文本和绘制文本时,
XTextFormatterEx
是计算文本字符串精确高度的方式。

MigraDoc:使用 MigraDoc,您可以设计可以为多个输出呈现的文档,因此在设计阶段没有页面,也没有“文本高度”。
当按预期使用 MigraDoc 时,根本不需要使用 MeasureString。
PDF可以用MeasureString来确定单行高度,但是多行段落的高度可能还是不一样


-1
投票

水平尺寸看这里:How to determine the size of a string given a font

对于垂直尺寸,搜索“字体指标”在谷歌图像中有很多模式。 以下是如何获取这些指标的示例:

//Get "arial Regular" Metrics in DesignUnit
var lFont = new FontFamily("Arial");
var lEm_height = lFont.GetEmHeight(System.Drawing.FontStyle.Regular);
var lAscent = lFont.GetCellAscent(System.Drawing.FontStyle.Regular);
var lDescent = lFont.GetCellDescent(System.Drawing.FontStyle.Regular);
var lLineSpacing = lFont.GetLineSpacing(System.Drawing.FontStyle.Regular);


//in milimeter
double lFontSize = 12; //in pt
var lFontSizeMM = U_Unit.Convert_From_pt.To_mm(lFontSize); //convert Pt to MM, from my personal lib
var lMM_Ascent = lFontSizeMM * (lAscent / lEm_height);
var lMM_Descent = lFontSizeMM * (lDescent / lEm_height);
var lMM_LineSpacing = lFontSizeMM * (lLineSpacing / lEm_height);
var lMM_Em_height = lFontSizeMM * (lEm_height / lEm_height);

//in px
var lFontSizePx = U_Unit.Convert_From_pt.To_px(lFontSize); //convert Pt to Px, from my personal lib
var lPx_Ascent = lFontSizePx * (lAscent / lEm_height);
var lPx_Descent = lFontSizePx * (lDescent / lEm_height);
var lPx_LineSpacing = lFontSizePx * (lLineSpacing / lEm_height);
var lPx_Em_height = lFontSizePx * (lEm_height / lEm_height);
© www.soinside.com 2019 - 2024. All rights reserved.