[英]Calculate PDF page height and width
我已经检查了SO,并看到了该问题的潜在解决方案,此外,我已经有一个潜在的解决方案,我将在问题中进行解释,但我将尝试从另一个角度进行探讨。 我正在使用PDF4NET将计算机输出的激光光盘(COLD)文档转换为PDF。 这些COLD文档只是纯文本,但没有显示在标准页面尺寸上(例如,信件,小报,法律等),并且我无法从文档本身提取任何页面尺寸信息。 当我尝试将它们转换为纵向(8.5 x 11)页面时,这会导致一个问题,其中单行可能最终会换行到下一行。 我希望能够避免这种情况。
这是我尝试转换文档时使用的已知信息:
利用这些已知信息,我可以确定以下字符的最长最长行:
Size textSize = TextRenderer.MeasureText(longestLine, new Font("Courier", 10, FontStyle.Regular, GraphicsUnit.Point));
我使用textSize.Width
设置PDF页面的高度和宽度,实际上是创建一个正方形页面。 该“出现”是为了防止文本换行,但是页面的右侧和底部有很多空白。
在已知的情况下,是否有更好的方法来计算PDF页面的高度和宽度,因此文本可以容纳而没有太多的空白? 如果需要更多信息以帮助更好地进行计算,还需要什么其他信息? 目的是创建一个这样的大小的文档,其中没有行换行,并且页边距周围看起来都一样。
我认为TextRenderer提供的像素宽度假定为96 dpi。
int pagewidth = textsize * 72 / 96 + 2*Margin ;
查看Graphics(GDI +)是否返回与TextRenderer(GDI)不同的宽度。
Graphics graphics = Graphics.FromImage(new Bitmap(1, 1));
SizeF size = graphics.MeasureString(text,myfont) ;
事实证明, PDF4NET在PDFFont
类中具有自己的MeasureString()
,它更加准确。
使用已知的边距,字体大小,最长的行长和行数,我们能够使用以下方式计算页面的高度和宽度:
PDFFont font = new PDFFont(PDFFontFace.Courier, 10);
double leftMargin = (double)LeftMargin.Value * 72;
double topMargin = (double).TopMargin.Value * 72;
double width = font.MeasureString(longestLine) + (leftMargin * 2);
double height = (LinesOfText.Count * font.Size) + (topMargin * 2);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.