使用Python,Xpath获取所有的漫画章节路径,并下载漫画图片生成单个/多个pdf,并进行pdf合并

使用Python,Xpath获取所有的漫画章节路径,并下载漫画图片生成单个/多个pdf,并进行pdf合并

  • 1 效果图
  • 2 原理
    • 2.1 pa_mh.py获取喜欢的漫画及所有章节
    • 2.2 pyImg2pdf.py根据图片生成单个/多个pdf并增加章节提示
  • 3 源码
    • 3.1 pa_mh.py获取喜欢的漫画及所有章节
    • 3.2 pyImg2pdf.py根据图片生成单个/多个pdf并增加章节提示

多图生成pdf可以用img2pdf。或者pypdf2。

pip install img2pdf
pip install pypdf2

img2pdf 可以传入单个图片路径或者多个图片路径生成 pdf,但没法插入章节信息。
故采用第二种pypdf2 ,依次生成章节封面pdf,以及章节正文pdf,在合并多个pdf

这篇博客介绍使用Python,Xpath获取所有的漫画章节路径,并下载漫画图片生成单个/多个pdf,并进行pdf合并

  1. 从主页,获取所有章节以及每个章节的链接(chapter.txt是所有的章节链接)
  2. 发现每个章节都是图片组成的漫画,获取每章包含的图片并进行下载
  3. 过滤没有下载到的error图片(error.txt包含所有未成功下载的图片)
  4. 根据多图片生成封面、正文pdf
  5. 多个pdf按顺序合并

1 效果图

获取所有章节,每一章节及对应图片:
在这里插入图片描述
章节封面+章节漫画图合并成一个pdf效果图如下:

在这里插入图片描述

章节封面+章节漫画图合并成多个pdf效果图如下:
在这里插入图片描述

2 原理

2.1 pa_mh.py获取喜欢的漫画及所有章节

  1. 从主页,获取所有章节以及每个章节的链接(chapter.txt是所有的章节链接)
  2. 发现每个章节都是图片组成的漫画,获取每章包含的图片并进行下载
  3. 过滤没有下载到的error图片(error.txt包含所有未成功下载的图片)
  4. 根据多图片生成pdf

2.2 pyImg2pdf.py根据图片生成单个/多个pdf并增加章节提示

  1. 生成每个章节的封面pdf(eg ch1.pdf)、每个章节的图片转正文pdf(eg: cqythll1.pdf) 【allPdf.txt记录所有按顺序要合并的文件,需要是绝对路径】
  2. 按顺序封面/正文pdf 进行多个pdf合并cqythll_outputall.pdf 如ch1.pdf,cqythll1.pdf,ch2.pdf,cqythll2.pdf,ch3.pdf,cqythll3.pdf…
  3. 生成文件过大,微读不支持导入进行,拆分合并成多个文件(拆分成3个文件,生成cqythll_output1.pdf cqythll_output2.pdf cqythll_output3.pdf )

3 源码

3.1 pa_mh.py获取喜欢的漫画及所有章节

