VintaSoft Imaging .NET SDK 15.1: Документация для .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