

お世話になります。  
PythonのPyMuPDFでPDFファイル内のリンクを貼っている部分と該当ページ、地の文を集めて、エクセルに出力するプログラムを作成していますが、`get_links()`ですべての要素が取ってこれるのかどうかわかりません。  
初めて使うライブラリのため、GPT3.5にプログラムを生成させ、自分で修正してみていますがうまく行かない状況です。

[code]

    def extract_links(pdf_path):
        doc = fitz.open(pdf_path)
        links_data = []
    
        for page_num in range(doc.page_count):
            page = doc[page_num]
            links = page.get_links()
    
            for link in links:
                if 'rect' in link:
                    rect = fitz.Rect(link['rect'])
                    link_data = {
                        'Link': link.get('uri', ''),
                        'Page': page_num + 1,
                        'Text': page.get_text('text', clip=rect)
                    }
                    links_data.append(link_data)
    
        doc.close()
        return links_data
    
[/code]

一応リンクのあるページに当たると以下のように

[code]

    In [66]: doc[7].get_links()[0]
    Out[66]: 
    {'kind': 1,
     'xref': 503,
     'from': Rect(385.8999938964844, 360.7300109863281, 449.0400085449219, 380.5299987792969),
     'page': 72,
     'to': Point(40.0, 323.0),
     'zoom': 0.0,
     'id': ''}
    
[/code]

リンクの中身のようなものが帰ってきますが、プログラムの方はうまく作動しないです。  
また、テキストの中身も取れていないような気がします。  
環境はWin10, Python3.10です。

テスト用PDFとして  
`https://phmpt.org/wp-
content/uploads/2022/03/125742_S1_M5_c4591001-A-adrg.pdf`  
を用いています。

詳しい方、解決策をご教示いただけますと幸いです。  
PyMuPDF以外のパッケージでも構いません。  
よろしくお願いいたします。


CC BY-SA 4.0
2023-11-17T18:07:18.790
96812
2023-11-17T19:24:57.623
2023-11-17T18:56:03.817
12457
12457
question
python pdf
PyMuPDFでPDFファイル内のリンクに関する情報を収集するプログラム


まず最初に、英語で答えることを許してください。

I am a maintainer of PyMuPDF. You may be pleased to read that its
documentation now also is available in Japanese:
<https://pymupdf.readthedocs.io/ja/latest/>

To your question:  
An item of `page.get_links()` is a dictionary. Its structure depends on the
**kind** of the link. For example, kind 1 (`LINK_GOTO`) points to some place
within the PDF. This is the case you are interested in it looks like. The
dictionary for `LINK_GOTO` has the following keys:

[code]

    link = {
    "kind": 1,  # = fitz.LINK_GOTO
    "from": rect,  # the "hot area" on source page (reacts to mouse click)
    "page": pno,  # (integer, 0-based) the target page number
    "to": point,  # the target location on the target page
    "zoom": factor,  # a float telling the viewer the magnification factor
    }
    
[/code]

As you will see, the target location is just the page number and a point on
that page. There is no rectangle specified for the target. This is a PDF
restriction, it has nothing to do with PyMuPDF.


CC BY-SA 4.0
2023-11-17T19:24:57.623
96813
2023-11-17T19:24:57.623
60452
96812
answer