При извлечении текста из PDF мне нужно также извлечь размер шрифта. Вначале я извлек следующее:Получить fontsize из PDF с помощью itextsharp
iTextSharp.text.Rectangle rect = new iTextSharp.text.Rectangle(
curBaseline[Vector.I1],
curBaseline[Vector.I2],
topRight[Vector.I1],
topRight[Vector.I2]);
В этом я не могу получить точный размер шрифта. После этого я попытался использовать renderinfo.gs.fontsize;
. В этом renderinfo.gs.fontsize
я получу несколько текстовых шрифтов точного, но немногие, я не получу точный размер шрифта. Где я получу размер шрифта имеет «1.0». Может ли кто-нибудь сказать мне, что метод, который я использую, является правильным. Если NO есть какой-либо другой метод для извлечения размера шрифта с помощью iTextSharp. Я использую версию iTextSharp 5.4. Заранее спасибо.
using System;
using System.Collections;
// code java to C# conversion
public void renderText(TextRenderInfo renderInfo)
{
LineSegment curBaseline = renderInfo.Baseline;
LineSegment curAscentline = renderInfo.AscentLine;
Rectangle rect = new Rectangle(curBaseline.StartPoint.get(ArrayList.I1), curBaseline.StartPoint.get(ArrayList.I2), curAscentline.EndPoint.get(ArrayList.I1), curAscentline.EndPoint.get(ArrayList.I2));
try
{
Console.Write(" [{0,6:F2}, {1,6:F2}, {2,6:F2}] \"{3}\" ({4} at {5,6:F2})\n", rect.Width, rect.Height, getEffectiveFontSize(renderInfo), renderInfo.Text, renderInfo.Font.FullFontName[0], getFontSize(renderInfo));
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
Console.Write(e.StackTrace);
}
}
float getEffectiveFontSize(TextRenderInfo renderInfo) throws System.ArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchFieldException, NoSuchMethodException
{
Method convertHeight = typeof(TextRenderInfo).getDeclaredMethod("convertHeightFromTextSpaceToUserSpace", float.TYPE);
convertHeight.Accessible = true;
return (float?)convertHeight.invoke(renderInfo, getFontSize(renderInfo));
}
float getFontSize(TextRenderInfo renderInfo) throws SecurityException, NoSuchFieldException, System.ArgumentException, IllegalAccessException
{
Field gsField = typeof(TextRenderInfo).getDeclaredField("gs");
gsField.Accessible = true;
GraphicsState gs = (GraphicsState) gsField.get(renderInfo);
return gs.FontSize;
}
Вы также должны принять текущую матрицу преобразования во внимание, см правки в моем ответе [здесь] (http://stackoverflow.com/questions/15739221/how-to-implement-smallcaps-in-itextsharp/15752789#15752789). – mkl
@mkl это в java, если я не ошибаюсь. и я попытался преобразовать код с помощью java в C#, но это было невозможно. Может ли кто-нибудь помочь с использованием csharp, пожалуйста, – Pragya
Если интроспекция и отражение в C# слишком отличаются от того, что в Java, просто скопируйте классы парсера iTextSharp и сделайте общедоступные члены и методы. – mkl