Browse Source

add: 操作word

yq 1 ngày trước cách đây
mục cha
commit
da7066687f
2 tập tin đã thay đổi với 22 bổ sung16 xóa
  1. 17 12
      commom/utils.py
  2. 5 4
      main.py

+ 17 - 12
commom/utils.py

@@ -51,7 +51,7 @@ def f_upload_file(save_path) -> str:
         print('fail with unknown error: {}'.format(e))
 
 
-def f_doc_export(token: str) -> str:
+def f_doc_export(token: str, data: object) -> str:
     # 飞书在线文档转word
     app_id = BaseConfig.app_id
     app_secret = BaseConfig.app_secret
@@ -124,19 +124,24 @@ def f_doc_export(token: str) -> str:
     save_path = os.path.join(word_save_dir, file_name)
     with open(save_path, "wb") as f:
         f.write(response3.file.read())
+    time.sleep(2)
 
     # 操作word
-    doc = Document(save_path)
-    placeholder = ""
-    for paragraph in doc.paragraphs:
-        if not placeholder in paragraph.text:
-            continue
-        # 清除占位符
-        for run in paragraph.runs:
-            run.text = run.text.replace(placeholder, "")
-        table = doc.add_table(rows=1, cols=[])
-        paragraph._element.addnext(table._element)
-    doc.save(save_path)
+    if data is not None:
+        doc = Document(save_path)
+        placeholder = ""
+        for paragraph in doc.paragraphs:
+            if not placeholder in paragraph.text:
+                continue
+            # 清除占位符
+            for run in paragraph.runs:
+                run.text = run.text.replace(placeholder, "")
+
+            table = doc.add_table(rows=1, cols=[])
+
+            paragraph._element.addnext(table._element)
+        doc.save(save_path)
+        time.sleep(2)
 
     word_download_url = f_upload_file(save_path)
 

+ 5 - 4
main.py

@@ -11,7 +11,7 @@ import traceback
 import uuid
 
 import uvicorn
-from fastapi import FastAPI, Request, Path
+from fastapi import FastAPI, Request, Path, Body
 from starlette.responses import RedirectResponse
 
 from commom import f_doc_export, get_logger, request_id_context
@@ -22,12 +22,13 @@ app = FastAPI()
 
 
 def doc_export(
-        token: str = Path(title='doc token', description="文档的token")
+        token: str = Path(title='doc token', description="文档的token"),
+        data: object|None = Body(..., embed=True, description="额外参数")
 ):
     try:
         # request_id = str(uuid.uuid4()) #request_id_context.get()
         # logger.info(f"Request ID: {request_id}, Token: {token}")
-        word_downloda_url = f_doc_export(token)
+        word_downloda_url = f_doc_export(token, data)
         if word_downloda_url:
             return BaseResponse.ofSuccess(word_downloda_url)
         else:
@@ -59,7 +60,7 @@ async def document():
 
 def api_start(host, port):
     app.get("/", response_model=BaseResponse)(document)
-    app.get("/znjd/doc/export/{token}/{request_id}", response_model=BaseResponse)(doc_export)
+    app.post("/znjd/doc/export/{token}/{request_id}", response_model=BaseResponse)(doc_export)
     uvicorn.run(app, host=host, port=port)