2016-05-07 8 views
0

PDFQueryを使用してPDFをスクラップするのは初めてです。PDFQuery:要素が配置されているページ番号

私がする必要があるのは、いくつかのページを含む価格表から価格を取得することです。私はPDFQueryに製品コードを渡したいのです。コードを見つけて価格を返すべきです。問題は、Githubページの最初の例を使用するとテキストの位置がわかりますが、「名前がページ上のどこにあるのか、どのページにいるのかわからないことに注意してください」ということが明らかです。それは私の価格表でのケースですが、他のすべての例ではページ番号(LTPage[pageid=1])を指定していますが、私はどこにページ番号があるのか​​はわかりません。

ページ番号を指定しないと、すべてのページの同じ場所にあるすべてのテキストが返されます。

また、コードが "92005"、 "92005C"、 "92005G"などのコードになる可能性があるので、関数を追加しました。:containsを単独で使用してもあまり役に立ちません。

要素があるページを選択しようとしましたが、JQuery .closestを使用していますが、どちらも不運です。

私のコードは今、この権利のように見える(= IはPDFMiner documentationPyQuery documentationを確認しかし、私は私を助け何も見えません。

import pdfquery 

pdf = pdfquery.PDFQuery("tests/samples/priceList.pdf") 
pdf.load() 

code = "92005G" 

def exactText(): 
    element = str(vars(this)) 
    text = str("u'" + code + "\\n'") 
    if text in element: 
     return True 
    return False 

#This should work if i could select the page where the element is located 
#page = pdf.pq('LTPage:contains("'+code+'")') 
#pageNum = page.attr('pageid') 

#Here I would replace the "8" with the page number i get, or remove the LTPage 
#selector all together if i need to find the element first and then the page 
label = pdf.pq('LTPage[page_index="8"] LTTextLineHorizontal:contains("'+code+'")').filter(exactText) 

#Since we could use "JQuery selectors" i tried using ".closest", but it returns nothing 
#page = label.closest('LTPage') 
#pageNum = page.attr('pageid') 

left_corner = float(label.attr('x0')) 
bottom_corner = float(label.attr('y0')) 

#Here I would replace the "8" with the page number i get 
price = pdf.pq('LTPage[page_index="8"] LTTextLineHorizontal:in_bbox("%s, %s, %s, %s")' % (left_corner+110, bottom_corner, left_corner+140,  bottom_corner+20)).text() 
print price 

すべてのヘルプは非常に感謝、男と女の子です!

答えて

0

さらにエレガントな方法がありますが、要素があるページを見つけるために私が使ったのは、インターネッテスト( 'LTPage')です。以下のコード例は "My Text"のすべてのインスタンスを見つけてページ上にあります:

for pq in pdf.pq('LTTextLineHorizontal:contains("My Text")'): 
    page_pq = pq.iterancestors('LTPage').next() # Use just the first ancestor 
    print 'Found the text "%s" on page %s' % (pq.layout.get_text(), page_pq.layout.pageid) 

私はそれが助けてくれることを願っています! :)

+0

こんにちは!やってみます!!!私は "PDF"の "すべてのページ"を通過するループで私の問題を "解決"したので、私は最初のページを検索....私didntは私が探していたものを見つける???ページ2などに行く....私はいつも私が探しているページを知っている....しかし、私はそれがパフォーマンスの問題があるかどうかわからない...私は200ページのPDFと出来た!あなたの答えは本当にありがとう!私はそれを試して、戻ってくる.... – aampudia

関連する問題