itext pdfHtml: установить поля
Я использую HTMLConverter для преобразования HTML в PDF и пытаюсь установить некоторые поля.
Существующий код:
ConverterProperties props = new ConverterProperties();
props.setBaseUri("src/main/resources/xslt");
PdfDocument pdf = new PdfDocument(new PdfWriter(new FileOutputStream(dest)));
pdf.setDefaultPageSize(new PageSize(612F, 792F));
HtmlConverter.convertToPdf( html, pdf, props);
Может кто-нибудь подсказать, пожалуйста, как добавить поля? Я использовал класс Document для setMargin, но не уверен, как это сделать в методе convertToPdf HTMLConverter.
2 ответа
Разве вы не можете использовать HtmlConverter#convertToElements
метод. Возвращается List<IElement>
в результате вы можете добавить его элементы в документ с установленными полями:
Document document = new Document(pdfDocument);
List<IElement> list = HtmlConverter.convertToElements(new FileInputStream(htmlSource));
for (IElement element : list) {
if (element instanceof IBlockElement) {
document.add((IBlockElement) element);
}
}
Другой подход: в своем html просто введите правило @page, которое устанавливает необходимые поля, например:
@page {
margin: 0;
}
Еще одно решение: реализовать свой собственный рабочий тег для <html>
пометить и установить поля на его уровне. Например, чтобы установить нулевые поля, можно создать тег для следующего работника:
public class CustomTagWorkerFactory extends DefaultTagWorkerFactory {
public ITagWorker getCustomTagWorker(IElementNode tag, ProcessorContext context) {
if (TagConstants.HTML.equals(tag.name())) {
return new ZeroMarginHtmlTagWorker(tag, context);
}
return null;
}
}
public class ZeroMarginHtmlTagWorker extends HtmlTagWorker {
public ZeroMarginHtmlTagWorker(IElementNode element, ProcessorContext context) {
super(element, context);
Document doc = (Document) getElementResult();
doc.setMargins(0, 0, 0, 0);
}
}
и передать его в качестве параметра ConverterProperties Htmlconverter
:
converterProperties.setTagWorkerFactory(new CustomTagWorkerFactory());
HtmlConverter.convertToPdf(new File(htmlPath), new File(pdfPath), converterProperties);
Я изменил код, чтобы использовать поля документа, однако таблица заголовков отображается только на первой странице, на следующих страницах она сокращает более половины заголовка.
List<IElement> elements = HtmlConverter.convertToElements(proposta.getVersaoDocumento().getProcedimentos(),
props);
for (IElement element : elements) {
document.add((IBlockElement) element);
}