# pa_mh.py 获取喜欢的漫画及所有章节
# 1. 从主页,获取所有章节以及每个章节的链接(chapter.txt是所有的章节链接)
# 2. 发现每个章节都是图片组成的漫画,获取每章包含的图片并进行下载
# 3. 过滤没有下载到的error图片(error.txt包含所有未成功下载的图片)# -*- coding:utf-8 -*-
import os
from io import BytesIOimport requests
# 导入第三方库
from PIL import Image
from lxml import etree# 下载图片
def downloadImgs(chapter, url):# 设置请求超时(20s)r = requests.get(url, timeout=20)name = url.split("/")[-1]path = 'ch/ch%s/' % (chapter)print(path)if not os.path.exists(path):os.makedirs(path)if r.status_code == requests.codes.ok:with open('ch%s/%s' % (chapter, name), 'wb') as fin:fin.write(r.content)  # 写入图片二进制print('正在下载第%s %s图片' % (chapter, url))else:r.raise_for_status()  # 抛出异常alist = []# 获取所有章节
def getAllChapters():#      https://www.25mh.cc/html/0/7/9/url = 'https://www.25mh.cc/html/0/7/'print(url)for i in range(1, 11):url_page = url + str(i) + '/'r = requests.get(url_page, timeout=20)print(url_page, r)if r.status_code == requests.codes.ok:# print('=== status_code === ', r.status_code)  # 响应码# print('=== headers === ', r.headers)  # 响应头# print('=== Content-Type === ', r.headers.get('Content-Type'))  # 获取响应头中的Content-Type字段# 解析数据r.encoding = 'utf-8'# print('content: ', type(r.text), r.text)#     content = " ".join([r.rstrip() for r in f])html = etree.HTML(r.text, etree.HTMLParser())result = html.xpath("//*[@rel=\"chapter\"]")print(str(i), " result:", len(result))for j, li in enumerate(result):print(str(i), str(j), li.attrib['href'])alist.append(li.attrib['href'])# r:以只读方式打开文件,从头开始读。# rb:以二进制格式打开一个文件用于只读。# 关于写入:# w:打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件# wb:以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等# a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式,不会覆盖原有的内容。如果该文件不存在,创建新文件用于读写# ab+:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。不会覆盖原有的内容。如果该文件不存在,创建新文件用于读写。with open('chapter.txt', 'a', encoding='UTF-8') as fin:fin.writelines('\n'.join(alist))print(len(alist), alist)# 解析每一章节包含的图片链接,并下载
def parse_chapter(alist):# https://www.25mh.cc/manhua/0/7/1121913.htmlurl = 'https://www.25mh.cc'for i, chap in enumerate(alist):url_chap = url + chapprint(str(i), url_chap)r = requests.get(url_chap, timeout=20)print(r.text)if r.status_code == requests.codes.ok:# 解析数据r.encoding = 'utf-8'print('content: ', type(r.text), r.text)for strA in r.text.split("\n"):if (strA.__contains__("<img src=")):print(strA)strc = strA.replace("var imgs = ", "").split("<img src=")for j, img in enumerate(strc):if (not img.__contains__(".jpg")): continueimg_path = img.replace("\\", "").replace(">", "").replace("\"", "").replace(",", "") \.replace(";", "").replace("]", "").replace(" ", "")print(str(j), img_path)if (img_path.__contains__('comic')):with open('valid.txt', 'a', encoding='UTF-8') as fin:fin.writelines(str(i + 1))fin.writelines('img: ' + img_path)print('valid %s' % (str(i + 1)))continuedownloadImgs(str(i + 1) + "_" + chap.replace(".html", "").split("/")[-1], img_path)breakdef pic_to_pdf(image_bytes: bytes) -> bytes:"""将单个图片转换为单张PDF:param image_bytes: 图片的bytes对象:return: PDF的bytes对象"""# 将bytes对象转换为BytesIO对象image_bytes_io = BytesIO(image_bytes)# 从内存中读取图片image_object = Image.open(image_bytes_io)# 打开内存中的文件用于保存PDFwith BytesIO() as result_bytes_io:# 将图片保存为单张PDFimage_object.save(result_bytes_io, "PDF", resolution=100.0)# 获取内存中的文件data = result_bytes_io.getvalue()# 返回PDF的bytes对象return data# 校验未下载成功的照片,并跳过
def validError(img_dir, pdf_path):# 支持的图片文件格式SUPPORT_SUFFIX = ["jpg", "jpeg", "png"]# 遍历文件夹下所有文件for root, dirs, files in os.walk(img_dir, topdown=False):print(root)for i, name in enumerate(files):if (name.__contains__(".pdf")):source_file_path = os.path.join(root, name)source_file_path = source_file_path.replace("\\", '/')os.remove(source_file_path)continue# 提取文件的后缀名file_suffix = os.path.splitext(name)[-1].lstrip(".").lower()# 检测该文件格式是否受到支持if file_suffix not in SUPPORT_SUFFIX:continue# 拼接出图片文件的绝对路径source_file_path = os.path.join(root, name)source_file_path = source_file_path.replace("\\", '/')# 拼接出PDF文件的绝对路径pdf_path = source_file_path.replace(".jpg", ".pdf")target_file_path = pdf_path.replace(".pdf", root.split('/')[-1].split("_")[0].replace("ch", "") + ".pdf")print(source_file_path, name, target_file_path)# 将图片文件转换为PDF文件with open(source_file_path, "rb") as source:try:pic_to_pdf(source.read())# with open(target_file_path, "wb") as target:# target.write(pic_to_pdf(source.read()))except Exception as e:print(e)with open('error.txt', 'a+') as f:f.writelines('\'' + source_file_path + "\',")def getAllChapters2():alist = ['/manhua/0/7/209.html', '/manhua/0/7/211.html', '/manhua/0/7/213.html', '/manhua/0/7/215.html','/manhua/0/7/223.html', '/manhua/0/7/225.html', '/manhua/0/7/227.html', '/manhua/0/7/229.html','/manhua/0/7/231.html', '/manhua/0/7/233.html', '/manhua/0/7/235.html', '/manhua/0/7/237.html','/manhua/0/7/239.html', '/manhua/0/7/241.html', '/manhua/0/7/243.html', '/manhua/0/7/245.html','/manhua/0/7/247.html', '/manhua/0/7/249.html', '/manhua/0/7/251.html', '/manhua/0/7/253.html','/manhua/0/7/255.html', '/manhua/0/7/257.html', '/manhua/0/7/259.html', '/manhua/0/7/261.html','/manhua/0/7/263.html', '/manhua/0/7/265.html', '/manhua/0/7/513.html', '/manhua/0/7/515.html','/manhua/0/7/517.html', '/manhua/0/7/519.html', '/manhua/0/7/521.html', '/manhua/0/7/523.html','/manhua/0/7/525.html', '/manhua/0/7/991.html', '/manhua/0/7/993.html', '/manhua/0/7/995.html','/manhua/0/7/997.html', '/manhua/0/7/999.html', '/manhua/0/7/1001.html', '/manhua/0/7/1003.html','/manhua/0/7/1005.html', '/manhua/0/7/1007.html', '/manhua/0/7/1009.html', '/manhua/0/7/1011.html','/manhua/0/7/1013.html', '/manhua/0/7/1015.html', '/manhua/0/7/1179.html', '/manhua/0/7/1181.html','/manhua/0/7/1183.html', '/manhua/0/7/1185.html', '/manhua/0/7/1187.html', '/manhua/0/7/1189.html','/manhua/0/7/1191.html', '/manhua/0/7/1193.html', '/manhua/0/7/1195.html', '/manhua/0/7/1197.html','/manhua/0/7/1199.html', '/manhua/0/7/1201.html', '/manhua/0/7/1203.html', '/manhua/0/7/1205.html','/manhua/0/7/1207.html', '/manhua/0/7/1209.html', '/manhua/0/7/1211.html', '/manhua/0/7/1213.html','/manhua/0/7/1215.html', '/manhua/0/7/1217.html', '/manhua/0/7/1219.html', '/manhua/0/7/1221.html','/manhua/0/7/1223.html', '/manhua/0/7/1225.html', '/manhua/0/7/1227.html', '/manhua/0/7/1229.html','/manhua/0/7/1231.html', '/manhua/0/7/1233.html', '/manhua/0/7/1235.html', '/manhua/0/7/1237.html','/manhua/0/7/1239.html', '/manhua/0/7/1241.html', '/manhua/0/7/1243.html', '/manhua/0/7/1245.html','/manhua/0/7/1247.html', '/manhua/0/7/1249.html', '/manhua/0/7/1251.html', '/manhua/0/7/1253.html','/manhua/0/7/1255.html', '/manhua/0/7/1257.html', '/manhua/0/7/1259.html', '/manhua/0/7/1261.html','/manhua/0/7/1263.html', '/manhua/0/7/1265.html', '/manhua/0/7/1267.html', '/manhua/0/7/1269.html','/manhua/0/7/1271.html', '/manhua/0/7/1273.html', '/manhua/0/7/1275.html', '/manhua/0/7/1277.html','/manhua/0/7/1279.html', '/manhua/0/7/1281.html', '/manhua/0/7/1283.html', '/manhua/0/7/1285.html','/manhua/0/7/1287.html', '/manhua/0/7/1289.html', '/manhua/0/7/1291.html', '/manhua/0/7/1293.html','/manhua/0/7/1295.html', '/manhua/0/7/1297.html', '/manhua/0/7/1299.html', '/manhua/0/7/1301.html','/manhua/0/7/1303.html', '/manhua/0/7/1305.html', '/manhua/0/7/1307.html', '/manhua/0/7/1309.html','/manhua/0/7/1311.html', '/manhua/0/7/1313.html', '/manhua/0/7/1315.html', '/manhua/0/7/1317.html','/manhua/0/7/1319.html', '/manhua/0/7/1321.html', '/manhua/0/7/1323.html', '/manhua/0/7/1325.html','/manhua/0/7/1327.html', '/manhua/0/7/1329.html', '/manhua/0/7/1331.html', '/manhua/0/7/1333.html','/manhua/0/7/1335.html', '/manhua/0/7/1337.html', '/manhua/0/7/1339.html', '/manhua/0/7/1341.html','/manhua/0/7/1343.html', '/manhua/0/7/1345.html', '/manhua/0/7/1347.html', '/manhua/0/7/1349.html','/manhua/0/7/1351.html', '/manhua/0/7/1353.html', '/manhua/0/7/1355.html', '/manhua/0/7/1357.html','/manhua/0/7/1359.html', '/manhua/0/7/1361.html', '/manhua/0/7/1363.html', '/manhua/0/7/1365.html','/manhua/0/7/1367.html', '/manhua/0/7/1369.html', '/manhua/0/7/1371.html', '/manhua/0/7/1373.html','/manhua/0/7/1375.html', '/manhua/0/7/1377.html', '/manhua/0/7/1379.html', '/manhua/0/7/1381.html','/manhua/0/7/1383.html', '/manhua/0/7/1385.html', '/manhua/0/7/1387.html', '/manhua/0/7/1389.html','/manhua/0/7/1391.html', '/manhua/0/7/1393.html', '/manhua/0/7/1395.html', '/manhua/0/7/1397.html','/manhua/0/7/1399.html', '/manhua/0/7/1401.html', '/manhua/0/7/1403.html', '/manhua/0/7/1405.html','/manhua/0/7/1407.html', '/manhua/0/7/1409.html', '/manhua/0/7/1411.html', '/manhua/0/7/1413.html','/manhua/0/7/1415.html', '/manhua/0/7/1417.html', '/manhua/0/7/1419.html', '/manhua/0/7/1421.html','/manhua/0/7/1423.html', '/manhua/0/7/1425.html', '/manhua/0/7/1427.html', '/manhua/0/7/1429.html','/manhua/0/7/1431.html', '/manhua/0/7/1433.html', '/manhua/0/7/1435.html', '/manhua/0/7/1437.html','/manhua/0/7/1439.html', '/manhua/0/7/1441.html', '/manhua/0/7/1443.html', '/manhua/0/7/1445.html','/manhua/0/7/1447.html', '/manhua/0/7/1449.html', '/manhua/0/7/1451.html', '/manhua/0/7/1453.html','/manhua/0/7/1455.html', '/manhua/0/7/1457.html', '/manhua/0/7/1459.html', '/manhua/0/7/1461.html','/manhua/0/7/1463.html', '/manhua/0/7/1465.html', '/manhua/0/7/1467.html', '/manhua/0/7/1469.html','/manhua/0/7/1471.html', '/manhua/0/7/1473.html', '/manhua/0/7/1475.html', '/manhua/0/7/1477.html','/manhua/0/7/1479.html', '/manhua/0/7/1481.html', '/manhua/0/7/1483.html', '/manhua/0/7/1485.html','/manhua/0/7/1487.html', '/manhua/0/7/1489.html', '/manhua/0/7/1491.html', '/manhua/0/7/1493.html','/manhua/0/7/1495.html', '/manhua/0/7/1497.html', '/manhua/0/7/1499.html', '/manhua/0/7/1501.html','/manhua/0/7/1503.html', '/manhua/0/7/1505.html', '/manhua/0/7/1507.html', '/manhua/0/7/1509.html','/manhua/0/7/1511.html', '/manhua/0/7/1513.html', '/manhua/0/7/1515.html', '/manhua/0/7/1517.html','/manhua/0/7/1519.html', '/manhua/0/7/1521.html', '/manhua/0/7/1523.html', '/manhua/0/7/1525.html','/manhua/0/7/1527.html', '/manhua/0/7/1529.html', '/manhua/0/7/1531.html', '/manhua/0/7/1533.html','/manhua/0/7/1535.html', '/manhua/0/7/1537.html', '/manhua/0/7/1539.html', '/manhua/0/7/1541.html','/manhua/0/7/1543.html', '/manhua/0/7/1545.html', '/manhua/0/7/1547.html', '/manhua/0/7/1549.html','/manhua/0/7/1551.html', '/manhua/0/7/1553.html', '/manhua/0/7/1555.html', '/manhua/0/7/1557.html','/manhua/0/7/1559.html', '/manhua/0/7/1561.html', '/manhua/0/7/1563.html', '/manhua/0/7/1565.html','/manhua/0/7/1567.html', '/manhua/0/7/1569.html', '/manhua/0/7/1571.html', '/manhua/0/7/1573.html','/manhua/0/7/1575.html', '/manhua/0/7/1577.html', '/manhua/0/7/1579.html', '/manhua/0/7/1581.html','/manhua/0/7/1583.html', '/manhua/0/7/1585.html', '/manhua/0/7/1587.html', '/manhua/0/7/1589.html','/manhua/0/7/1591.html', '/manhua/0/7/1593.html', '/manhua/0/7/1595.html', '/manhua/0/7/1597.html','/manhua/0/7/1599.html', '/manhua/0/7/1601.html', '/manhua/0/7/1603.html', '/manhua/0/7/1605.html','/manhua/0/7/1607.html', '/manhua/0/7/1609.html', '/manhua/0/7/1611.html', '/manhua/0/7/1613.html','/manhua/0/7/1615.html', '/manhua/0/7/1617.html', '/manhua/0/7/1687.html', '/manhua/0/7/1689.html','/manhua/0/7/1691.html', '/manhua/0/7/1693.html', '/manhua/0/7/1695.html', '/manhua/0/7/1697.html','/manhua/0/7/1699.html', '/manhua/0/7/1701.html', '/manhua/0/7/1703.html', '/manhua/0/7/1705.html','/manhua/0/7/1707.html', '/manhua/0/7/1709.html', '/manhua/0/7/1711.html', '/manhua/0/7/1713.html','/manhua/0/7/1715.html', '/manhua/0/7/1717.html', '/manhua/0/7/1719.html', '/manhua/0/7/1721.html','/manhua/0/7/1723.html', '/manhua/0/7/1725.html', '/manhua/0/7/1727.html', '/manhua/0/7/1729.html','/manhua/0/7/1731.html', '/manhua/0/7/1733.html', '/manhua/0/7/1735.html', '/manhua/0/7/1737.html','/manhua/0/7/1739.html', '/manhua/0/7/1741.html', '/manhua/0/7/1743.html', '/manhua/0/7/1745.html','/manhua/0/7/1747.html', '/manhua/0/7/1749.html', '/manhua/0/7/1751.html', '/manhua/0/7/1753.html','/manhua/0/7/1755.html', '/manhua/0/7/1757.html', '/manhua/0/7/1759.html', '/manhua/0/7/1761.html','/manhua/0/7/2029.html', '/manhua/0/7/2031.html', '/manhua/0/7/14597.html', '/manhua/0/7/30547.html','/manhua/0/7/34253.html', '/manhua/0/7/39757.html', '/manhua/0/7/42417.html', '/manhua/0/7/50723.html','/manhua/0/7/52753.html', '/manhua/0/7/57479.html', '/manhua/0/7/58195.html', '/manhua/0/7/62525.html','/manhua/0/7/97513.html', '/manhua/0/7/97515.html', '/manhua/0/7/101085.html', '/manhua/0/7/114537.html','/manhua/0/7/115757.html', '/manhua/0/7/115759.html', '/manhua/0/7/153413.html', '/manhua/0/7/153415.html','/manhua/0/7/153417.html', '/manhua/0/7/153419.html', '/manhua/0/7/153421.html', '/manhua/0/7/153423.html','/manhua/0/7/153425.html', '/manhua/0/7/153427.html', '/manhua/0/7/153429.html', '/manhua/0/7/153431.html','/manhua/0/7/153433.html', '/manhua/0/7/153435.html', '/manhua/0/7/153437.html', '/manhua/0/7/156243.html','/manhua/0/7/157147.html', '/manhua/0/7/166907.html', '/manhua/0/7/173679.html', '/manhua/0/7/174205.html','/manhua/0/7/179245.html', '/manhua/0/7/182009.html', '/manhua/0/7/185369.html', '/manhua/0/7/186057.html','/manhua/0/7/196033.html', '/manhua/0/7/196035.html', '/manhua/0/7/240687.html', '/manhua/0/7/240689.html','/manhua/0/7/240691.html', '/manhua/0/7/240693.html', '/manhua/0/7/240695.html', '/manhua/0/7/240697.html','/manhua/0/7/240699.html', '/manhua/0/7/240701.html', '/manhua/0/7/240703.html', '/manhua/0/7/240705.html','/manhua/0/7/240707.html', '/manhua/0/7/240709.html', '/manhua/0/7/240711.html', '/manhua/0/7/240713.html','/manhua/0/7/240715.html', '/manhua/0/7/240717.html', '/manhua/0/7/240719.html', '/manhua/0/7/240721.html','/manhua/0/7/240723.html', '/manhua/0/7/240725.html', '/manhua/0/7/240727.html', '/manhua/0/7/240729.html','/manhua/0/7/240731.html', '/manhua/0/7/240733.html', '/manhua/0/7/524833.html', '/manhua/0/7/1121855.html','/manhua/0/7/1121857.html', '/manhua/0/7/1121859.html', '/manhua/0/7/1121861.html', '/manhua/0/7/1121863.html','/manhua/0/7/1121865.html', '/manhua/0/7/1121867.html', '/manhua/0/7/1121869.html', '/manhua/0/7/1121871.html','/manhua/0/7/1121873.html', '/manhua/0/7/1121875.html', '/manhua/0/7/1121877.html', '/manhua/0/7/1121879.html','/manhua/0/7/1121881.html', '/manhua/0/7/1121883.html', '/manhua/0/7/1121885.html', '/manhua/0/7/1121887.html','/manhua/0/7/1121889.html', '/manhua/0/7/1121891.html', '/manhua/0/7/1121893.html', '/manhua/0/7/1121895.html','/manhua/0/7/1121897.html', '/manhua/0/7/1121899.html', '/manhua/0/7/1121901.html', '/manhua/0/7/1121903.html','/manhua/0/7/1121905.html', '/manhua/0/7/1121907.html', '/manhua/0/7/1121909.html', '/manhua/0/7/1121911.html','/manhua/0/7/1121913.html', '/manhua/0/7/1121915.html', '/manhua/0/7/1121917.html', '/manhua/0/7/1121919.html','/manhua/0/7/1121921.html', '/manhua/0/7/1121923.html', '/manhua/0/7/1121925.html', '/manhua/0/7/1121927.html','/manhua/0/7/1121929.html', '/manhua/0/7/1121931.html', '/manhua/0/7/1121933.html', '/manhua/0/7/1121935.html','/manhua/0/7/1121937.html', '/manhua/0/7/1121939.html', '/manhua/0/7/1121941.html', '/manhua/0/7/1121943.html','/manhua/0/7/1121945.html', '/manhua/0/7/1121947.html', '/manhua/0/7/1121949.html', '/manhua/0/7/1121951.html','/manhua/0/7/1121953.html', '/manhua/0/7/1121955.html', '/manhua/0/7/1121957.html', '/manhua/0/7/1121959.html','/manhua/0/7/1121961.html', '/manhua/0/7/1121963.html', '/manhua/0/7/1121965.html', '/manhua/0/7/1121967.html','/manhua/0/7/1121969.html', '/manhua/0/7/1121971.html', '/manhua/0/7/1121973.html', '/manhua/0/7/1121975.html','/manhua/0/7/1121977.html', '/manhua/0/7/1121979.html', '/manhua/0/7/1121981.html', '/manhua/0/7/1121983.html','/manhua/0/7/1121985.html', '/manhua/0/7/1121987.html', '/manhua/0/7/1121989.html', '/manhua/0/7/1121991.html','/manhua/0/7/1121993.html', '/manhua/0/7/1121995.html', '/manhua/0/7/1121997.html', '/manhua/0/7/1121999.html','/manhua/0/7/1122001.html', '/manhua/0/7/1122003.html', '/manhua/0/7/1122005.html', '/manhua/0/7/1122007.html','/manhua/0/7/1122009.html', '/manhua/0/7/1122011.html', '/manhua/0/7/1122013.html', '/manhua/0/7/1122015.html','/manhua/0/7/1122017.html', '/manhua/0/7/1122019.html', '/manhua/0/7/1122021.html', '/manhua/0/7/1122023.html','/manhua/0/7/1122025.html', '/manhua/0/7/1122027.html', '/manhua/0/7/1122029.html', '/manhua/0/7/1122031.html','/manhua/0/7/1122033.html', '/manhua/0/7/1122035.html', '/manhua/0/7/1122037.html', '/manhua/0/7/1122039.html','/manhua/0/7/1122041.html', '/manhua/0/7/1122043.html', '/manhua/0/7/1122045.html', '/manhua/0/7/1122047.html']return alistlist = getAllChapters()
# alist = getAllChapters2()img_all = parse_chapter(alist)
validError('ch/', 'ch2/')

