我正在尝试提取文本,并希望为输出的每个文本存储正确的字体和字体大小。我正在测试四个测试 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 版本并且它运行完美?
我做了一些研究,发现 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 专家,但也许这里有人可以帮助我?