Получить расчетный размер изображения - PullRequest
0 голосов
/ 21 марта 2012

Я узнал, как получить размер изображения, используя itextsharp pdf, размер изображения - это физический размер до того, как изображение было вставлено в pdf.большой, больше, чем размер бумаги.

Но если вы просматриваете изображение в формате PDF с помощью любого программного обеспечения для чтения PDF, изображение будет маленьким.

Как получить расчетный размер изображения внутриpdf?

Я использую этот код, и я не знаю, является ли это правильным, я не знаю, что делать дальше.

Dim pdfDesignedImage As iTextSharp.text.pdf.parser.InlineImageInfo

Это мой второй аккаунт, ябыл неправ на первом.Извини за это.Надеюсь, мне будет лучше с этим аккаунтом.

1 Ответ

2 голосов
/ 21 марта 2012

Существует интерфейс с плохим названием ITextExtractionStrategy, который вы можете реализовать и который даст вам расширенную информацию при извлечении файлов из PDF.Я говорю «плохо названный», потому что, хотя он говорит «текст», он также поддерживает изображения.Этот интерфейс имеет 5 методов, 4 из которых основаны на тексте, и вы можете просто проигнорировать.Интересующий вас метод - RenderImage.Ниже приведена полная рабочая реализация этого:

Public Class ImageInfoTextExtractionStrategy
    Implements iTextSharp.text.pdf.parser.ITextExtractionStrategy
#Region " Extra Methods - Just Ignore "
    Public Sub BeginTextBlock() Implements iTextSharp.text.pdf.parser.IRenderListener.BeginTextBlock
    End Sub
    Public Sub EndTextBlock() Implements iTextSharp.text.pdf.parser.IRenderListener.EndTextBlock
    End Sub
    Public Sub RenderText(renderInfo As iTextSharp.text.pdf.parser.TextRenderInfo) Implements iTextSharp.text.pdf.parser.IRenderListener.RenderText
    End Sub
    Public Function GetResultantText() As String Implements iTextSharp.text.pdf.parser.ITextExtractionStrategy.GetResultantText
        Return Nothing
    End Function
#End Region
    ''//We'll add all image rectangles to this collection
    Private _AllImageRectangles As New List(Of iTextSharp.text.Rectangle)
    Public ReadOnly Property AllImageRectangles As List(Of iTextSharp.text.Rectangle)
        Get
            Return Me._AllImageRectangles
        End Get
    End Property
    Public Sub RenderImage(renderInfo As iTextSharp.text.pdf.parser.ImageRenderInfo) Implements iTextSharp.text.pdf.parser.IRenderListener.RenderImage
        ''//Get the image's matrix
        Dim m = renderInfo.GetImageCTM()
        Dim w, h, x, y As Single
        ''//Get the various parameters from the matrix
        w = m(iTextSharp.text.pdf.parser.Matrix.I11)
        h = m(iTextSharp.text.pdf.parser.Matrix.I22)
        x = m(iTextSharp.text.pdf.parser.Matrix.I31)
        y = m(iTextSharp.text.pdf.parser.Matrix.I32)
        ''//Turn the parameters into a rectangle
        Me._AllImageRectangles.Add(New iTextSharp.text.Rectangle(x, y, x + w, y + h))
    End Sub
End Class

Чтобы использовать этот подкласс, мы передаем его (еще раз с плохим именем) методу iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage()Обычно вы вызываете этот метод и присваиваете строковый результат переменной, но в нашем случае мы не заботимся о тексте, поэтому не заботимся.Чтобы использовать его, вы должны сделать это:

    ''//Path to our pdf with images
    Dim PdfWithImage = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "PdfWithImage.pdf")
    ''//Bind a reader to our PDF
    Dim reader As New PdfReader(PdfWithImage)
    ''//Create an instance of our custom extraction class
    Dim strat As New ImageInfoTextExtractionStrategy()
    ''//Loop through each page in our PDF
    For I = 1 To reader.NumberOfPages
        ''//The GetTextFromPage method does the work even though we are working with images
        iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(reader, I, strat)
    Next
    ''//Get all image rectangles found
    Dim Rects = strat.AllImageRectangles
    For Each R In Rects
        ''//Do something with your rectangles here
    Next
...