es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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:

    for i in range(input_pdf.getNumPages()):
        out_pdf  = PdfFileWriter()
        out_pdf.addPage(input_pdf.getPage(i))
        filename = "/shared/Team5162/demopdf/"+"document-page%s.pdf" % i
        with client.write(filename) as writeStream:
            out_pdf.write(writeStream)
    

    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, y out_pdf.write(writeStream) escribe el objeto out_pdf en el archivo.

Comments are closed.