当前位置:首页 > 技术 > Python > 正文内容

word转换服务python版本

Watrt3年前 (2023-04-07)Python21120

网页无法打开word文档。但是可以转换为pdf来在网页上找开。用python实现在线转换服务。

from flask import Flask, request, jsonify,redirect,send_from_directory
from win32com.client import constants,gencache
import requests
import os
import pythoncom

app = Flask(__name__)

#定义pdf方法
'''
wordPath:word的文件路径
pdfPath:pdf生成的路径
'''
def Word_to_Pdf(Word_path,Pdf_path):
    pythoncom.CoInitialize()
    word = gencache.EnsureDispatch('Word.Application')
    doc = word.Documents.Open(Word_path,ReadOnly = 1)
    # 转换方法
    doc.ExportAsFixedFormat(Pdf_path,constants.wdExportFormatPDF)
    word.Quit()
@app.route('/convert', methods=['POST'])
def convert_file():
    file_url = request.json.get('fileurl')  # 获取JSON请求中的文件地址参数
    if not file_url:
        return jsonify({'error': '文件参数错误'}), 400  # 如果没有传递文件地址参数,返回错误
    doc_filename = file_url.split('/')[-1]  # 提取文件名
    doc_filepath = os.path.join(os.getcwd()+'./tmp', doc_filename)  # 临时文件路径
    pdf_filename = doc_filename.split('.')[0] + '.pdf'  # 将文件名后缀更改为.pdf
    pdf_filepath = os.path.join(os.getcwd()+'/tmp', pdf_filename)  # 临时PDF文件路径
    r = requests.get(file_url)
    with open(doc_filepath,"wb") as code:
        code.write(r.content)
    print(doc_filepath)
    print(pdf_filepath)
    try:
        Word_to_Pdf(doc_filepath, pdf_filepath)  # 将Word文档转换为PDF
    except Exception as e:
        return jsonify({'error': str(e)}), 500  # 转换失败,返回错误
    return jsonify({'pdfurl': f'http://localhost:88/pdf/{pdf_filename}'}), 200  # 如果成功,返回PDF文件地址

@app.route('/pdf/<filename>', methods=['GET'])
def get_pdf(filename):
    
     root_dir = os.getcwd()
     print(os.path.join(root_dir, 'tmp'))
     return send_from_directory(os.path.join(root_dir, 'tmp'), filename)

if __name__ == '__main__':
    app.run('127.0.0.1',"88")

上来代码已经通过测试。注意模块的安装。转换是调用的win32接口。请求使用json格式如下:

{
    "fileurl": "http://www.028icp.com/upfiles/fujian/20101029152391314456.doc"
}

请求地址是:http://127.0.0.1:88/convert

成功后返回的格式如下:

{
    "pdfurl": "http://localhost:88/pdf/20101029152391314456.pdf"
}

image.png

打赏 支付宝打赏 微信打赏

相关文章

esp32外部中断学习笔记

esp32外部中断学习笔记

思路:我使用的esp32开发板为简易的开发板,因为板上没有用户自己定义的键盘所以在使用中想要输入或者控制无法完成。研究发现在开发板上有的下载按钮是不是可以在进入系统后复用为一个按键呢。实现:参考官方的例程对代码如下首先宏定义参数:#define KYE_0   0    //GPIO0检测 #define KEYS_SET   (1ULL<<0) &nb...

micropython 使用ili9163显示IP地址

micropython 使用ili9163显示IP地址

mian.pyexec(open('./wifi.py').read(),globals()) exec(open('./tft.py').read(),globals())wifi.pyimport network import machine import ntptime import time nic = network.WLAN(network.STA_IF) # c...

asyncio --- 异步 I/O http服务代码

asyncio --- 异步 I/O http服务代码

import asyncioasync def service(reader,writer):    data = await reader.read(1024) #同步读取数据    data =data.decode().replace('\r','<br/>')    print(writer.get_extra_info('peername'))   &nbs...

micropython 1.17编译出现FAILED: esp-idf/mbedtls/x509_crt_bundle

micropython 1.17编译出现FAILED: esp-idf/mbedtls/x509_crt_bundle

micropython 1.17编译出现FAILED: esp-idf/mbedtls/x509_crt_bundle 错误解决方法。出现错误的原因是ssl中的证书过期了。解决办法:1:(Top) > Component config > mbedTLS > Certificate Bundle->Enable trusted root certificate bundle   禁用2:修改配置文件 :sdkconfig.base  中添加入...

python使用requests库下载文件

python使用requests库下载文件

import os import requests def downfile(url): try: url=url.split("@")[0].split("?")[0] urlfile=url.split("/")[-1] print(urlfile) except Exception as e: print("地址不正确...

Python内置函数

Python内置函数

以下是 Python 中的全部内置函数,并列出了它们的作用和参数说明。请注意,以下列出的内置函数是基于 Python 3.9 版本。abs(): 返回一个数的绝对值。参数:abs(x)all(): 如果可迭代对象中的所有元素都为 True,则返回 True。参数:all(iterable)any(): 如果可迭代对象中的任何元素为 True,则返回 True。参数:any(iterable)ascii(): 返回一个包含 ASCII 转义字符的字符串表示。参数:ascii(object)bin(...

使用 tqdm 库在控制台中实现进度条

使用 tqdm 库在控制台中实现进度条

简单用法:from tqdm import tqdm  for i in tqdm(range(2)):   pass100%|███████████████████| 2/2 [00:00<00:00, 1998.72it/s]  从上面可以看到生成一个长度为2的列表传入tqdm中,在for中迭代,此时输出了进度条,这里tqdm全部使用了默认参数,默认进度条样式就是如上所示;通常默认进度条所输出...

搬运lvgl9在线模拟器

搬运lvgl9在线模拟器

基于micropython模拟器地址:lvgl9...