3.2 pyImg2pdf.py根据图片生成单个/多个pdf并增加章节提示

# pyImg2pdf.py 根据图片生成单个/多个pdf并增加章节提示
# 1. 生成每个章节的封面pdf(eg ch1.pdf)、每个章节的图片转正文pdf(eg: cqythll1.pdf)  【allPdf.txt记录所有按顺序要合并的文件,需要是绝对路径】
# 2. 按顺序封面/正文pdf 进行多个pdf合并cqythll_outputall.pdf  如ch1.pdf,cqythll1.pdf,ch2.pdf,cqythll2.pdf,ch3.pdf,cqythll3.pdf...
# 3. 生成文件过大,微读不支持导入进行,拆分合并成多个文件(拆分成3个文件,生成cqythll_output1.pdf cqythll_output2.pdf cqythll_output3.pdf )import img2pdf
from PyPDF2 import PdfMerger
from imutils import pathsalist = ['/manhua/0/7/209.html', '/manhua/0/7/211.html', '/manhua/0/7/213.html', '/manhua/0/7/215.html','/manhua/0/7/223.html', '/manhua/0/7/225.html', '/manhua/0/7/227.html', '/manhua/0/7/229.html','/manhua/0/7/231.html', '/manhua/0/7/233.html', '/manhua/0/7/235.html', '/manhua/0/7/237.html','/manhua/0/7/239.html', '/manhua/0/7/241.html', '/manhua/0/7/243.html', '/manhua/0/7/245.html','/manhua/0/7/247.html', '/manhua/0/7/249.html', '/manhua/0/7/251.html', '/manhua/0/7/253.html','/manhua/0/7/255.html', '/manhua/0/7/257.html', '/manhua/0/7/259.html', '/manhua/0/7/261.html','/manhua/0/7/263.html', '/manhua/0/7/265.html', '/manhua/0/7/513.html', '/manhua/0/7/515.html','/manhua/0/7/517.html', '/manhua/0/7/519.html', '/manhua/0/7/521.html', '/manhua/0/7/523.html','/manhua/0/7/525.html', '/manhua/0/7/991.html', '/manhua/0/7/993.html', '/manhua/0/7/995.html','/manhua/0/7/997.html', '/manhua/0/7/999.html', '/manhua/0/7/1001.html', '/manhua/0/7/1003.html','/manhua/0/7/1005.html', '/manhua/0/7/1007.html', '/manhua/0/7/1009.html', '/manhua/0/7/1011.html','/manhua/0/7/1013.html', '/manhua/0/7/1015.html', '/manhua/0/7/1179.html', '/manhua/0/7/1181.html','/manhua/0/7/1183.html', '/manhua/0/7/1185.html', '/manhua/0/7/1187.html', '/manhua/0/7/1189.html','/manhua/0/7/1191.html', '/manhua/0/7/1193.html', '/manhua/0/7/1195.html', '/manhua/0/7/1197.html','/manhua/0/7/1199.html', '/manhua/0/7/1201.html', '/manhua/0/7/1203.html', '/manhua/0/7/1205.html','/manhua/0/7/1207.html', '/manhua/0/7/1209.html', '/manhua/0/7/1211.html', '/manhua/0/7/1213.html','/manhua/0/7/1215.html', '/manhua/0/7/1217.html', '/manhua/0/7/1219.html', '/manhua/0/7/1221.html','/manhua/0/7/1223.html', '/manhua/0/7/1225.html', '/manhua/0/7/1227.html', '/manhua/0/7/1229.html','/manhua/0/7/1231.html', '/manhua/0/7/1233.html', '/manhua/0/7/1235.html', '/manhua/0/7/1237.html','/manhua/0/7/1239.html', '/manhua/0/7/1241.html', '/manhua/0/7/1243.html', '/manhua/0/7/1245.html','/manhua/0/7/1247.html', '/manhua/0/7/1249.html', '/manhua/0/7/1251.html', '/manhua/0/7/1253.html','/manhua/0/7/1255.html', '/manhua/0/7/1257.html', '/manhua/0/7/1259.html', '/manhua/0/7/1261.html','/manhua/0/7/1263.html', '/manhua/0/7/1265.html', '/manhua/0/7/1267.html', '/manhua/0/7/1269.html','/manhua/0/7/1271.html', '/manhua/0/7/1273.html', '/manhua/0/7/1275.html', '/manhua/0/7/1277.html','/manhua/0/7/1279.html', '/manhua/0/7/1281.html', '/manhua/0/7/1283.html', '/manhua/0/7/1285.html','/manhua/0/7/1287.html', '/manhua/0/7/1289.html', '/manhua/0/7/1291.html', '/manhua/0/7/1293.html','/manhua/0/7/1295.html', '/manhua/0/7/1297.html', '/manhua/0/7/1299.html', '/manhua/0/7/1301.html','/manhua/0/7/1303.html', '/manhua/0/7/1305.html', '/manhua/0/7/1307.html', '/manhua/0/7/1309.html','/manhua/0/7/1311.html', '/manhua/0/7/1313.html', '/manhua/0/7/1315.html', '/manhua/0/7/1317.html','/manhua/0/7/1319.html', '/manhua/0/7/1321.html', '/manhua/0/7/1323.html', '/manhua/0/7/1325.html','/manhua/0/7/1327.html', '/manhua/0/7/1329.html', '/manhua/0/7/1331.html', '/manhua/0/7/1333.html','/manhua/0/7/1335.html', '/manhua/0/7/1337.html', '/manhua/0/7/1339.html', '/manhua/0/7/1341.html','/manhua/0/7/1343.html', '/manhua/0/7/1345.html', '/manhua/0/7/1347.html', '/manhua/0/7/1349.html','/manhua/0/7/1351.html', '/manhua/0/7/1353.html', '/manhua/0/7/1355.html', '/manhua/0/7/1357.html','/manhua/0/7/1359.html', '/manhua/0/7/1361.html', '/manhua/0/7/1363.html', '/manhua/0/7/1365.html','/manhua/0/7/1367.html', '/manhua/0/7/1369.html', '/manhua/0/7/1371.html', '/manhua/0/7/1373.html','/manhua/0/7/1375.html', '/manhua/0/7/1377.html', '/manhua/0/7/1379.html', '/manhua/0/7/1381.html','/manhua/0/7/1383.html', '/manhua/0/7/1385.html', '/manhua/0/7/1387.html', '/manhua/0/7/1389.html','/manhua/0/7/1391.html', '/manhua/0/7/1393.html', '/manhua/0/7/1395.html', '/manhua/0/7/1397.html','/manhua/0/7/1399.html', '/manhua/0/7/1401.html', '/manhua/0/7/1403.html', '/manhua/0/7/1405.html','/manhua/0/7/1407.html', '/manhua/0/7/1409.html', '/manhua/0/7/1411.html', '/manhua/0/7/1413.html','/manhua/0/7/1415.html', '/manhua/0/7/1417.html', '/manhua/0/7/1419.html', '/manhua/0/7/1421.html','/manhua/0/7/1423.html', '/manhua/0/7/1425.html', '/manhua/0/7/1427.html', '/manhua/0/7/1429.html','/manhua/0/7/1431.html', '/manhua/0/7/1433.html', '/manhua/0/7/1435.html', '/manhua/0/7/1437.html','/manhua/0/7/1439.html', '/manhua/0/7/1441.html', '/manhua/0/7/1443.html', '/manhua/0/7/1445.html','/manhua/0/7/1447.html', '/manhua/0/7/1449.html', '/manhua/0/7/1451.html', '/manhua/0/7/1453.html','/manhua/0/7/1455.html', '/manhua/0/7/1457.html', '/manhua/0/7/1459.html', '/manhua/0/7/1461.html','/manhua/0/7/1463.html', '/manhua/0/7/1465.html', '/manhua/0/7/1467.html', '/manhua/0/7/1469.html','/manhua/0/7/1471.html', '/manhua/0/7/1473.html', '/manhua/0/7/1475.html', '/manhua/0/7/1477.html','/manhua/0/7/1479.html', '/manhua/0/7/1481.html', '/manhua/0/7/1483.html', '/manhua/0/7/1485.html','/manhua/0/7/1487.html', '/manhua/0/7/1489.html', '/manhua/0/7/1491.html', '/manhua/0/7/1493.html','/manhua/0/7/1495.html', '/manhua/0/7/1497.html', '/manhua/0/7/1499.html', '/manhua/0/7/1501.html','/manhua/0/7/1503.html', '/manhua/0/7/1505.html', '/manhua/0/7/1507.html', '/manhua/0/7/1509.html','/manhua/0/7/1511.html', '/manhua/0/7/1513.html', '/manhua/0/7/1515.html', '/manhua/0/7/1517.html','/manhua/0/7/1519.html', '/manhua/0/7/1521.html', '/manhua/0/7/1523.html', '/manhua/0/7/1525.html','/manhua/0/7/1527.html', '/manhua/0/7/1529.html', '/manhua/0/7/1531.html', '/manhua/0/7/1533.html','/manhua/0/7/1535.html', '/manhua/0/7/1537.html', '/manhua/0/7/1539.html', '/manhua/0/7/1541.html','/manhua/0/7/1543.html', '/manhua/0/7/1545.html', '/manhua/0/7/1547.html', '/manhua/0/7/1549.html','/manhua/0/7/1551.html', '/manhua/0/7/1553.html', '/manhua/0/7/1555.html', '/manhua/0/7/1557.html','/manhua/0/7/1559.html', '/manhua/0/7/1561.html', '/manhua/0/7/1563.html', '/manhua/0/7/1565.html','/manhua/0/7/1567.html', '/manhua/0/7/1569.html', '/manhua/0/7/1571.html', '/manhua/0/7/1573.html','/manhua/0/7/1575.html', '/manhua/0/7/1577.html', '/manhua/0/7/1579.html', '/manhua/0/7/1581.html','/manhua/0/7/1583.html', '/manhua/0/7/1585.html', '/manhua/0/7/1587.html', '/manhua/0/7/1589.html','/manhua/0/7/1591.html', '/manhua/0/7/1593.html', '/manhua/0/7/1595.html', '/manhua/0/7/1597.html','/manhua/0/7/1599.html', '/manhua/0/7/1601.html', '/manhua/0/7/1603.html', '/manhua/0/7/1605.html','/manhua/0/7/1607.html', '/manhua/0/7/1609.html', '/manhua/0/7/1611.html', '/manhua/0/7/1613.html','/manhua/0/7/1615.html', '/manhua/0/7/1617.html', '/manhua/0/7/1687.html', '/manhua/0/7/1689.html','/manhua/0/7/1691.html', '/manhua/0/7/1693.html', '/manhua/0/7/1695.html', '/manhua/0/7/1697.html','/manhua/0/7/1699.html', '/manhua/0/7/1701.html', '/manhua/0/7/1703.html', '/manhua/0/7/1705.html','/manhua/0/7/1707.html', '/manhua/0/7/1709.html', '/manhua/0/7/1711.html', '/manhua/0/7/1713.html','/manhua/0/7/1715.html', '/manhua/0/7/1717.html', '/manhua/0/7/1719.html', '/manhua/0/7/1721.html','/manhua/0/7/1723.html', '/manhua/0/7/1725.html', '/manhua/0/7/1727.html', '/manhua/0/7/1729.html','/manhua/0/7/1731.html', '/manhua/0/7/1733.html', '/manhua/0/7/1735.html', '/manhua/0/7/1737.html','/manhua/0/7/1739.html', '/manhua/0/7/1741.html', '/manhua/0/7/1743.html', '/manhua/0/7/1745.html','/manhua/0/7/1747.html', '/manhua/0/7/1749.html', '/manhua/0/7/1751.html', '/manhua/0/7/1753.html','/manhua/0/7/1755.html', '/manhua/0/7/1757.html', '/manhua/0/7/1759.html', '/manhua/0/7/1761.html','/manhua/0/7/2029.html', '/manhua/0/7/2031.html', '/manhua/0/7/14597.html', '/manhua/0/7/30547.html','/manhua/0/7/34253.html', '/manhua/0/7/39757.html', '/manhua/0/7/42417.html', '/manhua/0/7/50723.html','/manhua/0/7/52753.html', '/manhua/0/7/57479.html', '/manhua/0/7/58195.html', '/manhua/0/7/62525.html','/manhua/0/7/97513.html', '/manhua/0/7/97515.html', '/manhua/0/7/101085.html', '/manhua/0/7/114537.html','/manhua/0/7/115757.html', '/manhua/0/7/115759.html', '/manhua/0/7/153413.html', '/manhua/0/7/153415.html','/manhua/0/7/153417.html', '/manhua/0/7/153419.html', '/manhua/0/7/153421.html', '/manhua/0/7/153423.html','/manhua/0/7/153425.html', '/manhua/0/7/153427.html', '/manhua/0/7/153429.html', '/manhua/0/7/153431.html','/manhua/0/7/153433.html', '/manhua/0/7/153435.html', '/manhua/0/7/153437.html', '/manhua/0/7/156243.html','/manhua/0/7/157147.html', '/manhua/0/7/166907.html', '/manhua/0/7/173679.html', '/manhua/0/7/174205.html','/manhua/0/7/179245.html', '/manhua/0/7/182009.html', '/manhua/0/7/185369.html', '/manhua/0/7/186057.html','/manhua/0/7/196033.html', '/manhua/0/7/196035.html', '/manhua/0/7/240687.html', '/manhua/0/7/240689.html','/manhua/0/7/240691.html', '/manhua/0/7/240693.html', '/manhua/0/7/240695.html', '/manhua/0/7/240697.html','/manhua/0/7/240699.html', '/manhua/0/7/240701.html', '/manhua/0/7/240703.html', '/manhua/0/7/240705.html','/manhua/0/7/240707.html', '/manhua/0/7/240709.html', '/manhua/0/7/240711.html', '/manhua/0/7/240713.html','/manhua/0/7/240715.html', '/manhua/0/7/240717.html', '/manhua/0/7/240719.html', '/manhua/0/7/240721.html','/manhua/0/7/240723.html', '/manhua/0/7/240725.html', '/manhua/0/7/240727.html', '/manhua/0/7/240729.html','/manhua/0/7/240731.html', '/manhua/0/7/240733.html', '/manhua/0/7/524833.html', '/manhua/0/7/1121855.html','/manhua/0/7/1121857.html', '/manhua/0/7/1121859.html', '/manhua/0/7/1121861.html', '/manhua/0/7/1121863.html','/manhua/0/7/1121865.html', '/manhua/0/7/1121867.html', '/manhua/0/7/1121869.html', '/manhua/0/7/1121871.html','/manhua/0/7/1121873.html', '/manhua/0/7/1121875.html', '/manhua/0/7/1121877.html', '/manhua/0/7/1121879.html','/manhua/0/7/1121881.html', '/manhua/0/7/1121883.html', '/manhua/0/7/1121885.html', '/manhua/0/7/1121887.html','/manhua/0/7/1121889.html', '/manhua/0/7/1121891.html', '/manhua/0/7/1121893.html', '/manhua/0/7/1121895.html','/manhua/0/7/1121897.html', '/manhua/0/7/1121899.html', '/manhua/0/7/1121901.html', '/manhua/0/7/1121903.html','/manhua/0/7/1121905.html', '/manhua/0/7/1121907.html', '/manhua/0/7/1121909.html', '/manhua/0/7/1121911.html','/manhua/0/7/1121913.html', '/manhua/0/7/1121915.html', '/manhua/0/7/1121917.html', '/manhua/0/7/1121919.html','/manhua/0/7/1121921.html', '/manhua/0/7/1121923.html', '/manhua/0/7/1121925.html', '/manhua/0/7/1121927.html','/manhua/0/7/1121929.html', '/manhua/0/7/1121931.html', '/manhua/0/7/1121933.html', '/manhua/0/7/1121935.html','/manhua/0/7/1121937.html', '/manhua/0/7/1121939.html', '/manhua/0/7/1121941.html', '/manhua/0/7/1121943.html','/manhua/0/7/1121945.html', '/manhua/0/7/1121947.html', '/manhua/0/7/1121949.html', '/manhua/0/7/1121951.html','/manhua/0/7/1121953.html', '/manhua/0/7/1121955.html', '/manhua/0/7/1121957.html', '/manhua/0/7/1121959.html','/manhua/0/7/1121961.html', '/manhua/0/7/1121963.html', '/manhua/0/7/1121965.html', '/manhua/0/7/1121967.html','/manhua/0/7/1121969.html', '/manhua/0/7/1121971.html', '/manhua/0/7/1121973.html', '/manhua/0/7/1121975.html','/manhua/0/7/1121977.html', '/manhua/0/7/1121979.html', '/manhua/0/7/1121981.html', '/manhua/0/7/1121983.html','/manhua/0/7/1121985.html', '/manhua/0/7/1121987.html', '/manhua/0/7/1121989.html', '/manhua/0/7/1121991.html','/manhua/0/7/1121993.html', '/manhua/0/7/1121995.html', '/manhua/0/7/1121997.html', '/manhua/0/7/1121999.html','/manhua/0/7/1122001.html', '/manhua/0/7/1122003.html', '/manhua/0/7/1122005.html', '/manhua/0/7/1122007.html','/manhua/0/7/1122009.html', '/manhua/0/7/1122011.html', '/manhua/0/7/1122013.html', '/manhua/0/7/1122015.html','/manhua/0/7/1122017.html', '/manhua/0/7/1122019.html', '/manhua/0/7/1122021.html', '/manhua/0/7/1122023.html','/manhua/0/7/1122025.html', '/manhua/0/7/1122027.html', '/manhua/0/7/1122029.html', '/manhua/0/7/1122031.html','/manhua/0/7/1122033.html', '/manhua/0/7/1122035.html', '/manhua/0/7/1122037.html', '/manhua/0/7/1122039.html','/manhua/0/7/1122041.html', '/manhua/0/7/1122043.html', '/manhua/0/7/1122045.html', '/manhua/0/7/1122047.html']# 章节照片按  ch/ch序号_html序号/xxx.jpg eg(第一章对应:/manhua/0/7/209.html 则地址为 ch/ch1_209/xxx.jpg)# 生成封面pdf
def generateFmPdf(ch):from reportlab.pdfgen import canvas# 创建一个空白PDF文档pdf = canvas.Canvas("ch%s.pdf" % ch)# 设置字体和字号pdf.setFont("Helvetica-Bold", 16)# 在PDF文档中写入文本pdf.drawString(100, 750, "Ch" + str(ch))# 保存PDF文档pdf.save()# 合并pdf
def mergePdf(i, pdf_list):print(str(i), pdf_list[0], pdf_list[-1])# 将所有 PDF 合并成一个文件merger = PdfMerger()for file_path in pdf_list:print(file_path)merger.append(str(file_path))merger.write("cqythll_output%s.pdf" % i)path_dir = 'D:/study/python-scripts/p20231031/'pdf_list = []
for i, img_dir in enumerate(alist):print(img_dir)path = 'ch/ch%s_%s' % (str(i + 1), img_dir.replace('.html', '').split('/')[-1])imagePaths = list(paths.list_images(path))imagePaths = [path_dir + i.replace('\\', '/') for i in imagePaths]# 生成封面(包含章节的Ch1 pdf)generateFmPdf(str(i + 1))pdf_list.append('%sch%s.pdf' % (path_dir, str(i + 1)))print(imagePaths)if (len(imagePaths) == 0): continueimg_not_exists = ['D:/p20231031/ch/ch84_1253/168468.jpg','D:/p20231031/ch/ch127_1339/168809.jpg','D:/p20231031/ch/ch154_1393/169008.jpg','D:/p20231031/ch/ch159_1403/169049.jpg','D:/p20231031/ch/ch174_1433/169173.jpg','D:/p20231031/ch/ch177_1439/169195.jpg','D:/p20231031/ch/ch177_1439/169196.jpg','D:/p20231031/ch/ch177_1439/169197.jpg','D:/p20231031/ch/ch179_1443/169198.jpg','D:/p20231031/ch/ch182_1449/169230.jpg','D:/p20231031/ch/ch183_1451/169231.jpg','D:/p20231031/ch/ch183_1451/169232.jpg','D:/p20231031/ch/ch270_1693/169935.jpg','D:/p20231031/ch/ch183_1451/169232.jpg','D:/p20231031/ch/ch270_1693/169935.jpg','D:/p20231031/ch/ch331_153429/1159634.jpg','D:/p20231031/ch/ch363_240719/1881599.jpg']for img_aa in img_not_exists:if (imagePaths.__contains__(img_aa)):imagePaths.remove(img_aa)if (len(imagePaths) == 0): continue# 生成正文pdfzw_name = "cqythll%s.pdf" % str(i + 1)with open(zw_name, "ab") as f:pdf_list.append('%s%s' % (path_dir, zw_name))f.write(img2pdf.convert(imagePaths))f.close()print(path, 'finish....')with open('allPdf.txt', "w") as f:f.write(','.join(pdf_list))print(len(pdf_list))mergePdf('all', pdf_list)## 微读不支持导入>50M的txt以及 >300M的其他文件,那就大概计算下拆分成多个文件
# 我的文件600duoMB,所以拆3个就行
num = 3
div = len(pdf_list) // num
for zz in range(1, 4):print(str(zz), str((zz - 1) * div), str(len(pdf_list) if zz == num else zz * div))# 合并所有的pdf文件mergePdf(zz, pdf_list[(zz - 1) * div: len(pdf_list) if zz == num else zz * div])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/106666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python的pyecharts第三方模块绘制高端统计图表

