我已经检查了这个问题,并且看到了这个问题的潜在解决方案,而且我已经有了一个潜在的解决方案,我将在问题中解释,但我会尝试从另一个问题到达角度。我使用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页面的高度和宽度,具有给定的知识,所以文本可以适应而没有这么多的空白?如果需要更多信息来帮助更好地计算,还需要哪些其他信息?我们的目标是创建一个这样大小的文档,其中没有任何行包装,并且边缘看起来都是相同的。
答案 0 :(得分:1)
我认为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) ;
答案 1 :(得分:0)
结果PDF4NET在MeasureString()
类中有自己的PDFFont
更准确。
通过已知的边距,字体大小,最长的线长和行数,我们可以计算页面的高度和宽度:
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);