python合并pdf、添加水印、实现web、URL转二维码


前言

一些关于python的小实践

一、python实现合并pdf

import poimage
from PyPDF2 import PdfReader, PdfWriter
from tqdm import tqdm

def merge2pdf(one_by_one, output):
    """
    @Author & Date  : CoderWanFeng 2022/5/16 23:33
    @Desc  : merge_pdfs(paths=['开篇词.pdf', '中国元宇宙白皮书 (送审稿).pdf'], output='merge.pdf')
    """
    pdf_writer = PdfWriter()

    for path in one_by_one:
        pdf_reader = PdfReader(path)
        # for page in tqdm(range(pdf_reader.getNumPages())):
        for page in simple_progress(range(len(pdf_reader.pages))):
            # 把每张PDF页面加入到这个可读取对象中
            # pdf_writer.addPage(pdf_reader.getPage(page))
            pdf_writer.add_page(pdf_reader.pages[page])

    # 把这个已合并了的PDF文档存储起来
    with open(output, 'wb') as out:
        pdf_writer.write(out)
def simple_progress(base, desc=None, log=True):
    if log and desc:
        return tqdm(iterable=base, desc=desc)
    elif log:
        return tqdm(iterable=base)
    else:
        return base
if __name__ == '__main__':
merge2pdf(one_by_one=[r'D:\test1.pdf', r'D:\test2.pdf'], output=r'D:\output.pdf')

提示:需要安装PyPDF2 等库

pip install PyPDF2

二、python图片添加水印

import poimage
from PyPDF2 import PdfReader, PdfWriter
from tqdm import tqdm

def add_watermark(file, mark, output_path='./', color="#eaeaea", size=30, opacity=1, space=200,
                  angle=30):
    """
    给图片加水印
    Args:
        file: 图片位置
        mark: 水印内容
        output_path: 输出位置
        color: 水印颜色
        size: 水印大小
        opacity: 不透明度,0.01~1
        space: 水印间距
        angle: 水印角度

    Returns:

    """
    poimage.add_watermark(file, mark, output_path, color, size, opacity, space, angle)

if __name__ == '__main__':
    add_watermark(file=r'C:\Users\e2e\Pictures\Screenshot 2024-01-10 101054.png', mark='Wenhaofu')
    poimage.del_watermark(
        input_image=r"E:\pdf\MicrosoftTeams-image (62).png",
        output_image=r'E:\pdf\del_watermark.jpg')

三、python实现web

目标通过Django实现,web里面插入图片视频,并进行简单的排版和描述。

1.Django的安装

pip install django

2.创建项目

2.1 通过终端创建

1.打开终端
2.进入某个目录(项目放在哪就去哪,最好不要出现中文,防止编码问题)
3.执行命令来创建项目
django-admin.exe startproject track_chart_web

比如我们创建项目名为track_chart_web的django项目,输入django-admin.exe startproject track_chart_web,即可看到自动生成的目录结构,此时django项目就创建成功了:

3.创建APP

这里的APP不是手机应用那个APP,而是一部分功能的意思。一个Django项目可能需要处理多个业务,我们将业务拆解,一部分一部分分开来管理代码会比较有条理,所以可以通过创建多个app来分别实现多个业务功能。

用Pycharm打开命令行界面(通过cmd打开也行,不过每次打开都要切换到当前项目路径下,很麻烦,所以最好直接用Pycharm的命令行界面直接打开),然后输入指令python manage.py startapp app名(通过manage.py来创建app)。

python manage.py startapp index

4.快速上手

4.1 确保注册app

在前面3. 创建APP中,我们只是创建的app,但是这样还是不能正常跑起来app中的功能的,我们还得让Django知道,我们写了一个新app,这个声明的过程就是app的注册。此过程需要修改settings.py,过程如下:
1. 找到settings.py,在列表变量INSTALLED_APPS中,添加一个’ ',准备添加新app(我这里app名为index,大家不同app名需要相应的替换一些代码)
2. 我们打开新app目录,查看其apps.py内容

3. 我们需要调用这个类,所以用到我们导入模块的知识点通过.来找到相应文件中的类,所以在第一步写的’'中应该写上

4.2 URL和函数的映射