pyecharts库 python的pyecharts库是一个用于生成 Echarts 图表的python第三方类库&#xff0c;可以绘制很高端的统计图表以便展示数据。 安装方法 pip安装 pip install pyecharts或者github拉取下载安装 git clone https://github.com/pyecharts/pyecharts.git cd pyechar…

业务安全五重价值:防攻击、保稳定、助增收、促合规、提升满意度

目录 防范各类威胁攻击 保障业务的连续性和稳定性 保障业务的合规性 提升企业营收和发展 提升企业满意度和品牌知名度 2023年暑假被“票贩子”和“黄牛”攻陷。他们利用各种手段抢先预约名额&#xff0c;然后加价出售给游客&#xff0c;导致了门票供不应求的局面&#xff…

win11的右键菜单改成win10的样子

在终端复制一下命令 reg add “HKCU\Software\Classes\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32” /f /ve 回车&#xff0c;会显示成功 再重启资源管理器。这步必须执行&#xff0c;否则是成功的&#xff0c;或者可能重启电脑会成功&#xff0c;但是我没有…

Apache Tomcat下载安装配置使用超详细

下载安装 tomcat官网 在此我们以Tomcat 9.0.81为例&#xff0c;点击下载压缩包&#xff0c;解压到自己的文件夹。 tar.gz是linux操作系统下的安装版本。zip是windows系统下的压缩版本。Windows Service Installer是windows操作系统下的exe安装版本。 检查是否配置JDK 1.…

