合并一堆从 TIFF 文件转换而来的 PDF,因为它们通过循环阅读



我有一个Python网络抓取器,它可以在线抓取一堆TIFF页面,并将每个页面转换为PDF,但我不知道如何将所有转换后的PDF组合成一个并写入我的计算机。

import img2pdf, requests
outPDF = []
for pgNum in range(1,20):
tiff = requests.get("http://url-to-tiff-file.com/page="+str(pgNum)).content
pdf = img2pdf.convert(tiff)
outPDF.append(pdf)
with open("file","wb") as f:
f.write(''.join(outPDF))

当我运行它时,我得到以下错误:

f.write(''.join(outPDF))
TypeError: sequence item 0: expected str instance, bytes found

更新

如果你转到http://oris.co.palm-beach.fl.us/or_web1/details_img.asp?doc_id=23543456&pg_num=1,然后在浏览器中打开一个web开发控制台,你可以看到一个带有一堆"的form标签;。tif";一堆隐藏的input标签中的URL。

img2pdf在转换TIFF和PNG文件时有一些奇怪之处。该代码解决了代码中的一些潜在问题,因为它使用Pillow重新格式化图像文件,以便使用img2pdf进行处理

import img2pdf
from PIL import Image
image_list = []
test_images = ['image_01.tiff', 'image_02.tiff', 'image_03.tiff']
for image in test_images:
im = Image.open(f'{image}').convert('RGB')
im.save(f'mod_{image}')
image_list.append(f'mod_{image}')
with open('test.pdf', 'wb') as f:
letter = (img2pdf.in_to_pt(8.5), img2pdf.in_to_pt(11))
layout = img2pdf.get_layout_fun(letter)
f.write(img2pdf.convert(image_list, layout_fun=layout))

我修改了你的代码以使用上面的代码,但我无法测试它,因为我不知道你在查询哪个网站。所以请让我知道,如果有什么故障,我会解决它。

import img2pdf
import requests
from PIL import Image
from io import BytesIO
outPDF = []
for pgNum in range(1,20):
tiff = requests.get("http://url-to-tiff-file.com/page="+str(pgNum)).content
im = Image.open(BytesIO(tiff).convert('RGB')
im.save(tiff)
outPDF.append(tiff)
with open("file.pdf","wb") as f:
letter = (img2pdf.in_to_pt(8.5), img2pdf.in_to_pt(11))
layout = img2pdf.get_layout_fun(letter)
f.write(img2pdf.convert(outPDF, layout_fun=layout))

更新的答案

在你提供了目标网站的实际URL后,我确定完成任务的最佳方式是走另一条路。根据您的用例,您需要从所有隐藏的TIFF文件生成的PDF文件。源网站将在不下载所有TIFF文件的情况下生成PDF。

以下是获取生成的PDF并将其下载到您的系统的代码。

import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
capabilities = DesiredCapabilities().CHROME
chrome_options = Options()
chrome_options.add_argument("--incognito")
chrome_options.add_argument("--disable-infobars")
chrome_options.add_argument("start-maximized")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-popup-blocking")
download_directory = os.path.abspath('chrome_pdf_downloads')
prefs = {"download.default_directory": download_directory,
"download.prompt_for_download": False,
"download.directory_upgrade": True,
"plugins.always_open_pdf_externally": True}
chrome_options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome('/usr/local/bin/chromedriver', options=chrome_options)
url_main = 'http://oris.co.palm-beach.fl.us/or_web1/details_img.asp? doc_id=23543456&pg_num=1'
driver.get(url_main)
WebDriverWait(driver, 60)
driver.find_element_by_xpath("//input[@name='button' and @onclick='javascript:ValidateAndSubmit(this.form)']").submit()

如果你仍然想获得TIFF文件,请告诉我,我会考虑下载和处理它们,以生成上面代码正在获得的PDF文件。

您是否试图从多个单页pdf中创建多页pdf?我确信你使用join((是不对的。

看看这个教程。几年了,但肯定仍然有效:

https://www.blog.pythonlibrary.org/2018/04/11/splitting-and-merging-pdfs-with-python/

相关内容

最新更新