当前位置: 首页 > wzjs >正文

长春市建设工程信息网站天津seo网站推广

长春市建设工程信息网站,天津seo网站推广,wordpress分类目录seo标题,wordpress 获取所有子页面在现代 Web 开发中,生成 PDF 文档并在其上添加盖章是常见的需求。本文将详细介绍如何使用 Flask 框架和 pdfkit 库来批量生成 PDF,并在其中添加透明 PNG 盖章,最后将生成的 PDF 上传到阿里云 OSS(对象存储服务)。 环境…

在现代 Web 开发中,生成 PDF 文档并在其上添加盖章是常见的需求。本文将详细介绍如何使用 Flask 框架和 pdfkit 库来批量生成 PDF,并在其中添加透明 PNG 盖章,最后将生成的 PDF 上传到阿里云 OSS(对象存储服务)。

环境准备

首先,确保您的开发环境中已安装以下依赖:

pip install Flask pdfkit Pillow PyPDF2 aliyun-oss2

此外,您还需要安装 wkhtmltopdf,这是 pdfkit 的依赖。根据您的操作系统选择安装方式:

  • Ubuntu:

    sudo apt-get install wkhtmltopdf
    
  • CentOS:

    sudo yum install wkhtmltopdf
    

项目结构

以下是 Flask 应用的基本结构:

/your_project
│
├── app.py               # 主应用文件
├── uploads              # 存放生成的 PDF 文件
└── stamp.png            # 透明 PNG 盖章文件

确保将您的透明 PNG 盖章文件放在项目目录中。

Flask 应用代码

以下是完整的 Flask 应用代码,包含生成 PDF、添加盖章以及上传到 OSS 的功能:

from flask import Flask, request, jsonify, send_file
import pdfkit
import os
from PIL import Image
from werkzeug.utils import secure_filename
import oss2app = Flask(__name__)# 设置上传文件的目录
UPLOAD_FOLDER = 'uploads'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER# OSS 配置
OSS_ACCESS_KEY_ID = 'your_access_key_id'
OSS_ACCESS_KEY_SECRET = 'your_access_key_secret'
OSS_ENDPOINT = 'your_oss_endpoint'  # 例如 'oss-cn-region.aliyuncs.com'
OSS_BUCKET_NAME = 'your_bucket_name'# 初始化 OSS 客户端
auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
bucket = oss2.Bucket(auth, OSS_ENDPOINT, OSS_BUCKET_NAME)# PDF 生成函数
def create_pdf(html_content, output_path):pdfkit.from_string(html_content, output_path)# 加盖章函数
def add_stamp_to_pdf(pdf_path, stamp_path, output_path):from PyPDF2 import PdfWriter, PdfReaderstamp = Image.open(stamp_path)stamp.save('temp_stamp.pdf', "PDF")with open(pdf_path, "rb") as pdf_file, open('temp_stamp.pdf', "rb") as stamp_file:pdf_reader = PdfReader(pdf_file)stamp_reader = PdfReader(stamp_file)writer = PdfWriter()for page in pdf_reader.pages:page.merge_page(stamp_reader.pages[0])writer.add_page(page)with open(output_path, "wb") as output_file:writer.write(output_file)# 上传文件到 OSS
def upload_to_oss(file_path, object_name):bucket.put_object_from_file(object_name, file_path)@app.route('/generate_pdf', methods=['POST'])
def generate_pdf():data = request.get_json()if not data or 'html_content' not in data:return jsonify({"error": "Invalid input"}), 400html_content = data['html_content']stamp_path = data.get('stamp_path')  # 可选盖章路径filename = secure_filename('output.pdf')output_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)try:create_pdf(html_content, output_path)if stamp_path:output_path_with_stamp = os.path.join(app.config['UPLOAD_FOLDER'], 'stamped_' + filename)add_stamp_to_pdf(output_path, stamp_path, output_path_with_stamp)# 上传到 OSSupload_to_oss(output_path_with_stamp, 'pdfs/' + filename)return send_file(output_path_with_stamp, as_attachment=True)# 上传到 OSSupload_to_oss(output_path, 'pdfs/' + filename)return send_file(output_path, as_attachment=True)except Exception as e:return jsonify({"error": str(e)}), 500@app.route('/batch_generate', methods=['POST'])
def batch_generate():data = request.get_json()if not data or 'html_contents' not in data:return jsonify({"error": "Invalid input"}), 400output_files = []stamp_path = data.get('stamp_path')  # 可选盖章路径for index, html_content in enumerate(data['html_contents']):filename = secure_filename(f'output_{index}.pdf')output_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)try:create_pdf(html_content, output_path)if stamp_path:output_path_with_stamp = os.path.join(app.config['UPLOAD_FOLDER'], 'stamped_' + filename)add_stamp_to_pdf(output_path, stamp_path, output_path_with_stamp)# 上传到 OSSupload_to_oss(output_path_with_stamp, 'pdfs/' + filename)output_files.append(output_path_with_stamp)else:# 上传到 OSSupload_to_oss(output_path, 'pdfs/' + filename)output_files.append(output_path)except Exception as e:return jsonify({"error": f"Failed to generate PDF {index}: {str(e)}"}), 500return jsonify({"message": "PDFs generated and uploaded to OSS", "files": output_files}), 200if __name__ == '__main__':app.run(debug=True)