ARM架构的基本知识

ARM两种授权 体系结构授权, 一种硬件规范, 用来约定指令集, 芯片内部体系结构(内存管理, 高速缓存管理), 只约定每一条指令的格式, 行为规范, 参数, 客户根据这个规范自行设计与之兼容的处理器处理IP授权, ARM公司根据某个版本的体系结构设计处理器, 再把处理器设计方案授权给…

【广州华锐互动】塔吊多人安拆VR互动培训系统

塔吊多人安拆VR互动培训系统由广州华锐互动制作&#xff0c;是一种基于VR技术的模拟实训系统&#xff0c;专门用于培训塔吊驾驶员和操作员。 在现实生活中&#xff0c;塔吊操作具有一定的危险性&#xff0c;尤其是在培训过程中容易发生意外。而使用VR互动实训系统&#xff0c;学…

项目平台——测试报表的实现(六)

这里写目录标题 一、页面成果图展示二、代码逻辑1、接口封装2、发送接口请求 三、样式设计1、element-plus中表格组件的使用 四、总体代码五、问题解决六、项目首页【执行记录】设计1、导入子组件2、注册子组件3、使用子组件 一、页面成果图展示 二、代码逻辑 1、接口封装 ap…

【C++初阶(二)缺省参数与函数重载】

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…

