ITextsharp Html2Pdf CSS проблема - PullRequest
0 голосов
/ 16 мая 2018

Я новичок в iTextSharp, в настоящее время работаю над преобразованием HTML в PDF с использованием Html2pdf (расширение iTextSharp).Я могу создать PDF, но не могу добавить логотип в PDF на каждой странице.

Изображение идет, но я не могу изменить ширину изображений.

CSS, который я использую для логотипа pdf ниже:

@page { 
@top-left { 
content:"test "; 
background:url(../images/template/test_logo_pdf.jpg) no-repeat 0px 0px;
border:1px solid red;
background-color: #cccccc;

margin-top:10px;
} 
@top-right { 
content: flow(header); 
}
@bottom-right { 
content: "Page " counter(page) " of " counter(pages); 
font: 8pt Arial, sans-serif; 
} 
@bottom-left { 
content: string(repname); 
font: 8pt Arial, sans-serif; 
}
}

1 Ответ

0 голосов
/ 17 мая 2018

На самом деле не совсем легко контролировать размеры изображений, добавляемых в поля страницы.Один из возможных подходов, который я могу предложить, - это добавить изображение как контент (а не как 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()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...