我正在使用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);
有没有人能建议一下如何增加利润?我对setMargin使用了Document类,但不确定如何将其转换为HTMLConverter的convertToPdf方法。
发布于 2019-01-31 15:03:16
你不能使用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>
标记实现您自己的自定义标记工作程序,并在其级别上设置边距。例如,要设置零边距,可以创建标记下一个worker:
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);
https://stackoverflow.com/questions/54450119
复制相似问题