大家使用网站时,在网站内的页面跳转都会改变URL,不同的URL就需要后台调用不同的功能给用户使用。所以每个URL都得有函数来执行相应的代码。此过程需要修改urls.py,过程如下:

找到urls.py中列表变量urlpatterns,添加一行path(‘’, )

4.3 视图函数的撰写

4.3.1 render()使用

正常应用中,网页都得是html那些文件,我们这现在还是就单纯返回字符串,太单调了。
那我们return后面就不用HttpResponse()了,而是用render()。render()的用法是这样。

# 导入render,一般django默认
from django.shortcuts import render,HttpResponse
def feedback(request):
	# 第一个位子是视图函数的request参数,第二个参数位是html文件路径
    return render(request,"goods_list.html")
4.3.2 模板路径问题

一开始我们改过了settings.py中TEMPLATES字典的DIRS的值为空列表,所以默认的模板路径是当前app文件夹下的templates文件夹中的文件。所以我们在app下创建名为templates的文件夹(必须得为templates,不要拼写错误!),并在templates文件夹下创建html文件。
设置函数和URL对应关系,就可以测试是否可以正常渲染模板文件。

4.3.3 静态文件static

开发过程中,像图片、css、js这些文件都称为静态文件,而这些静态文件,在django项目中也是必须放在规定文件夹中的,这个文件夹必须得叫static,和templates一样不能出现拼写错误。为了方便查找,static中,我们再分img、css、js、plugins来分类存放不同的东西。
我们可以把图片、视频等文件放到img文件夹下面。

4.3.4 html文件编写

例如:我想导入视频和图片,并对其简单排版和添加描述,有如下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        .container {
            display: flex;
            flex-wrap: wrap;
            justify-content: space-around;
            align-items: center;
            max-width: 1200px;
            margin: 0 auto;
            padding: 20px;
        }
        .item {
            width: calc(25% - 20px);
            margin: 10px;
            box-sizing: border-box;
        }
        .video-container, .image-container {
            position: relative;
            overflow: hidden;
        }
        video, img {
            width: 100%;
            height: auto;
            object-fit: cover;
        }
        .description {
            text-align: center;
            font-size: 16px;
            padding: 10px;
            background-color: rgba(0, 0, 0, 0.7);
            color: white;
            margin-top: 10px;
        }
    </style>
    <title>视频与图片展示</title>
</head>
<body>

<div class="container">

    <!-- 视频部分 -->
    <div class="item">
        <div class="video-container">
            <video width="320" height="240" controls>
                <source src="/static/img/4.mp4" type="video/mp4">
                Your browser does not support the video tag.
            </video>
            <div class="description">这是视频的描述</div>
        </div>
    </div>

    <!-- 图片部分 -->
    <div class="item">
        <div class="image-container">
            <img src="/static/img/1.png" alt="图片1描述">
            <div class="description">图片1:这是第一张图片的详细描述。</div>
        </div>
    </div>
    <div class="item">
        <div class="image-container">
            <img src="/static/img/2.jpg" alt="图片2描述">
            <div class="description">图片2:这是第二张图片的详细描述。</div>
        </div>
    </div>
    <div class="item">
        <div class="image-container">
            <img src="/static/img/3.jpg" alt="图片3描述">
            <div class="description">图片3:这是第三张图片的详细描述。</div>
        </div>
    </div>
    <div class="item">
        <div class="image-container">
            <img src="/static/img/4.jpg" alt="图片4描述">
            <div class="description">图片4:这是第四张图片的详细描述。</div>
        </div>
    </div>

</div>

</body>
</html>

修改templates下面的html即可。

4.4 运行Django

python manage.py runserver
http://127.0.0.1:8000/feedback/

浏览器输入http://127.0.0.1:8000/feedback/ 即可访问。

四、python实现URL转二维码

代码如下:

import qrcode
if __name__ == '__main__':

    # 创建二维码对象
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=4,
    )
    # 添加数据(这里是网址)
    url = 'https://www.baidu.***/'
    qr.add_data(url)
    qr.make(fit=True)

    # 保存为PNG文件
    img = qr.make_image(fill='black', back_color='white')
    img.save('my_qrcode.png')

生成的二维码如下所示:

转载请说明出处内容投诉
CSS教程_站长资源网 » python合并pdf、添加水印、实现web、URL转二维码

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买