SpringMVC的拦截器(Interceptor)

拦截器简介 SpringMVC的拦截器Interceptor&#xff0c;主要是对Controller资源访问时进行拦截的基本操作的技术&#xff0c;当然拦截后可以进行权限控制&#xff0c;功能增强等都是可以的。拦截器类似于JavaWeb开发中的Filter&#xff0c;他们之间的区别如下图所示 Filter技术…

当GDB遇到STL

STL是标准模板库&#xff08;Standard Template Library&#xff09;的简称&#xff0c;是C的三大件之一。 ‍‍ Alex是STL的核心设计者。他于1950年出生在莫斯科&#xff0c;后来到美国发展&#xff0c;曾经在Adobe、A9.com等公司工作。在Adobe工作时&#xff0c;他和保罗•麦…

参数解析(牛客)

目录 一、题目 二、代码 一、题目 二、代码 #include <iostream> #include <vector> using namespace std;int main() {string s;getline(cin, s);int i 0;vector<string>ret;while (i < s.size()){if (s[i] )//遇到空格直接跳过{i;}else if (s[i] …

Fbank及MFCC学习

Fbank&#xff1a;FilterBank&#xff1a;人耳对声音频谱的响应是非线性的&#xff0c;Fbank就是一种前端处理算法&#xff0c;以类似于人耳的方式对音频进行处理&#xff0c;可以提高语音识别的性能。获得语音信号的fbank特征的一般步骤是&#xff1a;预加重、分帧、加窗、短时…

