首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pdfHTML不尊重CSS样式

pdfHTML不尊重CSS样式
EN

Stack Overflow用户
提问于 2017-05-05 20:30:40
回答 1查看 1.4K关注 0票数 0

是否有pdfHTML支持的CSS样式列表?他们的网站说“它支持HTML 5和CSS 3规范中适用于PDF上下文的部分”,这是有意义的(例如,没有理由支持CSS动画)。

然而,我有一个问题,我认为是一些简单的样式,将适用于PDF。

一个问题是没有将下列样式应用于图像:

代码语言:javascript
复制
img { max-width: 100%; }

我有一些图片,它们的宽度比页面大,所以图像被剪掉了。我无法更改源HTML,也无法缩小图像文件。什么是最佳的做法,以获得图像的行为?

另一个问题与表格样式有关。这些措施没有得到应用:

代码语言:javascript
复制
table { vertical-align: top; }
tr:nth-child(even) { background: #eee; }

与图像问题一样,这些样式在浏览器中看起来也不错。推荐的格式化表的方法是什么?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-08 17:58:47

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

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
ConverterProperties properties = new ConverterProperties().setCssApplierFactory(cssApplierFactory);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43813324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档