计算PDF页面的高度和宽度

时间:2015-07-01 22:56:21

标签: c# pdf pdf-generation

我已经检查了这个问题,并且看到了这个问题的潜在解决方案,而且我已经有了一个潜在的解决方案,我将在问题中解释,但我会尝试从另一个问题到达角度。我使用PDF4NET将计算机输出转换为激光光盘(COLD)文档为PDF。这些COLD文档只是纯文本,但似乎没有标准页面大小(即字母,小报,法律等等),而且我无法从文档本身中提取任何页面大小信息。当我尝试将它们转换为肖像(8.5 x 11)页面时,这会导致一个问题,其中一行可能最终换行到下一行。我希望能够避免这种情况。

以下是我尝试转换文档时使用的知识:

  1. COLD文档 - 我知道最长字符行的长度,我知道页面上的行数。
  2. 字体 - 生成的PDF文档将为Courier size 10
  3. 边距 - 每个文档的边距可能会有所不同,但我们可以使用
  4. DPI - 这将始终为72(PDF'默认DPI)
  5. 根据这些知识,我确定了最长的字符行:

    Size textSize = TextRenderer.MeasureText(longestLine, new Font("Courier", 10, FontStyle.Regular, GraphicsUnit.Point));
    

    我使用textSize.Width设置PDF页面高度&宽度,基本上创建一个方形页面。这"出现"保持文本不被包装,但页面的右侧和底部有很多空白区域。

    问题:

    有没有更好的方法来计算PDF页面的高度和宽度,具有给定的知识,所以文本可以适应而没有这么多的空白?如果需要更多信息来帮助更好地计算,还需要哪些其他信息?我们的目标是创建一个这样大小的文档,其中没有任何行包装,并且边缘看起来都是相同的。

2 个答案:

答案 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)

结果PDF4NETMeasureString()类中有自己的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);