В настоящее время я использую IText7 для преобразования файла HTML в PDF. Из-за особенностей приложения каждая строка текста в абзаце должна храниться в отдельной строке внутри своего собственного контейнера div, что вызывает проблемы, оправдывающие абзац в целом. Чтобы обойти это, мне нужно иметь возможность вручную измерить ширину контейнера div, а затем измерить ширину текстового содержимого внутри него, а затем применить обоснование на основе отношения, которое мы решим.
Часть, с которой я борюсь, состоит в том, как измерить ширину упомянутых выше элементов внутри конвейера IText. Я написал TagWorker, который будет запускаться при обнаружении элемента div с атрибутом «justify-text». Я надеялся, что смогу переопределить метод ProcessEnd, определить ширину элементов и действовать соответствующим образом, как бы я ни боролся чтобы узнать как. Я могу найти элементы, о которых идет речь, но расчет ширины - это проблема.
iText 7: высота абзаца в том виде, в котором она будет отображена
Я пытался выполнить эту статью, но я не смог запустить этот код, он выдает ошибку со следующим исключением, которое мне не удалось устранить.
"System.InvalidOperationException: 'FontProvider и FontSet пусты. Не удается разрешить имя семейства шрифтов (см. ElementPropertyContainer # setFontFamily) без инициализированного FontProvider (см. RootElement # setFontProvider).'"
Вот мой код.
public JustifyWorker(IElementNode element, ProcessorContext context) : base(element, context)
{
}
public override void ProcessEnd(IElementNode element, ProcessorContext context)
{
base.ProcessEnd(element, context);
var result = (Div) this.GetElementResult();
var width = this.GetWidth(result, new Document(context.GetPdfDocument()).GetRenderer());
}
private float GetWidth(IElement prop, RootRenderer parentRenderer)
{
IRenderer renderer = prop.CreateRendererSubTree();
LayoutResult result = renderer.SetParent(parentRenderer).Layout(new LayoutContext(new LayoutArea(1, new Rectangle(100, 1000))));
return result.GetOccupiedArea().GetBBox().GetWidth();
}
}
Является ли TagWorkers правильным местом для этого? Если да, то может ли кто-нибудь помочь мне понять, как получить ширину элемента div и текст внутри него?