<fieldset> и <legend>теги с pdf Html в itext7 - PullRequest
0 голосов
/ 06 апреля 2020

Используя файл HTML, я сгенерировал PDF-файл, используя iText pdf HTML. Я хочу представить заголовок для контента, как в HTML <fieldset> и <legend>.

Я использовал ниже HTML код. На странице HTML она отображалась как ожидалось. Но при создании файла PDF с использованием pdf HTML внутри окна появляется «Сводка». Не в рамке для отображения заголовка содержимого.

<!DOCTYPE html>
<html>
<body>

 <fieldset>
  <legend>Summary</legend>
  <p>Some paragraph</p>  
 </fieldset>


</body>
</html>

Как я могу решить эту проблему?

1 Ответ

1 голос
/ 07 апреля 2020

pdfHTML пока не поддерживает тег fieldset, и ваш образец конвертируется во что-то вроде следующего:

current result

Вы можете подключить Ваша пользовательская реализация в pdfHTML, хотя и до некоторой степени настраивает внешний вид (в зависимости от ваших потребностей). Вот базовый c пример того, как настроить внешний вид с большим количеством предположений:

private static class LegendTagWorker extends DivTagWorker {
    public LegendTagWorker(IElementNode element, ProcessorContext context) {
        super(element, context);
    }

    @Override
    public IPropertyContainer getElementResult() {
        IPropertyContainer result = super.getElementResult();
        // Shift the position of the legend a bit above
        result.setProperty(Property.POSITION, LayoutPosition.RELATIVE);
        result.setProperty(Property.TOP, -14);

        // Set the background of the text to white so that it does not overlap with the border of outer element
        if (result instanceof Div && ((Div) result).getChildren().get(0) instanceof Paragraph) {
            Paragraph p = (Paragraph) ((Div) result).getChildren().get(0);
            ((Text)p.getChildren().get(0)).setBackgroundColor(ColorConstants.WHITE);
        }
        return result;
    }
}

private static class CustomTagWorkerFactory extends DefaultTagWorkerFactory {
    @Override
    public ITagWorker getCustomTagWorker(IElementNode tag, ProcessorContext context) {
        if (tag.name().equals("legend")) {
            return new LegendTagWorker(tag, context);
        }
        return super.getCustomTagWorker(tag, context);
    }
}

Тогда вам просто нужно передать фабрику рабочих тегов в свойства конвертера:

ConverterProperties properties = new ConverterProperties();
properties.setTagWorkerFactory(new CustomTagWorkerFactory());
HtmlConverter.convertToPdf(inFile, outFile, properties);

Теперь мы получаем следующий результат:

result with tweak

Обратите внимание, что это очень простой c пример, и вам нужно будет настроить это для ваших нужд. Прежде чем эта функция будет реализована в pdfHTML, вам придется использовать обходной путь - либо в коде, как я предлагал, либо вы можете сделать некоторые настройки с CSS, аналогично настройкам, которые я делаю в Java коде

...