Unire più PDF in un unico file senza usare siti web
Script Python · versione 1.0.0 · verificato
unisci_pdf.py
Script autonomo che gira solo sul tuo computer. Nessun upload, nessuna telemetria.
- Formato
- Script Python (.py)
- Dimensione
- 3,3 KB
- Python
- 3.9 o superiore
- Licenza
- MIT
- Richiede
- pypdf
- Rete
- Offline
Crea, rinomina o sposta file solo se lo chiedi tu (per esempio per il report o la quarantena). Il codice è leggibile riga per riga nel file scaricato.
Verifica integrità
SHA-256 di unisci_pdf.py
c3544a599bc038d28106641f9be437a37637a9dc52162cf0551ca36c213e19b9 Calcola lo SHA-256 del file scaricato e confrontalo con questo: Confronta hash · Come si verifica
Unisci più PDF in un solo file sul tuo PC con Python e pypdf in un venv — senza caricare documenti d'identità o contratti su siti web.
Cercare «unire PDF gratis», aprire il primo sito e trascinare la scansione della carta d’identità o un contratto firmato è comodo. Ha un difetto strutturale: stai consegnando i documenti al server di qualcuno che non controlli. Anche se la pagina promette di cancellarli «dopo un’ora», non hai un modo tecnico per verificarlo.
Qui unisci due o più PDF sul tuo PC, con Python e la libreria pypdf, in un ambiente isolato (venv). Nessun upload: i file restano sul disco. Alla fine hai uno script riusabile ogni volta che serve un fascicolo senza cloud.
ℹ️ Nota / Prerequisito operativo
Serve Python già installato. Percorso principale: Windows; sotto trovi i comandi completi per macOS e Linux.
Se manca Python: Windows, macOS, Linux.
Pattern cartelle/venv: struttura minima di un progetto Python.
Perché evitare i merge PDF online
I servizi gratuiti di manipolazione PDF possono profilare, conservare più a lungo di quanto dichiarano o finire in un breach del provider. Per documenti d’identità, contratti, referti o buste paga il rischio non è teorico.
🚨 Avviso critico — Documenti d’identità
Non caricare documenti d’identità reali, contratti, referti o buste paga su portali web gratuiti di «merge/convert PDF». Preferisci sempre un calcolo locale.
Unire in locale significa: le pagine le combina il tuo processore. L’unico pezzo esterno è scaricare pypdf una volta dentro il venv (poi lavori offline).
Scheda tecnica dello script
| Parametro | Stato | Dettaglio operativo |
|---|---|---|
| Accesso alla rete Network-access | Nessuno in esecuzione | Dopo pip install pypdf lo script non apre connessioni: legge e scrive solo file locali. |
| Modifica dei file Writes-files | Nuovo file | Crea un PDF di output (default documento_unito.pdf). Gli originali non vengono sovrascritti. |
| Dipendenza pip | pypdf | Libreria pura Python (niente compilatore C). Solo nel venv del progetto. |
| Modalità input CLI ibrida | Args o cartella | Con argomenti: ordine esplicito. Senza argomenti: tutti i .pdf della cartella, ordine alfabetico. |
Download: unisci_pdf.py
SHA-256: c3544a599bc038d28106641f9be437a37637a9dc52162cf0551ca36c213e19b9
Repository: lunoffice/unire-pdf-locale (MIT, release v1.0.0)
Passaggio 1 — Cartella e PDF di prova
- Crea una cartella
unire-pdf(es. in Documenti), oppure clona il repo (Opzione B sotto). - Mettici due o tre PDF di prova (non i documenti veri al primo run):
documento_a.pdf,documento_b.pdf. - Assicurati che
unisci_pdf.pysia nella stessa cartella.
Windows (Prompt dei comandi):
cd %USERPROFILE%\Documents
mkdir unire-pdf
cd unire-pdf
Windows (PowerShell):
cd $env:USERPROFILE\Documents
mkdir unire-pdf
cd unire-pdf
macOS / Linux:
cd ~/Documents
mkdir unire-pdf
cd unire-pdf
Opzione A — Download dal sito
Salva unisci_pdf.py dalla scheda download in cima a questa pagina nella cartella unire-pdf. Controlla lo SHA-256 (guida opzionale: verificare un download con SHA-256).
Opzione B — Da GitHub
git clone https://github.com/lunoffice/unire-pdf-locale.git unire-pdf
cd unire-pdf
Senza git: Code → Download ZIP sul repository, oppure prendi il singolo file dalla release v1.0.0. Stesso contenuto e stesso SHA-256 della scheda download.
Passaggio 2 — venv e installazione di pypdf
Non installare pypdf «a sistema». Isola tutto in un venv.
Creare e attivare
Windows:
python -m venv .venv
.\.venv\Scripts\activate.bat
In PowerShell: .\.venv\Scripts\Activate.ps1 (se i criteri di esecuzione bloccano lo script, usa il Prompt dei comandi con .bat).
macOS / Linux:
python3 -m venv .venv
source .venv/bin/activate
Quando è attivo vedi (.venv) all’inizio del prompt.
Installare pypdf
Windows:
python -m pip install pypdf
macOS / Linux:
python3 -m pip install pypdf
💡 Consiglio pratico —
python -m pip
Così ilpipè quello del Python attivo nelvenv, non un altro interprete del PATH.
Passaggio 3 — Lo script
Il file scaricabile è lo stesso che trovi qui. Logica:
- Se passi file in CLI → li unisce in quell’ordine.
- Se non passi nulla → prende tutti i
.pdfdella cartella corrente (ordine alfabetico), escludendo il file di output. - Scrive un nuovo PDF; non modifica gli originali.
#!/usr/bin/env python3
"""Unisci più PDF in un unico file — solo locale."""
from __future__ import annotations
import argparse
import sys
from pathlib import Path
from pypdf import PdfWriter
DEFAULT_OUTPUT = "documento_unito.pdf"
def raccolta_input(paths: list[str], output_name: str) -> list[Path]:
out = Path(output_name).resolve()
if paths:
candidati = [Path(p) for p in paths]
else:
candidati = sorted(
p for p in Path.cwd().glob("*.pdf") if p.resolve() != out
)
validi: list[Path] = []
for p in candidati:
if not p.is_file() or p.suffix.lower() != ".pdf":
print(f"Attenzione: '{p}' saltato.", file=sys.stderr)
continue
if p.resolve() == out:
continue
validi.append(p)
return validi
def unisci_pdf(file_input: list[Path], nome_output: str) -> None:
if len(file_input) < 2:
print("Errore: servono almeno 2 PDF validi.", file=sys.stderr)
sys.exit(1)
writer = PdfWriter()
try:
print(f"Inizio unione di {len(file_input)} file…")
for pdf in file_input:
writer.append(str(pdf))
print(f" -> Aggiunto: {pdf.name}")
with Path(nome_output).open("wb") as fh:
writer.write(fh)
except Exception as exc: # messaggio chiaro per l'utente
print(f"Errore durante l'unione: {exc}", file=sys.stderr)
sys.exit(1)
finally:
writer.close()
print(f"\nSuccesso: creato {Path(nome_output).resolve()}")
def main() -> None:
parser = argparse.ArgumentParser(
description="Unisci più PDF in un unico file (solo locale).",
)
parser.add_argument("files", nargs="*", help="PDF nell'ordine desiderato")
parser.add_argument("-o", "--output", default=DEFAULT_OUTPUT)
args = parser.parse_args()
validi = raccolta_input(args.files, args.output)
if not args.files:
if not validi:
print("Nessun PDF in cartella. Usa: python unisci_pdf.py a.pdf b.pdf", file=sys.stderr)
sys.exit(1)
print("Nessun argomento: unisco i PDF della cartella (alfabetico).")
unisci_pdf(validi, args.output)
if __name__ == "__main__":
main()
ℹ️ Nota
Il download ufficiale include gli stessi comportamenti; se incolli a mano, verifica lo SHA-256 del file scaricato.
Passaggio 4 — Esecuzione e verifica
Con (.venv) attivo e i PDF di prova nella cartella:
Ordine esplicito (consigliato):
python unisci_pdf.py documento_a.pdf documento_b.pdf
Su macOS/Linux, se python non esiste: python3 unisci_pdf.py ….
Nome di output personalizzato:
python unisci_pdf.py documento_a.pdf documento_b.pdf -o fascicolo.pdf
Solo cartella (ordine alfabetico):
python unisci_pdf.py
Output atteso (esempio):
Inizio unione di 2 file…
-> Aggiunto: documento_a.pdf
-> Aggiunto: documento_b.pdf
Successo: creato …/documento_unito.pdf
Apri documento_unito.pdf con il lettore di sistema: pagine presenti, ordine corretto. Gli originali restano intatti.
Ordine dei file
Con gli argomenti CLI, tu decidi l’ordine: primo file = prime pagine. Senza argomenti, l’ordine è alfabetico sul nome file — utile per un test rapido, meno per un fascicolo formale (meglio elencare i path).
Errori comuni
Permission denied/ file in uso — Chiudi il PDF nel visualizzatore (su Windows è frequente) e riprova.- PDF cifrato —
pypdfpuò fallire su file protetti da password (FileNotDecryptedErroro simili). Sblocca prima il documento con uno strumento legittimo che già usi; questo script non aggira cifratura. - Spazi nel nome — Usa le virgolette:
python unisci_pdf.py "carta identita.pdf" "contratto.pdf". No module named pypdf— Ilvenvnon è attivo (manca(.venv)nel prompt). Riattiva e reinstalla se serve.pythonnon riconosciuto (Windows) — PATH incompleto in installazione; reinstalla spuntando «Add python.exe to PATH» o usa il launcherpy -3.
Domande Frequenti (FAQ)
Come unisco più PDF senza siti web?
Con uno script locale (qui: Python + pypdf in un venv). I file non escono dal PC durante l’unione.
Perché non caricare la carta d’identità su un merge online?
Perdi il controllo su conservazione, backup e eventuali breach del provider. Il merge locale evita quel passaggio.
Cos’è pypdf e perché il venv?
pypdf manipola PDF. Il venv isola la dipendenza dal resto del sistema e riduce i conflitti tra progetti.
Come imposto l’ordine delle pagine?
Passa i file nell’ordine voluto sulla riga di comando. Senza argomenti, l’ordine è alfabetico.
Funziona su Windows, macOS e Linux?
Sì. Cambiano solo i comandi di attivazione del venv e, a volte, python vs python3.
C’è un repository GitHub?
Sì: lunoffice/unire-pdf-locale — README, licenza MIT, release v1.0.0 con unisci_pdf.py. Stesso SHA-256 della scheda download su questa pagina.
Cosa succede con PDF protetti da password?
L’unione tipicamente fallisce finché il file non è decifrato in chiaro. Lo script non bypassa protezioni.
L’unione cancella i metadati?
No in modo affidabile. Unire ≠ anonimizzare. Per le foto, vedi rimuovere metadati EXIF in locale.