0

iTextSharp を使用して PDF ファイルからテキストとフォントの高さを抽出するコードを作成しましたが、テキストの回転を処理しません。その情報をどのように抽出/計算できますか?

コードは次のとおりです。

// 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);
    }
}
4

1 に答える 1

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: コードを見ると、実際にはすでに上昇線と下降線を使用しています。ベース ラインの代わりに、これらのラインのいずれかを使用することもできます。

于 2013-11-08T13:00:45.393 に答える