Skip to content

Commit

Permalink
Many changes
Browse files Browse the repository at this point in the history
  • Loading branch information
Menghuan1918 committed Dec 22, 2024
1 parent e329848 commit 2a2e5ed
Show file tree
Hide file tree
Showing 7 changed files with 142 additions and 4 deletions.
Empty file.
28 changes: 28 additions & 0 deletions Main.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,34 @@ def get_translator(choice=None):

def create_translator(name):
"""Create translator instance based on name"""
# Get translator-specific settings from environment variables
openai_apikey = os.getenv("openai_apikey")
openai_baseurl = os.getenv("openai_baseurl", "https://api.openai.com/v1")
openai_model = os.getenv("openai_model", "gpt-4o-mini")

ollama_baseurl = os.getenv("ollama_baseurl", "http://localhost:11434/v1")
ollama_model = os.getenv("ollama_model", "qwen2.5")

deepseek_api = os.getenv("deepseek_api")

deeplx_url = os.getenv("deeplx_url", "http://127.0.0.1:1188/translate")
deeplx_src = os.getenv("deeplx_src", "EN")
deeplx_dest = os.getenv("deeplx_dest", "ZH")

deepl_apikey = os.getenv("deepl_apikey")
deepl_dest = os.getenv("deepl_dest", "ZH")

# LLM common settings
temperature = float(os.getenv("temperature", 0.8))
system_prompt = os.getenv("system_prompt", "")
input_prompt = os.getenv("input", "")
extra_type = os.getenv("extra_type", "markdown")
llm_src = os.getenv("llm_src", "English")
llm_dest = os.getenv("llm_dest", "中文")

system_prompt = None if system_prompt == "" else system_prompt
input_prompt = None if input_prompt == "" else input_prompt

if name == "openai":
if not openai_apikey or openai_apikey == "sk-1234567":
print("Error: OpenAI API key not set")
Expand Down
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,14 @@ cp example.env .env

使用pyinstaller进行打包。使用`pip install pyinstaller`进行安装。

### Linux/MacOS

```bash
pyinstaller --onefile --add-data "reference.docx:." -i icon.png app.py
```

### Windows

```bash
pyinstaller --onefile --add-data "reference.docx:." --collect-all pypandoc_binary app.py
pyinstaller --onefile --add-data "reference.docx;." -i icon.png app.py
```
55 changes: 54 additions & 1 deletion app.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,57 @@
from pdfdeal.Doc2X.ConvertV2 import upload_pdf, uid_status
from PySide6.QtWidgets import QMessageBox
from pdfdeal.file_tools import md_replace_imgs
from file_tool import fix_image_size

# 常量
CONFIG_DIR = os.path.expanduser("~/.config/Doc2X")
CONFIG_FILE = os.path.join(CONFIG_DIR, ".env")


# 设置环境变量
def set_translator_env(translator_type, config):
if translator_type == "deepl":
os.environ["deepl_apikey"] = config.get("deepl_apikey", "")
os.environ["deepl_dest"] = config.get("deepl_dest", "")
elif translator_type == "google":
os.environ["google_src"] = config.get("google_src", "")
os.environ["google_dest"] = config.get("google_dest", "")
elif translator_type == "deeplx":
os.environ["deeplx_url"] = config.get("deeplx_url", "")
os.environ["deeplx_src"] = config.get("deeplx_src", "")
os.environ["deeplx_dest"] = config.get("deeplx_dest", "")
elif translator_type == "deepseek":
os.environ["deepseek_api"] = config.get("deepseek_api", "")
# LLM专属设置
os.environ["temperature"] = config.get("temperature", "0.8")
os.environ["system_prompt"] = config.get("system_prompt", "")
os.environ["input"] = config.get("input", "")
os.environ["extra_type"] = config.get("extra_type", "markdown")
os.environ["llm_src"] = config.get("llm_src", "English")
os.environ["llm_dest"] = config.get("llm_dest", "中文")
elif translator_type == "openai":
os.environ["openai_apikey"] = config.get("openai_apikey", "")
os.environ["openai_baseurl"] = config.get("openai_baseurl", "")
os.environ["openai_model"] = config.get("openai_model", "")
# LLM专属设置
os.environ["temperature"] = config.get("temperature", "0.8")
os.environ["system_prompt"] = config.get("system_prompt", "")
os.environ["input"] = config.get("input", "")
os.environ["extra_type"] = config.get("extra_type", "markdown")
os.environ["llm_src"] = config.get("llm_src", "English")
os.environ["llm_dest"] = config.get("llm_dest", "中文")
elif translator_type == "ollama":
os.environ["ollama_baseurl"] = config.get("ollama_baseurl", "")
os.environ["ollama_model"] = config.get("ollama_model", "")
# LLM专属设置
os.environ["temperature"] = config.get("temperature", "0.8")
os.environ["system_prompt"] = config.get("system_prompt", "")
os.environ["input"] = config.get("input", "")
os.environ["extra_type"] = config.get("extra_type", "markdown")
os.environ["llm_src"] = config.get("llm_src", "English")
os.environ["llm_dest"] = config.get("llm_dest", "中文")


