我学会了使用itextsharp pdf获取图像大小 图像大小是图像插入pdf之前的物理尺寸。
Dim iwidth As Integer = tg.GetAsNumber(PdfName.WIDTH).IntValue
Dim iheight As Integer = tg.GetAsNumber(PdfName.HEIGHT).IntValue
当我提取图像时,图像非常大,大于纸张尺寸。
但如果您使用任何pdf阅读器软件查看pdf中的图像,图像就会很小。
如何在pdf中获得设计的图像尺寸?
我使用这段代码,我不知道是否合适,我不知道下一个想法。
Dim pdfDesignedImage As iTextSharp.text.pdf.parser.InlineImageInfo
这是我的第二个帐户,我先错了。对于那个很抱歉。 我希望我能更好地使用这个帐户。
答案 0 :(得分:2)
有一个名为ITextExtractionStrategy
的名为RenderImage
的名称很差的接口,可以在从PDF中提取内容时为您提供扩展信息。我说“名字不好”,因为虽然它说“文字”,但它也支持图像。这个界面有5种方法,其中4种是基于文本的,你可以忽略。您感兴趣的方法是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
。通常你会调用这个方法并将字符串结果赋给变量,但在我们的例子中我们不关心文本,所以不要。要使用它,你会这样做:
{{1}}