获得设计的图像大小

时间:2012-03-21 09:46:58

标签: itextsharp

  

我学会了使用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

这是我的第二个帐户,我先错了。对于那个很抱歉。 我希望我能更好地使用这个帐户。

1 个答案:

答案 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}}