Forum >> Programmazione Python >> Files e Directory >> MERGE FILE PDF CON PyPDF2

Pagina: 1

Buongiorno a Tutti,

Sotto la cartella c:\merge\ ho una serie di file pdf chiamati


file_1.pdf,

file_2.pdf,

file_3.pdf,

....

file_10.pdf




nel mio programma ho una lista (1:3,4:7,8:10) quindi lo scopo sarebbe mettere insieme i vari pdf dall' 1 al 3 poi dal 4 al 7 e dall' 8 al 10


Sono PDF di una pagina quindi avrei alla fine 3 pdf .




NewMergedFile 1 _3_.pdf

NewMergedFile 4 _7_.pdf

NewMergedFile 8 _10_.pdf







Ho provato a sviluppare la mia idea ma adesso quando lo lancio non mi da errore ma non mi fa nulla . :(

Sono alle prime armi scusate ci sono ancora molte cose che non capisco .




come ad esempio perchè ho dovuto mettere questa istruzione per uscire dal ciclo while .




Grazie mille in anticipo del vostro aiuto





import PyPDF2
mergeFile = PyPDF2.PdfFileMerger()
# Setta la stringa delle pagine da fare il merge
# l'intervallo pag_inizio separatore ":" pag_fine
# es. 1:3 da pagina 1 a pagina 3
# es. 1:1 conterra iuna sola pagina la 1
my_string = "4:7"
# mi crea una lista tokens (1:3,4:7,8:10) composta da tre elementi
tokens = my_string.split(',')
#in value ci sarà una lista con la pagina iniziale e quella finale
value = tokens0.split(':')
# >>> print(value0)
# 4
# >>> print(value1)
# 7
# dovro' fare il merge delle pagine dalla 4 alla 7 comprese
# inizio a prendere ogni pagina della lista tokens :
ind_intervallo = 1
numero_coppie = int(len(tokens))
while ind_intervallo <= numero_coppie:
if (ind_intervallo == numero_coppie) : break
print(ind_intervallo)
print(len(tokens))
value = tokensind intervallo.split(':')
print(tokens)
i= int(value0)
print (i)
print (value1)
while int(i) <= int(value1):
print("ENTRO CICLO INTERNO WHILE")
str_file_1 = "C:\\merge\\file_"+ str(i) +".pdf"
print(str(str_file_1))
mergeFile.append(PyPDF2.PdfFileReader(str_file_1, 'rb'))
i+=1
print(i)
nome_merge_file="C:\\merge\NewMergedFile_"+ str(value0) + "_A_"+str(value1)+".pdf"
print(nome_merge_file)
mergeFile.write("C:\\merge\NewMergedFile_"+ str(value0) + "_A_"+str(value1)+".pdf")
ind_intervallo += 1














Allegati
Ciao, riguardo

Ho provato a sviluppare la mia idea ma adesso quando lo lancio non mi da errore ma non mi fa nulla . :(


Sono alle prime armi scusate ci sono ancora molte cose che non capisco .


come ad esempio perchè ho dovuto mettere questa istruzione per uscire dal ciclo while .
L'istruzione "break" serve ad interrompere un loop, ed è la causa del "non far niente" del Tuo script, par come la hai posta ti fa uscire immediatamente dal ciclo "while" primario, quindi nessuna delle istruzione seguenti viene eseguita, ho modificato un pochino il Tuo script, tra l'altro sostituendo con "os.path.join()" la costruzione dei nomi di files da Te adottata (ti suggerirei di studiarti ed utilizzare tali moduli) ma lasciandolo essenzialmente inalterato (anche se Ti suggerirei di vederti l'utilizzo delle liste con cicli for) e facendo in modo di non mischiare i files originali con i nuovi prodotti, ho stabilito i file di origine contenuti in una sub-directory di quella contenente lo script, in tale condizione:

(tests_v) NzP:~$ tree
.
├── merge
│   ├── file_10.pdf
│   ├── file_1.pdf
│   ├── file_2.pdf
│   ├── file_3.pdf
│   ├── file_4.pdf
│   ├── file_5.pdf
│   ├── file_6.pdf
│   ├── file_7.pdf
│   ├── file_8.pdf
│   ├── file_9.pdf
│   └── merge_3.py
├── merge_3bis.py
├── NewMergedFile_1_A_3.pdf
├── NewMergedFile_4_A_7.pdf
└── NewMergedFile_8_A_10.pdf

1 directory, 15 files
(tests_v) NzP:~$ 

... il codice è questo che segue

import PyPDF2
import os

# Setta la stringa delle pagine da fare il merge 
# l'intervallo pag_inizio separatore ":" pag_fine
# es. 1:3   da pagina 1 a pagina 3
# es. 1:1   conterra iuna sola pagina la 1 
my_string = "1:3,4:7,8:10" 
# mi crea una lista tokens (1:3,4:7,8:10) composta da tre elementi
tokens = my_string.split(',')
#in value ci sarà una lista con la pagina iniziale e quella finale 
value = tokens[0].split(':')
# >>> print(value[0])
# 4
# >>> print(value[1])
# 7
# dovro' fare il merge delle pagine dalla 4 alla 7 comprese
# inizio a prendere ogni pagina della lista tokens :
ind_intervallo = 1
numero_coppie = int(len(tokens))
while ind_intervallo <= numero_coppie:
      mergeFile = PyPDF2.PdfFileMerger()
      print(ind_intervallo)
      print(len(tokens))
      value = tokens[ind_intervallo-1].split(':')
      print(tokens)
      i= int(value[0])
      print (i)
      print (value[1])
      while int(i) <= int(value1):
                   print("ENTRO CICLO INTERNO WHILE") 
                   str_file_1 = os.path.join("merge", f'file_{i}.pdf')
                   print(str(str_file_1))
                   mergeFile.append(PyPDF2.PdfFileReader(str_file_1, 'rb'))  		  
                   i+=1
                   print(i)
      nome_merge_file=f'NewMergedFile_{value[0]}_A_{value[1]}.pdf'
      print(nome_merge_file)
      mergeFile.write(nome_merge_file)
      if (ind_intervallo == numero_coppie) : break
      ind_intervallo += 1
(Io uso linux) guarda le differenze dello script che segue rispetto al Tuo
In particolare, cerca di comprendere il "perché" della diversa posizione per "mergefile" e l'istruzione break (per altro inutile nel caso esposto)
Ciao

EDIT : cercato di correggere varie alterazioni dovute allo editor dei post, non sono riusciti bene i nomi dei files risultanti nel tree del terminale linux, dalla anteprima sembra in ordine ma ...

--- Ultima modifica di nuzzopippo in data 2023-03-24 18:49:16 ---

--- Ultima modifica di nuzzopippo in data 2023-03-24 18:55:49 ---
Fatti non foste a viver come bruti...


Pagina: 1



Esegui il login per scrivere una risposta.