2013-11-08 3 views
0

Я создал код для извлечения текста и высоты шрифта из файла PDF с помощью iTextSharp, но не обрабатывает поворот текста. Как можно извлечь/вычислить эту информацию?Извлечь высоту и поворот шрифта из файлов PDF с помощью iText/iTextSharp

Вот код:

// Create PDF reader 
var reader = new PdfReader("myfile.pdf"); 

for (var k = 1; k <= reader.NumberOfPages; ++k) 
{ 
    // Get page resources 
    var page = reader.GetPageN(k); 
    var pdfResources = page.GetAsDict(PdfName.RESOURCES); 

    // Create custom render listener, processor, and process page! 
    var listener = new FunnyRenderListener(); 
    var processor = new PdfContentStreamProcessor(listener); 
    var bytes = ContentByteUtils.GetContentBytesForPage(reader, k); 
    processor.ProcessContent(bytes, pdfResources); 
} 

[...] 

public class FunnyRenderListener : IRenderListener 
{ 
    [...] 

    void RenderText(TextRenderInfo renderInfo) 
    { 
     // Get text 
     var text = renderInfo.GetText(); 

     // Get (computed) font size 
     var bottomLeftPoint = renderInfo.GetDescentLine().GetStartPoint(); 
     var topRightPoint = renderInfo.GetAscentLine().GetEndPoint(); 
     var rectangle = new Rectangle(
      bottomLeftPoint[Vector.I1], bottomLeftPoint[Vector.I2], 
      topRightPoint[Vector.I1], topRightPoint[Vector.I2] 
     ); 
     var fontSize = Convert.ToDouble(rectangle.Height); 

     Console.WriteLine("Text: {0}, FontSize: {1}", text, fontSize); 
    } 
} 

ответ

2

Необходимой информации, то есть текст вращение, не доступен непосредственно через TextRenderInfo члена, но у него есть метод

/** 
* Gets the baseline for the text (i.e. the line that the text 'sits' on) 
* This value includes the Rise of the draw operation - see getRise() for the amount added by Rise 
*/ 
public LineSegment GetBaseline() 

Скорее всего по текст вращения Вы имеете в виду поворот этой линии против горизонтальной. Поэтому, используя легкую математику, вы можете рассчитать вращение от этого LineSegment.

PS: Глядя на ваш код, вы на самом деле уже используете линию восхождения и линию спуска. Вы можете использовать любую из этих строк, а не базовую линию.

+0

Итак, все строки 'BaseLine',' AscentLine' и 'DescentLine' будут повернуты, если текст повернут, правильно? –

+0

Справа. BTW, это приведет к тому, что вычисление размера шрифта не будет выполнено для повернутого текста. – mkl

+0

Конечно! Я уже видел ошибочные высоты с несколькими примерами PDF-файлов, которые я пробовал :-) –

Смежные вопросы