代码之家  ›  专栏  ›  技术社区  ›  Sau001

从itextsharp移植到itext 7-如何从PDF文档中获取文本的字体权重?

  •  0
  • Sau001  · 技术社区  · 6 年前

    我正在从 itextsharp公司 itext7 并面临字体权重方面的困难。下面是我的代码片段 itextsharp公司 (不是最好的代码!)但效果很好,在任何可用的地方都给了我字体的重量。

        public class MyLocationTextExtractionStrategy :    LocationTextExtractionStrategy
        {
    
            public override void RenderText(TextRenderInfo renderInfo)
            {
            var oFont = renderInfo.GetFont();
            var fieldFontWeight = oFont.GetType().BaseType.GetField(
                               "fontWeight",                                           
                               System.Reflection.BindingFlags.NonPublic | 
                               System.Reflection.BindingFlags.GetField | 
                               System.Reflection.BindingFlags.Instance);
            System.Single fontWeight = (System.Single)fieldFontWeight.
                                GetValue(oFont);
            }    
        }
    

    我无法使用 itext 7 .有什么建议吗?

    谢谢 沙特

    1 回复  |  直到 6 年前
        1
  •  2
  •   mkl    6 年前

    我找不到明确的 fontWeight 成员,就像在iText 5中一样,但没有什么可以阻止我们研究 FontDescriptor 我们自己,例如:

    public class MyLocationTextExtractionStrategy : LocationTextExtractionStrategy
    {
        public override void EventOccurred(IEventData data, EventType type)
        {
            if (data is TextRenderInfo renderInfo)
            {
                var oFont = renderInfo.GetFont();
                PdfDictionary fontDescriptor = oFont.GetPdfObject().GetAsDictionary(PdfName.FontDescriptor);
                PdfNumber number = fontDescriptor?.GetAsNumber(PdfName.FontWeight);
                double? weight = number?.GetValue();
                [... process weight, it is null if not set in the descriptor ...]
            }
            base.EventOccurred(data, type);
        }
    }