1

我相信这个问题只会影响那些需要在文档中嵌入字体的 PDF/A 或 PDF/UA 的人。我正在使用带有 xhtml 文档的 XMLWorker 来生成 PDF。

如果我使用 <ul style="list-style-type: square;">,则 zapfdingbats char 108 用于项目符号点。这个问题是在 Stackoverflow 上报告的,我不会在这里重新讨论:Embedding font using itext 5 for PDF/UA compliance

作为一种解决方法,我使用了 PDF/UA 验证器(PAC 2 PDF Accessibility Checker 2)不反对的 <ul style="list-style-image: url('images/arrowicon.png');"> 。缩放我通过自定义标签处理器处理的图像时出现问题。

我还发现 <ol style="list-style-type: upper-alpha;"> 列表中的相同问题,其中为符号选择的字体是 Helvitca。我尝试使用自定义标签处理器替换它。

下面是我用于 UL 和 OL 列表的自定义标签处理器。使用图像缩放的顶部工作正常,它是我无法弄清楚的 CSS.Value.UPPER_ALPHA。这是我尝试过的最简单的例子。

private class CustomUlTagProcessor : OrderedUnorderedList
    {
        public override IList<IElement> End(IWorkerContext ctx, Tag tag, IList<IElement> currentContent)
        {
            float fontSize = FontSizeTranslator.GetInstance().GetFontSize(tag);
            var elements = base.End(ctx, tag, currentContent);
            var imgScale = 9;

            var css = tag.CSS;
            CssUtils utils = CssUtils.GetInstance();

            foreach (var e in elements)
            {
                if (e is List)
                {
                    List list = (List)e;

                    string styleType;
                    css.TryGetValue(CSS.Property.LIST_STYLE_TYPE, out styleType);

                    if (css.ContainsKey(CSS.Property.LIST_STYLE_IMAGE)
                        && !Util.EqualsIgnoreCase(css[CSS.Property.LIST_STYLE_IMAGE], CSS.Value.NONE))
                    {
                        if (tag.Attributes.ContainsKey("data-image-size"))
                        {
                            int temp;
                            if (int.TryParse(tag.Attributes["data-image-size"], out temp))
                                imgScale = temp;
                        }


                        var url = utils.ExtractUrl(css[CSS.Property.LIST_STYLE_IMAGE]);

                        var img =
                            new ImageRetrieve(_context.ResourcePath, _context.GetImageProvider()).RetrieveImage(url);

                        img.Alt = "Checkbox";
                        //sizing the image to 12pt which is 9px
                        img.ScaleAbsolute(imgScale, imgScale);
                        //required to ensure the image is not scaled improperly.
                        img.ScaleToFitHeight = false;
                        img.Role = PdfName.ARTIFACT;

                        list.ListSymbol = new Chunk(img, 0, 0, false);
                        list.SymbolIndent = img.Width;

                    }

                    if (CSS.Value.UPPER_ALPHA.Equals(styleType) || CSS.Value.UPPER_LATIN.Equals(styleType))
                    {
                        //Set colour to red to see change easily
                        list.Symbol.Font = new Font(HeaderBaseFont, 12, Font.NORMAL, BaseColor.RED);

                    }

                }
            }
            return elements;
        }
    }

我已经追踪了列表如何处理字体的问题,但我不知道如何在自定义标签处理器中修复它,我认为这是更简单的解决方案。我也考虑过做我自己的 List 类来解决这个问题。

4

0 回答 0