Получение ширины лигатуры "ff", в частности
Рассматриваемая лигатура имеет свой собственный назначенный символ Unicode U+FB00
, поэтому для ее получения можно использовать.
font.getWidth("\uFB00", 12);
Получениеширина произвольной текстовой строки, обрабатываемой pdfCalligraph
Указывая Property.TYPOGRAPHY_CONFIG
, вы неявно используете модуль pdfCalligraph
, который отвечает за применение каллиграфических функций, таких как лигатуры.Это надстройка с закрытым исходным кодом, которая не имеет общедоступного API для взаимодействия и предназначена для плавной интеграции в существующий код.
Для эффективного использования (как это будет отображаться в результирующем PDF)любого элемента макета вы можете вручную создать макет такого элемента, а затем получить некоторые свойства результата макета, такие как вычисленная ширина.
Для вычисления ширины текста можно использовать метод, подобный следующему:
float calculateTextWidth(Document document, String text) throws IOException {
PdfFont font = PdfFontFactory.createFont(fontPath, PdfEncodings.IDENTITY_H, true);
Paragraph p = new Paragraph(text).setFont(font);
IRenderer paragraphRenderer = p.createRendererSubTree();
paragraphRenderer.setParent(document.getRenderer()).layout(new LayoutContext(new LayoutArea(1, new Rectangle(100, 100))));
return paragraphRenderer.getChildRenderers().get(0).getOccupiedArea().getBBox().getWidth();
}
Убедитесь, что прямоугольник, который вы передаете конструктору LayoutArea
, достаточно велик, чтобы вместить весь текст (в нашем случае 100x100 более чем достаточно).
Тогда, если выпопробуйте сравнить выходные данные метода перед установкой Property.TYPOGRAPHY_CONFIG
, и после этого вы, скорее всего, увидите другие значения при условии, что шрифт содержит лигатуру.В моем случае эти значения были 9.984
и 9.768
соответственно.Поскольку вас интересует ширина лигатуры, обязательно вызовите этот метод после применения типографской конфигурации к документу.