Prima di comprimere il PDF, decidi se puoi accettare la perdita dell'immagine
Prima di comprimere un PDF, pensa se puoi accettare la perdita dell'immagine. Questo articolo tratta solo della compressione senza perdita di flussi di contenuto: i byte decodificati e il testo estratto devono essere coerenti prima e dopo la compressione. Non garantisce che ogni PDF sarà più piccolo, né confonde la compressione senza perdita con la ricodifica con perdita JPEG.
Prima di comprimere un PDF, devi innanzitutto determinare se la perdita di immagine è accettabile. Se desideri snellire un PDF prima della traduzione, la cosa più importante da capire è: quali operazioni si limitano a riorganizzare la struttura di archiviazione e quali operazioni modificheranno il contenuto dell'immagine.
Questo articolo è scritto per traduttori e ingegneri documentali che necessitano di preelaborare i PDF. Discute solo della compressione senza perdite dei flussi di contenuto. Il criterio di accettazione è che i byte decodificati e il testo estratto siano coerenti prima e dopo la compressione. Dopo la lettura, puoi giudicare quali passaggi sono appropriati, quali causeranno perdite irreversibili e come controllare i risultati dopo la compressione.
Gli esempi seguenti utilizzano campioni sintetici e il codice è stato controllato con campioni in un ambiente isolato, ma ciò non rappresenta una garanzia di tutti i file reali o delle prestazioni del prodotto. Prima di elaborare documenti importanti, conservare gli originali e rivederli rispettando i limiti e gli elementi di accettazione nel testo.
Posso accettare la perdita dell'immagine prima di comprimere il PDF? Conclusione di una frase
Per prima cosa determina se puoi accettare la perdita di immagine: se non puoi accettarla, esegui semplicemente la compressione senza perdita del flusso di contenuto e utilizza byte decodificati e rilettura del testo per l'accettazione.
| la tua situazione | Pratiche consigliate | motivo |
|---|---|---|
| Hai bisogno di preservare immagini e layout, vuoi solo organizzare la struttura di archiviazione | Compressione senza perdite dei flussi di contenuto | I byte decodificati e il testo estratto dovrebbero essere gli stessi prima e dopo la compressione |
| È richiesto solo contenuto di testo semplice, non sono richieste immagini | Valuta la possibilità di eliminare l'immagine | remove_images() è completamente cancellato e irreversibile |
| Spero che il file sarà più piccolo | Prima il test effettivo, nessuna garanzia | La compressione senza perdita di dati non garantisce che ogni PDF sarà più piccolo |
| Richiede la compressione con perdita di immagine | Valutazione della ricodifica JPEG individualmente | È un'operazione diversa dalla compressione del flusso senza perdite e non può essere confusa con essa |
Quale problema dovrebbe essere risolto per primo in questo articolo?
Questo articolo controlla solo la compressione senza perdita di dati dei flussi di contenuto: i byte decodificati e il testo estratto dovrebbero essere gli stessi prima e dopo la compressione. Non promette che ogni PDF sarà più piccolo, né confonde la compressione del flusso senza perdita con la ricodifica con perdita JPEG.
Esempio di composizione autonoma
Consulta l'elenco di importazione per le dipendenze. Il codice costruisce l'input in memoria e i record di esecuzione vengono forniti separatamente e non rappresentano una garanzia di tutti i file reali.
from io import BytesIO
import pymupdf
from pypdf import PdfReader, PdfWriter
with pymupdf.open() as source:
page = source.new_page()
page.insert_text((50, 50), "Compression sample")
raw = source.tobytes()
writer = PdfWriter(clone_from=BytesIO(raw))
before = writer.pages[0].get_contents().get_data()
writer.pages[0].compress_content_streams()
out = BytesIO()
writer.write(out)
out.seek(0)
reader = PdfReader(out)
assert reader.pages[0].get_contents().get_data() == before
assert "Compression sample" in reader.pages[0].extract_text()
assert len(reader.pages) == 1
Limiti della compressione senza perdite
- Dopo che il flusso di contenuto è stato compresso, i byte decodificati dovrebbero essere coerenti con il testo estratto.
- I percorsi vettoriali del testo, gli incorporamenti dei caratteri e i dati pixel grezzi dell'immagine non vengono modificati.
- Puoi inserire questo passaggio nella fase di pre-elaborazione della traduzione come parte del processo di standardizzazione senza preoccuparti di distruggere la leggibilità del testo originale.
- Nota:
compress_content_streamsnon accetta parametri del livello di compressione e utilizza internamente la configurazione predefinita di zlib. Vedere documentazione pypdf per le specifiche dell'interfaccia.
La sostituzione dell'immagine è un'operazione con perdita di dati e irreversibile
remove_images() è la cancellazione completa, non la compressione. Non dovrebbe essere utilizzato durante la preparazione della traduzione a meno che non si sappia con certezza che lo scenario di destinazione non richiede immagini (ad esempio estrazione di testo semplice).
Molte persone credono erroneamente che "comprimere le immagini" equivalga a "ottimizzazione intelligente". Infatti, pypdf esegue solo la ricodifica meccanica e non ha la capacità di percepire la semantica del contenuto.
L'esempio di sintesi dimostra la differenza tra due percorsi di compressione
Il codice seguente costruisce un PDF contenente immagini ripetute e contenuto multipagina, dimostrando rispettivamente gli effetti della compressione della struttura senza perdita e dell'elaborazione delle immagini con perdita. Nota: Questo è un codice didattico che ha superato il controllo del campione sintetico. Viene utilizzato solo per illustrare i limiti del comportamento dell'API. Si prega di verificarlo nell'ambiente locale prima dell'uso effettivo.
Decisioni specifiche sulla gestione delle eccezioni
| osservare | cosa fare | non dovrebbe essere dedotto |
|---|---|---|
| Modifiche del flusso di decodifica | Si è ritenuto che i requisiti non distruttivi di questo caso non fossero soddisfatti. | Conserva gli originali |
| La dimensione non è diminuita | Registra in modo veritiero | Non è garantita la corretta compressione di tutti i PDF |
| Il testo riletto è coerente | Completa un controllo | Il rendering complesso richiede ancora il confronto |
Utilizza questa lista di controllo per la traduzione dei documenti
La suddivisione dei file, la crittografia o l'elaborazione degli allegati fanno parte della preparazione per la consegna e la traduzione non può sostituire questi controlli. Si consiglia di conservare prima la copia originale e l'elenco di elaborazione, quindi valutare l'ordine delle pagine, i collegamenti e l'integrità del contenuto della traduzione.
📊 Confronto fondamentale
| Dimensioni | Compressione del flusso di contenuti senza perdita di dati | remove_images() elimina l'immagine | Ricodifica con perdita JPEG |
|---|---|---|---|
| Se modificare i byte decodificati | L'accettazione richiede byte di decodifica coerenti | Il contenuto dell'immagine verrà eliminato | È un'operazione con perdita e non può essere confusa con la compressione senza perdita. |
| Contenuto dell'immagine | I dati pixel originali dell'immagine non vengono modificati | Elimina completamente | Ricodifica con perdita |
| Testo e impaginazione | Il testo estratto dovrebbe essere coerente | Non mira al testo, ma le immagini vengono rimosse | Non rientra nell'ambito dell'ispezione non distruttiva di questo articolo |
| È reversibile? | Accettazione secondo requisiti non distruttivi | Irreversibile | con perdita |
| Il volume diventa necessariamente più piccolo? | Non vi è alcuna garanzia che ogni PDF sarà più piccolo | Il volume cambia a seconda della situazione effettiva del file | Dipende dai risultati effettivi dell'elaborazione |
🎯Quale metodo è adatto a te?
Se hai bisogno di preservare immagini e tipografia
- Utilizza la compressione senza perdita di dati del flusso di contenuto e la revisione con byte decodificati e rilettura del testo.
Se hai bisogno solo di contenuti di testo semplice
- Puoi considerare l'eliminazione dell'immagine, ma prima conferma che l'immagine non è necessaria per la scena di destinazione.
Se desideri che il volume sia notevolmente più piccolo dopo la compressione
- Usa il tuo campione reale per misurarlo prima, non dare per scontato che diventerà sicuramente più piccolo.
Se è necessario elaborare file importanti
- Conservare prima il documento originale e rivedere i risultati in base ai limiti e agli elementi di accettazione nel testo.
❓ Domande frequenti (FAQ)
1. La compressione senza perdita di dati cambierà l'immagine?
Secondo i criteri di accettazione di questo articolo, i dati pixel originali dell'immagine non verranno modificati dopo la compressione senza perdita di dati del flusso di contenuto e i byte decodificati e il testo estratto dovrebbero essere coerenti.
2. Il PDF sarà più piccolo dopo la compressione?
incerto. Questo articolo non promette che ogni PDF diventerà più piccolo. Se la dimensione non diminuisce, deve essere registrata in modo veritiero.
3. compress_content_streams può regolare il livello di compressione?
Non posso. Questa funzione non accetta un parametro del livello di compressione e utilizza internamente la configurazione predefinita di zlib.
4. remove_images() può essere utilizzato come compressione delle immagini?
Non posso. Rimuove completamente l'immagine, anziché comprimerla, e non dovrebbe essere utilizzata nella fase di preparazione della traduzione a meno che l'immagine non sia veramente necessaria per la scena di destinazione.
📝 Riepilogo
Prima di comprimere il PDF, determina innanzitutto se puoi accettare la perdita di immagine, quindi scegli il metodo di elaborazione corrispondente. La compressione del flusso di contenuto senza perdita di dati è adatta per scenari in cui è necessario preservare l'aspetto originale e i byte decodificati e la rilettura del testo vengono utilizzati come criteri di accettazione.
Provalo subito: carica il documento per iniziare la traduzione, mantenendo il layout originale


