< Summary

Class:Azure.AI.FormRecognizer.Models.FormPage
Assembly:Azure.AI.FormRecognizer
File(s):C:\Git\azure-sdk-for-net\sdk\formrecognizer\Azure.AI.FormRecognizer\src\FormPage.cs
Covered lines:29
Uncovered lines:0
Coverable lines:29
Total lines:98
Line coverage:100% (29 of 29)
Covered branches:11
Total branches:12
Branch coverage:91.6% (11 of 12)

Metrics

MethodCyclomatic complexity Line coverage Branch coverage
.ctor(...)-100%87.5%
get_PageNumber()-100%100%
get_TextAngle()-100%100%
get_Width()-100%100%
get_Height()-100%100%
get_Unit()-100%100%
get_Lines()-100%100%
get_Tables()-100%100%
ConvertLines(...)-100%100%
ConvertTables(...)-100%100%

File(s)

C:\Git\azure-sdk-for-net\sdk\formrecognizer\Azure.AI.FormRecognizer\src\FormPage.cs

#LineLine coverage
 1// Copyright (c) Microsoft Corporation. All rights reserved.
 2// Licensed under the MIT License.
 3
 4using System.Collections.Generic;
 5
 6namespace Azure.AI.FormRecognizer.Models
 7{
 8    /// <summary>
 9    /// Represents a page recognized from the input document. Contains lines, words, tables and page metadata.
 10    /// </summary>
 11    public class FormPage
 12    {
 21613        internal FormPage(PageResult pageResult, IReadOnlyList<ReadResult> readResults, int pageIndex)
 14        {
 21615            ReadResult readResult = readResults[pageIndex];
 16
 21617            PageNumber = readResult.Page;
 18
 19            // Workaround because the service can sometimes return angles between 180 and 360 (bug).
 20            // Currently tracked by: https://github.com/Azure/azure-sdk-for-net/issues/12319
 21621            TextAngle = readResult.Angle <= 180.0f ? readResult.Angle : readResult.Angle - 360.0f;
 22
 21623            Width = readResult.Width;
 21624            Height = readResult.Height;
 21625            Unit = readResult.Unit;
 21626            Lines = readResult.Lines != null
 21627                ? ConvertLines(readResult.Lines, readResult.Page)
 21628                : new List<FormLine>();
 21629            Tables = pageResult?.Tables != null
 21630                ? ConvertTables(pageResult, readResults, pageIndex)
 21631                : new List<FormTable>();
 21632        }
 33
 34        /// <summary>
 35        /// The 1-based page number in the input document.
 36        /// </summary>
 19637        public int PageNumber { get; }
 38
 39        /// <summary>
 40        /// The general orientation of the text in clockwise direction, measured in degrees between (-180, 180].
 41        /// </summary>
 34442        public float TextAngle { get; }
 43
 44        /// <summary>
 45        /// The width of the image/PDF in pixels/inches, respectively.
 46        /// </summary>
 21247        public float Width { get; }
 48
 49        /// <summary>
 50        /// The height of the image/PDF in pixels/inches, respectively.
 51        /// </summary>
 21252        public float Height { get; }
 53
 54        /// <summary>
 55        /// The unit used by the width, height and <see cref="BoundingBox"/> properties. For images, the unit is
 56        /// &quot;pixel&quot;. For PDF, the unit is &quot;inch&quot;.
 57        /// </summary>
 4858        public LengthUnit Unit { get; }
 59
 60        /// <summary>
 61        /// When `IncludeFieldElements` is set to <c>true</c>, a list of recognized lines of text.
 62        /// An empty list otherwise. For calls to recognize content, this list is always populated. The maximum number o
 63        /// lines returned is 300 per page. The lines are sorted top to bottom, left to right, although in certain cases
 64        /// proximity is treated with higher priority. As the sorting order depends on the detected text, it may change 
 65        /// images and OCR version updates. Thus, business logic should be built upon the actual line location instead o
 66        /// </summary>
 47667        public IReadOnlyList<FormLine> Lines { get; }
 68
 69        /// <summary>
 70        /// A list of extracted tables contained in a page.
 71        /// </summary>
 38872        public IReadOnlyList<FormTable> Tables { get; }
 73
 74        private static IReadOnlyList<FormLine> ConvertLines(IReadOnlyList<TextLine> textLines, int pageNumber)
 75        {
 21676            List<FormLine> rawLines = new List<FormLine>();
 77
 1030478            foreach (TextLine textLine in textLines)
 79            {
 493680                rawLines.Add(new FormLine(textLine, pageNumber));
 81            }
 82
 21683            return rawLines;
 84        }
 85
 86        private static IReadOnlyList<FormTable> ConvertTables(PageResult pageResult, IReadOnlyList<ReadResult> readResul
 87        {
 16488            List<FormTable> tables = new List<FormTable>();
 89
 58490            foreach (var table in pageResult.Tables)
 91            {
 12892                tables.Add(new FormTable(table, readResults, pageIndex));
 93            }
 94
 16495            return tables;
 96        }
 97    }
 98}