繁体   English   中英

计算PDF页面的高度和宽度

[英]Calculate PDF page height and width

我已经检查了SO,并看到了该问题的潜在解决方案,此外,我已经有一个潜在的解决方案,我将在问题中进行解释,但我将尝试从另一个角度进行探讨。 我正在使用PDF4NET将计算机输出的激光光盘(COLD)文档转换为PDF。 这些COLD文档只是纯文本,但没有显示在标准页面尺寸上(例如,信件,小报,法律等),并且我无法从文档本身提取任何页面尺寸信息。 当我尝试将它们转换为纵向(8.5 x 11)页面时,这会导致一个问题,其中单行可能最终会换行到下一行。 我希望能够避免这种情况。

这是我尝试转换文档时使用的已知信息:

  1. COLD文档-我知道最长的字符行的长度,也知道页面上的行数。
  2. 字体-生成的PDF文档的Courier尺寸为10
  3. 边距-每个文档的边距可能有所不同,但我们有可用的边距
  4. DPI-始终为72(PDF的默认DPI)

利用这些已知信息,我可以确定以下字符的最长最长行:

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) ;

事实证明, PDF4NETPDFFont类中具有自己的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM