createdocxapi1 / app.py
mgdzx's picture
Update app.py
22b5ba6 verified
import requests
import gradio as gr
from io import BytesIO
from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.shared import Pt
def create_docx(text: str) -> BytesIO:
"""创建Word文档并返回内存字节流"""
doc = Document()
for paragraph_text in text.split('\n'):
if paragraph_text.strip(): # 跳过空行
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run(paragraph_text.strip())
run.font.name = '楷体'
run.font.size = Pt(12)
output = BytesIO()
doc.save(output)
output.seek(0)
return output
def upload_to_tempfiles(doc_stream: BytesIO) -> str:
"""上传文档到临时文件托管平台"""
filename = "document.docx"
api_url = "https://tmpfiles.org/api/v1/upload"
files = {'file': (filename, doc_stream, 'application/vnd.openxmlformats-officedocument.wordprocessingml.document')}
try:
response = requests.post(api_url, files=files)
if response.status_code == 200:
response_json = response.json()
if response_json.get('status') == 'success' and 'data' in response_json and 'url' in response_json['data']:
return response_json['data']['url']
return "上传失败"
except Exception:
return "上传失败"
def process_text(text: str) -> dict:
"""处理API请求的核心函数(无需API Key)"""
# 处理空文本
if not text.strip():
return {"output": "输入文本不能为空"}
# 创建并上传文档
try:
doc_stream = create_docx(text)
file_url = upload_to_tempfiles(doc_stream)
doc_stream.close()
return {"output": file_url}
except Exception as e:
return {"output": f"处理失败: {str(e)}"}
# 创建Gradio接口
app = gr.Interface(
fn=process_text,
inputs=gr.Textbox(label="输入文本", lines=5),
outputs=gr.JSON(label="处理结果"),
title="文本转DOCX API",
description="输入文本将转为楷体居中的DOCX文档,返回文件托管URL",
flagging_mode="never"
)
# 启动应用
if __name__ == "__main__":
app.launch(server_name="0.0.0.0", server_port=7860)