OL/UL iText5 xmlworker上的PDF/UA嵌入式字体

OL/UL iText5 xmlworker上的PDF/UA嵌入式字体,itext,xmlworker,Itext,Xmlworker,我相信这个问题只会影响那些需要在文档中嵌入字体的PDF/A或PDF/UA用户。我正在使用xhtml文档中的XMLWorker生成PDF 如果我使用的是,则zapfdingbats char 108用于项目符号。此问题已在Stackoverflow上报告,我不会在此处重复: 作为一种解决方法,我使用了PDF/UA验证器(PAC 2 PDF可访问性检查器2)不反对的。在缩放通过自定义标记处理器处理的图像时出现问题 我还发现,在为符号选择的字体为Helvitca的列表中也存在同样的问题。我试图用一个定

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

如果我使用的是
    ,则zapfdingbats char 108用于项目符号。此问题已在Stackoverflow上报告,我不会在此处重复:

    作为一种解决方法,我使用了PDF/UA验证器(PAC 2 PDF可访问性检查器2)不反对的
      。在缩放通过自定义标记处理器处理的图像时出现问题

      我还发现,在为符号选择的字体为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;
              }
          }
      
      私有类CustomUlTagProcessor:OrderedUnderedList
      {
      公共覆盖IList端(IWorkerContext ctx、标记标记、IList currentContent)
      {
      float fontSize=FontSizeTranslator.GetInstance().GetFontSize(标记);
      var元素=base.End(ctx、tag、currentContent);
      var-imgScale=9;
      var css=tag.css;
      CssUtils utils=CssUtils.GetInstance();
      foreach(元素中的变量e)
      {
      如果(e是列表)
      {
      列表=(列表)e;
      字符串样式类型;
      css.TryGetValue(css.Property.LIST_STYLE_TYPE,out styleType);
      if(css.ContainsKey(css.Property.LIST\u STYLE\u IMAGE)
      &&!Util.EqualsIgnoreCase(css[css.Property.LIST\u STYLE\u IMAGE],css.Value.NONE))
      {
      if(tag.Attributes.ContainsKey(“数据图像大小”))
      {
      内部温度;
      if(int.TryParse(tag.Attributes[“数据图像大小”],out-temp))
      imgScale=温度;
      }
      var url=utils.ExtractUrl(css[css.Property.LIST_STYLE_IMAGE]);
      var-img=
      新建ImageRetrieve(_context.ResourcePath,_context.GetImageProvider()).RetrieveImage(url);
      img.Alt=“复选框”;
      //将图像大小调整为12pt,即9px
      img.可标度溶质(imgScale,imgScale);
      //需要确保图像未被不当缩放。
      img.ScaleToFitHeight=假;
      img.Role=PdfName.ARTIFACT;
      list.ListSymbol=新块(img,0,0,false);
      list.SymbolIndent=图像宽度;
      }
      if(CSS.Value.UPPER_ALPHA.Equals(styleType)| CSS.Value.UPPER_LATIN.Equals(styleType))
      {
      //将颜色设置为红色以便于查看变化
      list.Symbol.Font=新字体(HeaderBaseFont,12,Font.NORMAL,BaseColor.RED);
      }
      }
      }
      返回元素;
      }
      }
      
      我已经追踪了列表如何处理字体的问题,但我不知道如何在自定义标记处理器中修复它,我认为这是更简单的解决方案。我还考虑过使用自己的List类来解决这个问题