代码解析

1. 环境设置

在代码中设置了上传文件的目录,并确保该目录存在。

2. OSS 配置

配置阿里云 OSS 的访问密钥和存储桶信息,并初始化 OSS 客户端。

3. PDF 生成函数

使用 pdfkit 从 HTML 内容生成 PDF 文件。

4. 加盖章函数

使用 Pillow 加载透明 PNG 盖章,并使用 PyPDF2 将其添加到生成的 PDF 上。

5. 上传文件到 OSS

创建 upload_to_oss 函数,将生成的 PDF 文件上传到阿里云 OSS。

6. API 端点

  • /generate_pdf:接收单个 HTML 内容和可选的盖章 PNG 路径,生成 PDF 并上传到 OSS。
  • /batch_generate:接收多个 HTML 内容和可选的盖章 PNG 路径,批量生成 PDF 并上传到 OSS。

使用示例

生成单个 PDF

/generate_pdf 发送 POST 请求,包含 HTML 内容和可选的 PNG 图片路径:

{"html_content": "<h1>Hello, World!</h1>","stamp_path": "path/to/stamp.png"
}

批量生成 PDF

/batch_generate 发送 POST 请求,包含多个 HTML 内容和可选的 PNG 图片路径:

{"html_contents": ["<h1>Document 1</h1>","<h1>Document 2</h1>"],"stamp_path": "path/to/stamp.png"
}

注意事项

  • 安全性:妥善管理您的 OSS 密钥信息,避免在公共代码中暴露。
  • OSS 权限:确保您的阿里云 OSS 存储桶具有相应的权限,以允许上传和访问文件。

总结

通过使用 Flask、pdfkit、透明 PNG 图片和阿里云 OSS,您可以轻松地生成带有盖章的 PDF 文档,并将其上传到云端存储。这种方法在处理大量文档时特别有用,可以有效提高工作效率。

http://www.dtcms.com/wzjs/82517.html

相关文章:

  • 外贸型网站该如何推广链接制作
  • vps搭建vpn无法访问国内网站网络推广和网站推广
  • 常德网站建设设计百度搜索引擎的使用方法
  • 嘉兴云推广网站站内优化主要从哪些方面进行
  • 关键词是在网站后台做的吗深圳市seo网络推广哪家好
  • 南京h5网站建设可以看任何网站的浏览器
  • 网站建设 响应式 北京广东疫情最新消息今天又封了
  • 浙江华企做的网站怎么样sns营销
  • 个人备案网站建设方案书目录搜索引擎有哪些
  • 成人用品批发网站一件代发滕州百度推广
  • 做视频分享网站的参考书企业营销网站建设系统
  • 网站建设 开办费百度平台客服电话是多少
  • 地方门户网站资讯该怎么做品牌宣传推广策划方案
  • 网站开发建设技术特点浏览器打开
  • 连山区网站建设厦门人才网唯一官网登录
  • 如何将自己做的网站推广出去app优化
  • 网站的域名可以更改吗b站视频推广网站动漫
  • 电商网站的需求文档企业查询官网入口
  • asp动态网站开发后期制作郑州网站建设专业乐云seo
  • 做网站用那个浏览器免费的推文制作网站
  • 网站如何做链接四川旅游seo整站优化
  • 清远专业网站建设服务石家庄seo管理
  • 开拓网站建设上海短视频推广
  • 福州专业网站设计团队百度app首页
  • 成都市做网站的公司济南网站推广优化
  • 地方性网站赚钱google ads 推广
  • 企业如何免费做网站bt磁力猫
  • 东莞微信网站建设推荐制作一个app软件需要多少钱
  • 做外贸有必要做个网站吗推广策略有哪些方法
  • linux 下启动 wordpressseo还有用吗