2010-03-03 17 views
14

iTextSharp ve text'i bir PDF'den çıkarmak için reader.GetPageContent yöntemini kullanıyorum. Belgede bulunan her kelimeye ait dikdörtgeni/konumu bulmalıyım. Bir sözcüğün dikdörtgenini/konumunu iTextSharp kullanarak PDF'de almanın bir yolu var mı?iTextSharp - Bir sayfadaki kelimenin konumunu nasıl edinirim?

+1

Sorununuza iyi bir çözüm buldunuz mu? – d456

cevap

20

Evet var. text.pdf.parser paketine, özellikle LocationTextExtractionStrategy'a bakın. Aslında, bu da hile yapamaz. Muhtemelen PdfTextExtractor içine beslemek için TextExtractionStrategy kendi yazmak istersiniz:

MyTexExStrat strat = new MyTexExStrat(); 
PdfTextExtractor.getTextFromPage(reader, pageNum, strat); 
// get the strings-n-rects from strat. 

public class MyTexExStrat implements TextExtractionStrategy { 
    void beginTextBlock() {} 
    void endTextBlock() {} 
    void renderImage(ImageRenderInfo info) {} 
    void renderText(TextRenderInfo info) { 
     // track text and location here. 
    } 
} 

Muhtemelen bir temel paylaşan metni birleştirir nasıl LocationTextExtractionStrategy görmek için kaynak bakmak isteyeceksiniz. Hatta paralel dizileri ve dizileri saklamak için LTES'i değiştirebilirsiniz.

PS: rects inşa etmek, sadece AscentLine & DescentLine almak ve üst ve alt köşelerinde sıra bu koordinatları kullanabilirsiniz:

Vector bottomLeft = info.getDescentLine().getStartPoint(); 
Vector topRight = info.getAscentLine().getEndPoint(); 
Rectangle rect = new Rectangle(bottomLeft.get(Vector.I1), 
           bottomLeft.get(Vector.I2), 
           topRight.get(Vector.I1), 
           topRight.get(Vector.I2)); 

Uyarı: Yukarıdaki kod eşek-u-mes o metin yataydır ve soldan sağa doğru ilerler. Döndürülmüş metin, dikey metin veya sağdan sola (Arapça, İbranice) metinler gibi, onu kırar. Çoğu uygulama için, yukarıdakiler iyi olmalıdır, ancak sınırlarını bilin.

İyi avcılık.

+2

Not: LocationTextExtractionStrategy çözümleyicisi, belgede görünüm sırasına göre metni bulmaz. Altbilgiye (.docx dosyaları) sonra da PDF'ye (DOCX4J ile) dönüştürüyorum. Ayrıştırıcının metin bulmasını sağladım, .docx dosyasının altbilgisi, sonra gövde bölümünde. Örneğin, belgenin altındaki metni bulun, ardından bunun üstündeki metni bulun. Görünüm sırasına göre konumlandırmanız gerekiyorsa, sonuçlarınızı kendiniz sıralamanız gerektiğini görebilirsiniz. –

+0

C# sürümü için bu bağlantıya göz atın https://stackoverflow.com/questions/23909893/getting-coordinates-of-string-using-itextextractionstrategy-and-locationtextextr –

İlgili konular