当前位置: 首页 > 知识库问答 >
问题:

获取PDFBox中字符的字体高度

钮瀚
2023-03-14

PDFBox的字体类PDFont中有一个名为getFontHeight的方法,听起来很简单。然而,我不太理解文档和参数代表什么。

getFontHeight这将获得字符的字体宽度。

参数:

  • c-要获取宽度的字符代码。
  • 偏移量-数组中的偏移量。长度
  • 数据的长度。

返回:宽度为1000个文本空间单位,即333或777

在PDFBox中,这个方法是用来获取角色高度的正确方法吗?如果是的话,如何获取?字体高度和字体大小之间是否存在某种关系?

共有3个答案

隗轶
2023-03-14

也许用这个?

http://pdfbox.apache.org/apidocs/org/apache/pdfbox/util/TextPosition.html

看起来像是文本的环绕util。不过,我还没有查看源代码,看它是否解释了字体错误。

葛学民
2023-03-14

编辑:帽子的高度是我想要的。看看公认的答案。

在挖掘了PDFBox的来源后,我发现这应该可以计算字体高度。

int fontSize = 14;
PDFont font = PDType1Font.HELVETICA;
font.getFontDescriptor().getFontBoundingBox().getHeight() / 1000 * fontSize

虽然这个方法并不完美。如果你画一个高度为200的矩形和一个字体大小为200的Y,你会得到用上述方法计算的字体高度231.2,即使它实际上比矩形小。

每种字体都有不同的错误,但是对于helvetica来说,它接近13.5倍,与字体大小无关。因此,为了获得正确的字体高度,helvetica这样做...

font.getFontDescriptor().getFontBoundingBox().getHeight() / 1000 * fontSize * 0.865
林夕
2023-03-14

我认为标有“正确”的答案需要进一步澄清。getHeight()没有每种字体的“错误”,因此我认为手动猜测每种新字体的系数不是一个好做法。我想这对你来说很好,用CapHeight代替Height。

float height = ( font.getFontDescriptor().getCapHeight()) / 1000 * fontSize;

这将返回一个值,该值与您试图通过对Helvetica的高度0.865进行修正得到的值相似。但它对任何字体都是通用的。

PDFBox文档没有太多解释它是什么。但是你可以看看维基百科Cap_height文章中的图片,更好地了解它是如何工作的,并选择适合你特定任务的参数。

https://en.wikipedia.org/wiki/Cap_height

 类似资料:
  • 我试图在文档中创建新的页面并写入一些文本,同时使用文件中包含的字体。 字体是从资源中提取的: 后来用来写一些文字: 包括PDF在内的完整项目可在github存储库中获得,该存储库显示了该问题

  • 我有一个带有表单字段的现有pdf文件,可以由用户填写。此表单字段具有创建pdf文件时定义的字体和文本对齐方式。 我使用Apache PDFBox在pdf中查找表单字段: 如果我将表单字段的内容设置为 然后表单字段中的文本具有与此字段预定义的相同的字体和对齐方式。 但我需要第二个字段的对齐方式和字体(顺便说一句,这不是表单字段)。 如何找出该表单字段定义了哪种对齐方式(左、中、右)和哪种字体(我需要

  • 我试图从pdf文件中获得特定文本或行的字体大小或格式(粗体等),但没有任何成功到现在。 使用下面的PDFTextStripper只能得到纯文本 PDFTextStripper tripper=新的PDFTextStripper();String actualText=stripper.gettext(actualDoc); 你能帮我做这个吗?谢了。

  • 如何在Go中获取字符串的字符数? 例如,如果我有一个字符串“hello”,该方法应该返回5。我看到返回字节数,而不是字符数,因此返回2而不是1,因为在UTF-8中用两个字节编码。

  • 如果你需要更多的背景,我在下面补充了整个故事: 我试图替换PDF中的一些字符串。这将成功(只要所有文本都存储在一个令牌中)。为了保持格式,我喜欢重新居中的文本。据我所知,我可以通过得到新旧字符串的宽度,做一些琐碎的计算,并设置新的位置来做到这一点。 我在stackoverflow上找到了一些灵感,用来替换https://stackoverflow.com/a/36404377(是的,它有一些问题,

  • 我正在编写一个应用程序,它使用PDFbox库来填充PDF文件中的字段。 在其中一个字段中,我将文本设置为希伯来字母。 当我在Android设备上运行代码时,我会得到以下日志: 我试图在堆栈溢出中找到一些关于它的信息,但我找到的答案都与填充表单有关。它都与有关。 你能帮我解决这个错误并用PDFBox在表格中填写希伯来字母吗?