首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过循环读取从TIFF文件中转换出来的一组PDF

通过循环读取从TIFF文件中转换出来的一组PDF
EN

Stack Overflow用户
提问于 2020-11-10 04:16:30
回答 2查看 233关注 0票数 0

我有一个Python刮刀,它通过在线的TIFF页面进行爬行,并将每个页面转换成PDF格式,但我不知道如何将所有转换后的PDF合并成一个,并将其写到我的计算机上。

代码语言:javascript
运行
复制
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))

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

代码语言:javascript
运行
复制
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控制台,您可以在一堆隐藏的input标记中看到一个带有".tif“URL的form标记。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-14 01:59:58

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

代码语言:javascript
运行
复制
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))

我修改了您的代码以使用上面的代码,但我不能测试它,因为我不知道您在查询哪个网站。所以如果有什么故障请告诉我,我会排除它的。

代码语言:javascript
运行
复制
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文件。源网站将生成PDF而不下载所有TIFF文件。

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

代码语言:javascript
运行
复制
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文件,上面的代码正在获得。

票数 1
EN

Stack Overflow用户

发布于 2020-11-13 23:13:33

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

请看本教程。几岁但肯定仍然有效:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64762813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档