2012-03-21 3 views
0

itextsharp를 사용하여 이미지 크기를 얻는 방법을 배웠습니다. pdf 이미지 크기는 이미지가 pdf에 삽입되기 전에 물리적 크기입니다. I는 화상을 추출 디자인 된 이미지 크기를 얻으십시오

Dim iwidth As Integer = tg.GetAsNumber(PdfName.WIDTH).IntValue 
Dim iheight As Integer = tg.GetAsNumber(PdfName.HEIGHT).IntValue 

용지 크기보다 크다 매우 크다.

그러나 PDF 리더 소프트웨어로 이미지를 볼 경우 이미지가 작아집니다.

pdf에서 디자인 된 이미지 크기를 얻으려면 어떻게해야합니까?

나는이 코드를 사용하여 적절한 지 알지 못합니다. 다음에 할 생각이 없습니다.

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

이것은 내 두 번째 계정입니다. 먼저 잘못되었습니다. 미안합니다. 이 계정을 사용하면 더 나을 수 있기를 바랍니다.

답변

1

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 
+0

나는 쓴 텍스트를 정말 유감스럽게 생각하며, 천천히 배우고 있습니다. – XenKid

+0

나는 그것을 얻었다, 대단히 감사한다, 그것은 잘 작동한다. – XenKid

관련 문제