如何使用Python提取Adobe Acrobat Pro DC生成的PDF中的链接?
解决Adobe Acrobat Pro DC生成PDF的链接提取问题
我之前也碰到过一模一样的情况!Adobe Acrobat生成的PDF有时候会用更复杂的结构存储链接,PyPDF2和pdfx对这类特殊格式的支持确实有限。给你几个亲测有效的方案:
方案1:使用PyMuPDF(fitz)
PyMuPDF对各种PDF格式的兼容性非常强,尤其是Acrobat生成的文档,能轻松提取普通链接甚至带动作的链接。
示例代码:
import fitz # 导入PyMuPDF def extract_links_with_pymupdf(pdf_path): links = [] doc = fitz.open(pdf_path) for page_num in range(len(doc)): page = doc.load_page(page_num) # 获取页面所有链接注解 annotations = page.annots() if annotations: for annot in annotations: if annot.type[0] == 8: # 8代表链接类型注解 uri = annot.info.get("uri") if uri: links.append({"page": page_num+1, "url": uri}) # 处理可能的动作链接(比如JavaScript触发的跳转) for link in page.get_links(): if link.get("uri"): links.append({"page": page_num+1, "url": link["uri"]}) doc.close() return links # 使用示例 pdf_links = extract_links_with_pymupdf("your_acrobat_pdf.pdf") for link in pdf_links: print(f"第{link['page']}页: {link['url']}")
方案2:使用pdfplumber
pdfplumber不仅能提取文本,对PDF的注解和链接解析也很到位,适合处理Acrobat生成的结构化PDF。
示例代码:
import pdfplumber def extract_links_with_pdfplumber(pdf_path): links = [] with pdfplumber.open(pdf_path) as pdf: for page_num, page in enumerate(pdf.pages, start=1): # 获取页面所有注解 for annot in page.annots: if annot["type"] == "Link": uri = annot.get("uri") if uri: links.append({"page": page_num, "url": uri}) return links # 使用示例 pdf_links = extract_links_with_pdfplumber("your_acrobat_pdf.pdf") for link in pdf_links: print(f"第{link['page']}页: {link['url']}")
额外注意点
- 如果你的PDF里的链接是图像内嵌的(比如扫描件里的链接),那上面的方法都没用,需要结合OCR工具(比如pytesseract)先识别文本,再提取链接。
- 先确认PDF没有加密,加密的文档需要先解密才能提取内容。
内容的提问来源于stack exchange,提问作者Tejaalle
相关产品推荐
相关产品推荐

