引发运行时错误('FPDF 错误: '+msg) 运行时错误: FPDF 错误: 不支持的图像类型: chapter_1_romance_dawn



好吧,我正在开发一个漫画下载程序。日本漫画在线提供,但你只能阅读它们,如果你想下载它们,你必须通过右键点击开始保存图像文件。。。

所以,我正在开发一个替代的漫画下载器,它将下载你指定的漫画的所有章节,然后将它们转换为pdf。

我已经完成了下载图像的代码,它运行得很好,但问题在于pdf转换部分。

这是我的代码

import requests
import urllib
import glob
from bs4 import BeautifulSoup
import os
from fpdf import FPDF
def download_image(url, path):
r = requests.get(url, stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
for chunk in r:
f.write(chunk)

start_chapter = int(input("Enter Starting Chapter: "))
end_chapter = int(input("Enter Ending Chapter: "))
chapters = range(start_chapter, end_chapter + 1)
chapter_list = []
for chapter in chapters:
chapter_list.append("https://manganelo.com/chapter/read_one_piece_manga_online_free4/chapter_" + str(chapter))
for URL in chapter_list:
r = requests.get(URL)
soup = BeautifulSoup(r.text, 'html.parser')
images = soup.findAll('img')
for i in images:
url = i.attrs["src"]
os.makedirs(url.split('/')[-2], exist_ok=True)
download_image(url, os.path.join(url.split('/')[-2], url.split('/')[-1]))
pdf = FPDF()
imageList = glob.glob("*")
for image in imageList:
pdf.add_page()
pdf.image(image, 10, 10, 200, 300)
pdf.output("One Piece Chapter", "F")

所以,任何关于我如何修复这个错误的建议:

raise RuntimeError('FPDF error: '+msg) RuntimeError: FPDF error: Unsupported image type: chapter_1_romance_dawn

首先,这是一个非常好的主意。

由于图像列表路径错误,将出现错误
您正在将jpg存储在文件夹(chaptername(中
您所要做的一切就是为FPDF提供正确的路径。

我制作了一套以避免重复。然后我删除了"图像"one_answers"图标"文件夹->也许你会使用它们?

cchapter = set()
for URL in chapter_list:
r = requests.get(URL)
soup = BeautifulSoup(r.text, 'html.parser')
images = soup.findAll('img')
for i in images:
url = i.attrs["src"]
cchapter.add(url.split('/')[-2])
os.makedirs(url.split('/')[-2], exist_ok=True)
download_image(url, os.path.join(url.split('/')[-2], url.split('/')[-1]))
cchapter.remove('images')
cchapter.remove('icons')
chapterlist = list(cchapter)
print(chapterlist[0])
def sortKeyFunc(s):
return int(os.path.basename(s)[:-4])
for chap in chapterlist:
pdf = FPDF()
imageList = glob.glob(chap + "/*.jpg")
imageList.sort(key=sortKeyFunc)
for image in imageList:
pdf.add_page()
pdf.image(image, 10, 10, 200, 300)
pdf.output(chap + ".pdf", "F")

最后,我添加了一个循环,为每个文件夹创建一个pdf
然后将PDF命名为章节名称
您还错过了我们的插件(".pdf"(…
这将起作用。:(

编辑:

glob.glob将按不正确的顺序返回文件列表。

参考:此处

它可能根本没有排序,而是使用条目的顺序出现在文件系统中,即使用ls-U时得到的文件系统。(在至少在我的机器上,这会产生与列出glob相同的订单匹配(。

因此,您可以使用文件名(在我们的情况下,以数字形式给出(作为排序键。

def sortKeyFunc(s):
return int(os.path.basename(s)[:-4])

则在循环中添加CCD_ 2。

注意:代码已更新

最新更新