На самом деле не совсем легко контролировать размеры изображений, добавляемых в поля страницы.Один из возможных подходов, который я могу предложить, - это добавить изображение как контент (а не как background-image) и использовать пользовательский тэг работника, который бы указывал высоту и ширину, как требуется для дочерних изображений поля поля страницы:
HTML:
@top-left {
content: url(../images/template/test_logo_pdf.jpg);
border:1px solid red;
background-color: #cccccc;
margin-top:10px;
}
Это код Java, однако версия .NET имеет точно такой же API, различающийся только стилем кода (заглавные буквы в начале имен методов и т. Д.):
private static class PageMarginBoxImagesTagWorkerFactory extends DefaultTagWorkerFactory {
@Override
public ITagWorker getCustomTagWorker(IElementNode tag, ProcessorContext context) {
if (tag.name().equals(PageMarginBoxContextNode.PAGE_MARGIN_BOX_TAG)) {
return new PageMarginBoxImagesWorker(tag, context);
}
return super.getCustomTagWorker(tag, context);
}
}
private static class PageMarginBoxImagesWorker extends PageMarginBoxWorker {
public PageMarginBoxImagesWorker(IElementNode element, ProcessorContext context) {
super(element, context);
}
@Override
public boolean processTagChild(ITagWorker childTagWorker, ProcessorContext context) {
if (childTagWorker.getElementResult() instanceof Image) {
// Or set fixed dimensions via setWidth/setHeight
((Image) childTagWorker.getElementResult()).setAutoScale(true);
}
return super.processTagChild(childTagWorker, context);
}
}
И используйте PageMarginBoxImagesTagWorkerFactory, указав его в ConverterProperties
:
HtmlConverter.convertToPdf(htmlSrc, pdfDocument,
new ConverterProperties()
.setTagWorkerFactory(new PageMarginBoxImagesTagWorkerFactory()));