XUnity.AutoTranslator终极指南:如何快速修复游戏翻译失效问题
2026/7/10 23:31:13
日常工作经常遇到需要合并多个 PDF 或从大 PDF 中提取某些页面的需求。虽然有很多在线工具,但上传文件到第三方服务器总有隐私顾虑。今天我们就用 Python 的 FastAPI 和 PyPDF 库,自己搭建一个本地运行的 PDF 工具服务。
fromfastapiimportFastAPI,UploadFile,File,HTTPExceptionfromfastapi.responsesimportFileResponsefrompypdfimportPdfReader,PdfWriterimportioimportzipfile app=FastAPI()@app.get("/health")asyncdefhealth():return{"status":"ok"}@app.post("/merge")asyncdefmerge_pdfs(files:list[UploadFile]=File(...)):ifnotfiles:raiseHTTPException(status_code=400,detail="No files uploaded")writer=PdfWriter()forfinfiles:ifnotf.filename.lower().endswith('.pdf'):raiseHTTPException(status_code=400,detail=f"File '{f.filename}' is not a PDF")content=awaitf.read()reader=PdfReader(io.BytesIO(content))forpageinreader.pages:writer.add_page(page)output=io.BytesIO()writer.write(output)output.seek(0)returnFileResponse(output,media_type="application/pdf",filename="merged.pdf")@app.post("/split")asyncdefsplit_pdf(file:UploadFile=File(...)):ifnotfile.filename.lower().endswith('.pdf'):raiseHTTPException(status_code=400,detail="Uploaded file is not a PDF")content=awaitfile.read()reader=PdfReader(io.BytesIO(content))iflen(reader.pages)==0:raiseHTTPException(status_code=400,detail="PDF has no pages")zip_buffer=io.BytesIO()withzipfile.ZipFile(zip_buffer,'w',zipfile.ZIP_DEFLATED)aszf:fori,pageinenumerate(reader.pages):writer=PdfWriter()writer.add_page(page)page_bytes=io.BytesIO()writer.write(page_bytes)page_bytes.seek(0)zf.writestr(f"page_{i+1:04d}.pdf",page_bytes.getvalue())zip_buffer.seek(0)returnFileResponse(zip_buffer,media_type="application/zip",filename="split_pages.zip")if__name__=="__main__":importuvicorn uvicorn.run(app,host="0.0.0.0",port=8765)运行方式 pip install fastapi uvicorn pypdf python-multipart python main.py 启动后访问 即可测试。## 代码要点1.内存处理:使用 io.BytesIO 代替临时文件,速度快且无磁盘残留2.错误处理:校验文件类型、检查空 PDF3.pypdf 库:PyPDF2 的继承者,更现代、维护更活跃---需要类似的自定义工具?我在爱发电提供编程服务,赞助后帮你写代码 👉<https://afdian.com/a/my-worker>发完后把文章链接给我,我帮你记下来后续可以继续发更多引流文章。_