class LLMSettingsDialog(QDialog):
def __init__(self, config, parent=None):
super().__init__(parent)
Expand Down Expand Up @@ -156,6 +201,9 @@ def __init__(self, file_path, config, translator_type):

def run(self):
try:
# 设置环境变量
set_translator_env(self.translator_type, self.config)

# 创建自定义打印函数以发出输出
def custom_print(text):
self.output.emit(str(text))
Expand Down Expand Up @@ -215,6 +263,10 @@ async def process_pdf(file_path, apikey):
self.file_path = output_md_path
print("开始下载图片(如果有)...")
md_replace_imgs(mdfile=self.file_path, replace="local", threads=10)
print("开始修复图片大小以解决 pandoc 中图片尺寸问题:")
img_dir = os.path.dirname(self.file_path)
img_folder = os.path.basename(self.file_path).split(".")[0] + "_img"
fix_image_size(os.path.join(img_dir, img_folder))
print("翻译中...")
self.progress.emit(0, 100)
Process_MD(
Expand Down Expand Up @@ -327,7 +379,7 @@ def __init__(self):
layout.addLayout(thread_layout)

# 测试按钮
self.test_btn = QPushButton("保存并测试")
self.test_btn = QPushButton("测试翻译器")
self.test_btn.clicked.connect(self.test_translator)
layout.addWidget(self.test_btn)

Expand Down Expand Up @@ -470,6 +522,7 @@ def run(self):
self.failure.emit(str(e))

translator_type = self.translator_combo.currentText()
set_translator_env(translator_type, self.config)
self.output_text.append("提示: 正在测试翻译器,这可能需要一些时间..")
self.output_text.show()

Expand Down
48 changes: 48 additions & 0 deletions file_tool.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
from PIL import Image
import os
import concurrent.futures


def process_image(file_path: str) -> None:
"""Process a single image file by resaving it.
Args:
file_path (str): Path to the image file
"""
try:
# Open and resave image
with Image.open(file_path) as img:
img.save(file_path, quality=95, optimize=True)
print(f"{os.path.basename(file_path)} ", end="")
except Exception as e:
print(f"Error processing {os.path.basename(file_path)}: {str(e)}")


def fix_image_size(folder_path: str, max_workers: int = 10) -> None:
"""Fix image size issue for pandoc by resaving images in the folder using multiple threads.
Args:
folder_path (str): Path to the folder containing images
max_workers (int, optional): Maximum number of worker threads. Defaults to 4.
"""
# Check if folder exists
if not os.path.exists(folder_path):
print(f"Error: Folder {folder_path} does not exist")
return

# Get all files in folder
files = os.listdir(folder_path)

# Common image extensions
img_extensions = [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".webp"]

# Get list of image files to process
image_files = [
os.path.join(folder_path, file)
for file in files
if any(file.lower().endswith(ext) for ext in img_extensions)
]

# Process images in parallel using ThreadPoolExecutor
with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
executor.map(process_image, image_files)
Binary file added icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 3 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
openai
PySide6
# "pdfdeal[rag]">=1.0.2
pdfdeal[rag]>=1.0.2
git+https://github.com/ssut/py-googletrans.git
httpx==0.27.2
pypandoc_binary
python-dotenv
python-dotenv
pillow

0 comments on commit 2a2e5ed

Please sign in to comment.