VintaSoft Imaging .NET SDK 14.0: Документация для .NET разработчика
В этом разделе
    PDF: Работа с PDF страницей
    В этом разделе
    Класс PdfPage представляет собой страницу PDF документа и позволяет:

    Вот C#/VB.NET код, который демонстрирует, как создать новую PDF страницу и добавить ее в PDF документ:
    // page size
    System.Drawing.RectangleF pageSize = new System.Drawing.RectangleF(0, 0, 600, 800);
    // create new page of specified size
    Vintasoft.Imaging.Pdf.Tree.PdfPage page =
        new Vintasoft.Imaging.Pdf.Tree.PdfPage(document, pageSize);
    // add page to a PDF document
    document.Pages.Add(page);
    
    ' page size
    Dim pageSize As New System.Drawing.RectangleF(0, 0, 600, 800)
    ' create new page of specified size
    Dim page As New Vintasoft.Imaging.Pdf.Tree.PdfPage(document, pageSize)
    ' add page to a PDF document
    document.Pages.Add(page)
    



    Вот C#/VB.NET код, который демонстрирует, как получить информацию о ресурсах изображений на всех страницах PDF документа:
    /// <summary>
    /// Gets and prints information about PDF image resources.
    /// </summary>
    /// <param name="pdfFileName">The filename of PDF document.</param>
    public static void GetImageResourcesInfo(string pdfFileName)
    {
        // open PDF document
        using (Vintasoft.Imaging.Pdf.PdfDocument document = new Vintasoft.Imaging.Pdf.PdfDocument(pdfFileName))
        {
            // for each PDF page
            for (int pageIndex = 0; pageIndex < document.Pages.Count; pageIndex++)
            {
                // get PDF page
                Vintasoft.Imaging.Pdf.Tree.PdfPage page = document.Pages[pageIndex];
                // get a collection of PDF image resources of page
                Vintasoft.Imaging.Pdf.Tree.PdfImageResource[] imageResources = page.GetImages();
                // print the page index and count of image resources
                System.Console.WriteLine("Page {0} Image resources count: {1}", pageIndex + 1, imageResources.Length);
                // for each image resource
                foreach (Vintasoft.Imaging.Pdf.Tree.PdfImageResource imageResource in imageResources)
                {
                    // print information about image resource
                    System.Console.WriteLine("\t {0}x{1} {2,5}bpp {3}",
                        imageResource.Width, imageResource.Height,
                        imageResource.BitsPerPixel, imageResource.Compression);
                }
            }
        }
    }
    
    /* This code example produces the following output:
    
    Page 1 Image resources count: 9
         157x139    32bpp Zip
         157x139     8bpp Jpeg
         700x596    24bpp Jpeg
         686x585    24bpp Jpeg
         459x317    32bpp Jpeg
         459x317     8bpp Zip, Predictor
         484x487    32bpp Jpeg
         484x487     8bpp Zip, Predictor
         824x537    24bpp Zip
    Page 2 Image resources count: 0
    */
    
            ''' <summary>
            ''' Gets and prints information about PDF image resources.
            ''' </summary>
            ''' <param name="pdfFileName">The filename of PDF document.</param>
            Public Shared Sub GetImageResourcesInfo(pdfFileName As String)
                ' open PDF document
                Using document As New Vintasoft.Imaging.Pdf.PdfDocument(pdfFileName)
                    ' for each PDF page
                    For pageIndex As Integer = 0 To document.Pages.Count - 1
                        ' get PDF page
                        Dim page As Vintasoft.Imaging.Pdf.Tree.PdfPage = document.Pages(pageIndex)
                        ' get a collection of PDF image resources of page
                        Dim imageResources As Vintasoft.Imaging.Pdf.Tree.PdfImageResource() = page.GetImages()
                        ' print the page index and count of image resources
                        System.Console.WriteLine("Page {0} Image resources count: {1}", pageIndex + 1, imageResources.Length)
                        ' for each image resource
                        For Each imageResource As Vintasoft.Imaging.Pdf.Tree.PdfImageResource In imageResources
                            ' print information about image resource
                            System.Console.WriteLine(vbTab & " {0}x{1} {2,5}bpp {3}", imageResource.Width, imageResource.Height, imageResource.BitsPerPixel, imageResource.Compression)
                        Next
                    Next
                End Using
            End Sub
    
            ' This code example produces the following output:
    '
    '        Page 1 Image resources count: 9
    '             157x139    32bpp Zip
    '             157x139     8bpp Jpeg
    '             700x596    24bpp Jpeg
    '             686x585    24bpp Jpeg
    '             459x317    32bpp Jpeg
    '             459x317     8bpp Zip, Predictor
    '             484x487    32bpp Jpeg
    '             484x487     8bpp Zip, Predictor
    '             824x537    24bpp Zip
    '        Page 2 Image resources count: 0
    '
    
    



    Система координат и единицы измерения PDF страницы

    PDF страница использует декартову систему координат, т.е. центр системы координат расположен в левом нижнем углу PDF страницы, ось X направлена слева направо, ось Y - снизу вверх.

    PDF документ - это документ в векторном формате, который не содержит информации о разрешении документа, то есть PDF страница документа может быть отрендерена в любом разрешении. По умолчанию PDF страница использует пользовательскую единицу измерения в качестве единицы измерения. 1 пользовательская единица измерения равна 1/72 дюйма.

    Изображение имеет систему координат, отличную от системы координат PDF страницы. Центр системы координат изображения находится в левом верхнем углу изображения, ось X направлена слева направо, ось Y - сверху вниз.

    SDK предоставляет методы, которые упрощают процесс перевода точек из системы координат изображения в систему координат PDF страницы и наоборот:
    Вот список методов класса PdfPage, которые используются для конвертации координат:

    Вот C#/VB.NET код, который демонстрирует, как перевести прямоугольник, заданный в системе координат изображения, в прямоугольник, заданный в системе координат PDF страницы:
    /// <summary>
    /// Converts the rectangle from image space to page space.
    /// </summary>
    /// <param name="rect">Rectangle in image space.</param>
    /// <param name="imageResolution">The image resolution.</param>
    /// <param name="page">The PDF page.</param>
    /// <returns><see cref="System.Drawing.RectangleF"/> structure in PDF page space.</returns>
    public static System.Drawing.RectangleF ConvertRectangleFromImageSpaceToPageSpace(
        System.Drawing.RectangleF rect,
        Vintasoft.Imaging.Resolution imageResolution,
        Vintasoft.Imaging.Pdf.Tree.PdfPage page)
    {
        // Rectangle -> PointF[]
        System.Drawing.PointF[] points = new System.Drawing.PointF[] { 
            rect.Location, 
            new System.Drawing.PointF(rect.X + rect.Width, rect.Y + rect.Height) };
    
        // ImageSpace -> PageSpace
        page.PointsFromImageSpaceToPageSpace(points, imageResolution);
    
        // Points -> RectangleF
        float x0 = System.Math.Min(points[0].X, points[1].X);
        float y0 = System.Math.Min(points[0].Y, points[1].Y);
        float x1 = System.Math.Max(points[0].X, points[1].X);
        float y1 = System.Math.Max(points[0].Y, points[1].Y);
        return new System.Drawing.RectangleF(x0, y0, x1 - x0, y1 - y0);
    }
    
    ''' <summary>
    ''' Converts the rectangle from image space to page space.
    ''' </summary>
    ''' <param name="rect">Rectangle in image space.</param>
    ''' <param name="imageResolution">The image resolution.</param>
    ''' <param name="page">The PDF page.</param>
    ''' <returns><see cref="System.Drawing.RectangleF"/> structure in PDF page space.</returns>
    Public Shared Function ConvertRectangleFromImageSpaceToPageSpace(rect As System.Drawing.RectangleF, imageResolution As Vintasoft.Imaging.Resolution, page As Vintasoft.Imaging.Pdf.Tree.PdfPage) As System.Drawing.RectangleF
        ' Rectangle -> PointF[]
        Dim points As System.Drawing.PointF() = New System.Drawing.PointF() {rect.Location, New System.Drawing.PointF(rect.X + rect.Width, rect.Y + rect.Height)}
    
        ' ImageSpace -> PageSpace
        page.PointsFromImageSpaceToPageSpace(points, imageResolution)
    
        ' Points -> RectangleF
        Dim x0 As Single = System.Math.Min(points(0).X, points(1).X)
        Dim y0 As Single = System.Math.Min(points(0).Y, points(1).Y)
        Dim x1 As Single = System.Math.Max(points(0).X, points(1).X)
        Dim y1 As Single = System.Math.Max(points(0).Y, points(1).Y)
        Return New System.Drawing.RectangleF(x0, y0, x1 - x0, y1 - y0)
    End Function