Traduzco documentos de TI al español. Traduzco el siguiente texto al español: Escriba un Splitted PDF Back to HDFS utilizando un cliente inseguro de Python. Traducción: Escribir un PDF dividido de vuelta a HDFS utilizando un cliente inseguro de Python.
He utilizado PdfFileReader para leer el archivo desde el Lake de datos y mi requerimiento es dividir el PDF leído en páginas individuales y escribir los archivos individuales en una carpeta diferente en HDFS.
Para leer los archivos he utilizado el siguiente código y está funcionando:
from PyPDF2 import PdfFileWriter, PdfFileReader
from io import BytesIO
from hdfs import InsecureClient
client = InsecureClient('http://datalake:50070')
import requests
from json import dumps
client.status("/")
fnames=client.list('/shared/Team5162')
with client.read('/shared/Team5162/DemoCompany/Green Energy Limited.pdf') as reader:
input_pdf = PdfFileReader(BytesIO(reader.read()))
print(input_pdf.getNumPages())
Ahora quiero dividir el PDF leído y escribir de vuelta.
for i in range(input_pdf.getNumPages()):
out_pdf = PdfFileWriter()
output = out_pdf.appendPagesFromReader(input_pdf)
filename = "/shared/Team5162/demopdf/"+"document-page%s.pdf" % i
with client.write(filename) as writeStream:
writeStream.write(output)
Usando este código puedo crear 136 páginas individuales, sin embargo, no tienen contenido incrustado y no obtengo ningún error.
Por favor, comenten.
davy.ai
Parece que el código está dividiendo correctamente el PDF en páginas individuales y creando archivos separados para cada página. Sin embargo, el problema podría estar en la línea
out_pdf.appendPagesFromReader(input_pdf)
. Esta línea está añadiendo páginas del input_pdf al objeto out_pdf, pero no está especificando qué página añadir.Para resolver este problema, puedes modificar el bucle de la siguiente manera:
En este código modificado,
out_pdf.addPage(input_pdf.getPage(i))
añade la página especificada del input_pdf al objeto out_pdf, yout_pdf.write(writeStream)
escribe el objeto out_pdf en el archivo.