【问题标题】:pdfHTML not honoring CSS stylespdfHTML 不支持 CSS 样式
【发布时间】:2017-05-05 20:30:40
【问题描述】:

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

但是,我认为某些适用于 PDF 的简单样式存在问题。

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

img { max-width: 100%; }

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

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

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

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

谢谢

【问题讨论】:

  • nth-child 将在pdfHTML 的下一版本中得到支持。当前的开发快照版本已经支持它。
  • @AlexeySubach:很酷。对图像宽度有任何想法吗?这就是现在的凶手。如果我可以将图像放在页面上,我认为我们应该能够继续使用 itext。

标签: html css itext7 pdfhtml


【解决方案1】:

pdfHTML 尚不支持max-width 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);

【讨论】:

  • 不过,这是一个肮脏的解决方法,在棘手的情况下可能不起作用。您可以使用将触发您的逻辑的物理图像的大小(在我的示例中为500)并使用您为其设置的图像的大小(您可能想同时尝试百分比和点值)。如果您仍然无法解决问题,请务必将您的问题传达给销售团队。
  • 我正在用 C# 编写这个。您的两个块中的第一行是否类似于: public class CustomImageCssApplier : BlockCssApplier ... 然后方法将是: public override void Apply(blahblah)?
  • 我认为这对我们有用,谢谢。我将提出我的请求,即尽可能添加来自 css 的图像格式。在那之前,我期待着表格格式,这将是锦上添花。
  • 一般来说,您可以在artifactory 下载最新的快照版本,但nth-child 功能尚未移植到C#。几天后你可以回来下载itext7.pdfhtml.1.0.1-SNAPSHOT.nupkg。确保还下载 Core 的最新快照:itext7.7.0.3-SNAPSHOT.nupkg。但我相信iText 的新版本会在大约一个月内完成,所以如果它适合你,你也可以等待新版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-11
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 2017-08-18
相关资源
最近更新 更多