この問題は、ドキュメントにフォントを埋め込む必要がある PDF/A または PDF/UA を使用しているユーザーにのみ影響すると思います。PDF を生成するために、xhtml ドキュメントで XMLWorker を使用しています。
<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');"> を使用しました。カスタム タグ プロセッサで処理した画像のスケーリングに問題がありました。
また、シンボルに選択されたフォントが Helvitca である <ol style="list-style-type: upper-alpha;"> リストでも同じ問題を発見しました。カスタム タグ プロセッサを使用してこれを置き換えようとしました。
以下は、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 クラスを作成することも検討しました。