#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
PDF数据提取类 - 使用 pdfplumber 库
用于提取: 文件ID、日期、B00金额
"""

import sys
import json
import re
from pathlib import Path

try:
    import pdfplumber
except ImportError:
    print(json.dumps({
        'code': 500,
        'msg': 'pdfplumber库未安装，请运行: pip install pdfplumber',
        'data': None
    }))
    sys.exit(1)


class PDFExtractor:
    def __init__(self, file_path):
        """
        初始化PDF提取器
        :param file_path: PDF文件路径
        """
        self.file_path = file_path
        self.pdf_text = None
        
        if not Path(file_path).exists():
            raise Exception(f"PDF文件不存在: {file_path}")

    def extract_text(self):
        """使用pdfplumber提取PDF中的所有文本"""
        if self.pdf_text is not None:
            return self.pdf_text
        
        try:
            text_content = ""
            with pdfplumber.open(self.file_path) as pdf:
                #print(f"PDF文件页数: {len(pdf.pages)}")
                for i, page in enumerate(pdf.pages):
                    page_text = page.extract_text()
                    #print(f"第{i+1}页提取结果: {'有内容' if page_text else '无内容'}")
                    if page_text:
                        text_content += page_text + "\n"
                    
                    # 如果直接提取失败，尝试从表格中提取
                    if not page_text or page_text.strip() == "":
                        tables = page.extract_tables()
                        if tables:
                            #print(f"第{i+1}页检测到表格，尝试从表格提取")
                            for table in tables:
                                for row in table:
                                    text_content += " ".join([str(cell) if cell else "" for cell in row]) + "\n"
            
            # 移除这个异常检查 - 即使文本为空也继续处理
            # if not text_content.strip():
            #     raise Exception("PDF提取文本为空")
            
            self.pdf_text = text_content
            return self.pdf_text
        
        except Exception as e:
            raise Exception(f"提取PDF文本失败: {str(e)}")

    def extract_data(self):
        """提取所有关键数据"""
        text = self.extract_text()
        # 移除这个打印语句，避免干扰JSON输出
        # print(f"提取的文本内容:{text}")        
        
        # 修改 extract_data 方法中的 result 构建
        result = {
            'text': text
        }
        
        return result
    

def main():
    """主函数"""
    if len(sys.argv) < 2:
        print(json.dumps({
            'code': 400,
            'msg': 'NO PDF PATH',
            'data': None
        }))
        sys.exit(1)
    
    
    pdf_path = sys.argv[1]
    # pdf_path = 'D:/phpstudy_pro/WWW/vat_api_it_client/resources/tmp/arne_e.pdf';
    import os
    # 规范化路径（处理相对路径部分）
    pdf_path = os.path.normpath(pdf_path)    
    # pdf_path = os.path.normpath(pdf_path)

    try:
        extractor = PDFExtractor(pdf_path)
        data = extractor.extract_data()        
        
        response = {
            'code': 200,
            'msg': 'success',
            'data': {
                'text': data['text']
            }
        }
        
        print(json.dumps(response, ensure_ascii=False))
        sys.exit(0)
    
    except Exception as e:
        response = {
            'code': 500,
            'msg': f'错误: {str(e)}',
            'data': None
        }
        print(json.dumps(response, ensure_ascii=False))
        sys.exit(1)


if __name__ == '__main__':
    main()