day14I102.二叉树的层序遍历

1、102.二叉树的层序遍历 题目链接&#xff1a;https://leetcode.cn/problems/binary-tree-level-order-traversal/ 文章链接&#xff1a;https://programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86.html#%E7%AE%97%E6%B3%95…

详细教程:Postman 怎么调试 WebSocket

WebSocket 是一个支持双向通信的网络协议&#xff0c;它在实时性和效率方面具有很大的优势。Postman 是一个流行的 API 开发工具&#xff0c;它提供了许多功能来测试和调试 RESTful API 接口&#xff0c;最新的版本也支持 WebSocket 接口的调试。想要学习更多关于 Postman 的知…

PDE数值解中,为什么要引入弱解(weak solution)的概念?

See https://www.zhihu.com/question/24243246?utm_sourceqq&utm_mediumsocial&utm_oi1315073218793488384

[Python]黑色背景白色块滑动视频

黑色背景白色块滑动视频&#xff0c;单帧效果如下&#xff1a; 配置参数 1920 1080 400 400 300 60 1920x1080.avi import numpy as np import cv2 as cv import os import syswidth 1920 height 1080 rect_szx 400 rect_szy 300 sz_y_init 400 fps 24width int(sys.a…

竞赛选题 深度学习+opencv+python实现车道线检测 - 自动驾驶

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV56 数据集处理7 模型训练8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &am…

在服务器上解压.7z文件

1. 更新apt sudo apt-get update2. 安装p7zip sudo apt-get install p7zip-full3. 解压.7z文件 7za x WN18RR.7z

求三维坐标绕坐标轴旋转后的坐标值

目的 旋转矩阵 应用 沿单个坐标轴旋转 沿多个坐标系旋转 目的 由于其他文章原理介绍比较详细&#xff0c;但应用方面较少。本文直接介绍旋转矩阵的应用&#xff0c;条件为坐标系不变&#xff0c;求旋转后的三维坐标。本文方法较傻瓜式&#xff0c;需要自己进行测试以确认是…

HUAWEI(26)——防火墙双机热备

一、拓扑 二、需求 PC2 ping PC1 FW1与FW2双机热备,FW1为active,FW2为Standby,抢占延时1s VRRP 三、配置 1.IP地址,防火墙接口加入区域 防火墙用户名:admin 防火墙旧密码:Admin@123 防火墙新密码:admin@123 [FW1]interface GigabitEthernet 1/0/0 [FW1-GigabitEthe…