iText7 TextRenderInfo.GetFontSize() 通常会产生错误结果

问题描述 投票:0回答:1

我正在尝试提取文本,并希望为输出的每个文本存储正确的字体和字体大小。我正在测试四个测试 pdf,其中三个返回值 1,一个具有正确的字体大小。可能是什么原因造成的,解决方案是什么?

这是我的代码:

using System.Text;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas.Parser;
using iText.Kernel.Pdf.Canvas.Parser.Data;
using iText.Kernel.Pdf.Canvas.Parser.Listener;

namespace PDFTextExtraction
{
    class Program
    {
        static void Main(string[] args)
        {
            string pdfFilePath = "pathtopdf.pdf";

            using (PdfReader pdfReader = new PdfReader(pdfFilePath))
            {
                using (PdfDocument pdfDocument = new PdfDocument(pdfReader))
                {
                    MyTextEventListener listener = new MyTextEventListener();

                    for (int pageNum = 1; pageNum <= pdfDocument.GetNumberOfPages(); pageNum++)
                    {
                        PdfPage page = pdfDocument.GetPage(pageNum);
                        PdfCanvasProcessor parser = new PdfCanvasProcessor(listener);
                        parser.ProcessPageContent(page);
                    }

                    Console.WriteLine("Extrahierter Text mit Schriftart und Schriftgröße:");
                    Console.WriteLine(listener.GetExtractedText());
                }
            }
        }
    }

    public class MyTextEventListener : IEventListener
    {`your text`
        private readonly StringBuilder extractedText = new StringBuilder();

        public void EventOccurred(IEventData data, EventType type)
        {
            if (type.Equals(EventType.RENDER_TEXT))
            {
                TextRenderInfo renderInfo = (TextRenderInfo)data;
                string text = renderInfo.GetText();
                string font = renderInfo.GetFont().GetFontProgram().ToString();
                float fontSize = renderInfo.GetFontSize();

                extractedText.AppendLine($"Text: {text} | Schriftart: {font} | Schriftgröße: {fontSize}");
            }
        }

        public ICollection<EventType> GetSupportedEvents()
        {
            return new List<EventType> { EventType.RENDER_TEXT };
        }

        public string GetExtractedText()
        {
            return extractedText.ToString();
        }
    }
}

我已经尝试过以下方法:

float ascent = renderInfo.GetAscentLine().GetStartPoint().Get(1);
float descent = renderInfo.GetDescentLine().GetStartPoint().Get(1);
float fontSize = ascent - descent;

我有一个 iTextSharp 5.5.13 版本并且它运行完美?

itext extract font-size itext7
1个回答
0
投票

我做了一些研究,发现 Pdf 运算符的定义如下:

BT 
0 0.6 0.95 0 k 
/GS0 gs 
**/T1_0 1 Tf** 
0.024 Tc 
-0.024 Tw 
8 0 0 8 32.3386 171.361 Tm
[(V)43.2(o)2.2(r)-1(n)1.5(ame)24( Na)7.9(c)-1.4(h)-1.1(n)1.4(a)0.5(me)] TJ
ET

那么字体也定义好了?我不是 PDF 专家,但也许这里有人可以帮助我?

© www.soinside.com 2019 - 2024. All rights reserved.