pdfHTML不尊重CSS样式

时间:2017-05-05 20:30:40

标签: html css itext7 pdfhtml

是否有pdfHTML支持的CSS样式列表?他们的网站说"它支持适用于PDF环境的HTML 5和CSS 3规范的部分"这是有道理的(例如没有理由支持CSS动画)。

但是,我遇到的问题是我认为适用于PDF的一些简单样式。

一个问题是以下样式未应用于图像:

img { max-width: 100%; }

我有一些图像的宽度比页面大,所以图像被切断了。我无法更改源HTML,也无法缩小图像文件。让图像表现出来的最佳做法是什么?

另一个问题与表格样式有关。这些都没有应用:

table { vertical-align: top; }
tr:nth-child(even) { background: #eee; }

与图像问题一样,这些样式在浏览器中看起来很好。建议格式化表的方法是什么?

由于

1 个答案:

答案 0 :(得分:2)

max-width pdfHTML中尚不支持CSS属性。您可以尝试使用自己的自定义CSS应用程序来解决该问题,并在满足某些条件时将宽度重置为您想要的任何内容。

首先,为图像创建CSS应用程序:

final ICssApplier customImageCssApplier = new BlockCssApplier() {
    @Override
    public void apply(ProcessorContext context, IStylesContainer stylesContainer, ITagWorker tagWorker) {
        super.apply(context, stylesContainer, tagWorker);
        if (tagWorker.getElementResult() instanceof Image) {
            Image img = (Image) tagWorker.getElementResult();
            if (img.getImageWidth() > 500) {
                img.setWidth(UnitValue.createPercentValue(100));
            }
        }
    }
};

然后,确保在工厂中检索此应用程序。为此,您必须覆盖getCustomCssApplier

ICssApplierFactory cssApplierFactory = new DefaultCssApplierFactory() {
    @Override
    public ICssApplier getCustomCssApplier(IElementNode tag) {
        if (TagConstants.IMG.equals(tag.name())) {
            return customImageCssApplier;
        }
        return super.getCustomCssApplier(tag);
    }
};

最后,创建ConverterProperties并确保将其传递给HtmlConverter.convertToPdf

ConverterProperties properties = new ConverterProperties().setCssApplierFactory(cssApplierFactory);