我相信这个问题只会影响那些需要在文档中嵌入字体的 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 类来解决这个问题。