OL/UL iText5 xmlworker上的PDF/UA嵌入式字体
我相信这个问题只会影响那些需要在文档中嵌入字体的PDF/A或PDF/UA用户。我正在使用xhtml文档中的XMLWorker生成PDF 如果我使用的是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的列表中也存在同样的问题。我试图用一个定
- ,则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类来解决这个问题