Avant de compresser le PDF, décidez si vous pouvez accepter la perte d'image
Avant de compresser un PDF, demandez-vous si vous pouvez accepter la perte d'image. Cet article ne traite que de la compression sans perte des flux de contenu : les octets décodés et le texte extrait doivent être cohérents avant et après compression. Cela ne garantit pas que chaque PDF sera plus petit et ne confond pas non plus la compression sans perte avec le réencodage avec perte JPEG.
Avant de compresser un PDF, vous devez d'abord déterminer si la perte d'image est acceptable. Si vous souhaitez alléger un PDF avant la traduction, la chose la plus importante à comprendre est : quelles opérations réorganisent uniquement la structure de stockage et quelles opérations modifieront le contenu de l'image.
Cet article est destiné aux traducteurs et aux ingénieurs documentaires qui ont besoin de prétraiter des PDF. Il traite uniquement de la compression sans perte des flux de contenu. Le critère d'acceptation est que les octets décodés et le texte extrait soient cohérents avant et après compression. Après lecture, vous pouvez juger quelles étapes sont appropriées, quelles étapes entraîneront des pertes irréversibles et comment vérifier les résultats après compression.
Les exemples ci-dessous utilisent des échantillons synthétiques et le code a été vérifié avec des échantillons dans un environnement isolé, mais cela ne représente pas une garantie de tous les fichiers réels ou des performances du produit. Avant de traiter des documents importants, veuillez conserver les originaux et les examiner en fonction des limites et des éléments d'acceptation du texte.
Puis-je accepter la perte d'image avant de compresser le PDF ? Conclusion en une phrase
Déterminez d'abord si vous pouvez accepter la perte d'image : si vous ne pouvez pas l'accepter, effectuez simplement une compression sans perte du flux de contenu et utilisez les octets décodés et la relecture du texte pour l'acceptation.
| votre situation | Pratiques recommandées | raison |
|---|---|---|
| Besoin de préserver les images et la mise en page, je veux juste organiser la structure de stockage | Compression sans perte des flux de contenu | Les octets décodés et le texte extrait doivent être les mêmes avant et après la compression |
| Seul le contenu en texte brut est requis, aucune image n'est requise | Pensez à supprimer l'image | remove_images() est complètement supprimé et irréversible |
| J'espère que le fichier sera plus petit | Test réel d'abord, aucune garantie | La compression sans perte ne garantit pas que chaque PDF sera plus petit |
| Nécessite une compression d'image avec perte | Évaluation du réencodage JPEG individuellement | Il s'agit d'une opération différente de la compression de flux sans perte et ne peut être confondue avec |
Quel problème doit être résolu en premier dans cet article ?
Cet article vérifie uniquement la compression sans perte des flux de contenu : les octets décodés et le texte extrait doivent être les mêmes avant et après la compression. Il ne promet pas que chaque PDF sera plus petit et ne confond pas non plus la compression de flux sans perte avec le réencodage avec perte JPEG.
Exemple de composition autonome
Voir la liste d'importation pour les dépendances. Le code construit l'entrée en mémoire et les enregistrements d'exécution sont fournis séparément et ne représentent pas une garantie de tous les fichiers réels.
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
Limites de la compression sans perte
- Une fois le flux de contenu compressé, les octets décodés doivent être cohérents avec le texte extrait.
- Les chemins vectoriels de texte, les intégrations de polices et les données de pixels brutes de l'image ne sont pas modifiés.
- Vous pouvez placer cette étape dans la phase de prétraitement de la traduction dans le cadre du processus de normalisation sans vous soucier de détruire la lisibilité du texte original.
- Remarque :
compress_content_streamsn'accepte pas les paramètres de niveau de compression et utilise la configuration par défaut de zlib en interne. Voir documentation pypdf pour la spécification de l'interface.
Le remplacement d'image est une opération avec perte et irréversible
remove_images() est une suppression complète, pas une compression. Il ne doit pas être utilisé lors de la préparation de la traduction, sauf si vous êtes sûr que le scénario cible ne nécessite pas d'images (par exemple, extraction de texte brut).
Beaucoup de gens croient à tort que « compresser des images » équivaut à « une optimisation intelligente ». En fait, pypdf n'effectue qu'un recodage mécanique et n'a aucune capacité à percevoir la sémantique du contenu.
Un exemple de synthèse montre la différence entre deux chemins de compression
Le code suivant construit un PDF contenant des images répétées et un contenu de plusieurs pages, démontrant respectivement les effets de la compression de structure sans perte et du traitement d'image avec perte. Remarque : Il s'agit d'un code pédagogique qui a réussi la vérification de l'échantillon synthétique. Il est uniquement utilisé pour illustrer les limites du comportement de l'API. Veuillez le vérifier dans l'environnement local avant utilisation réelle.
Décisions spécifiques de gestion des exceptions
| observer | ce qu'il faut faire | il ne faut pas en déduire |
|---|---|---|
| Modifications du flux de décodage | Il a été jugé que les exigences non destructives de cette affaire n'étaient pas remplies. | Conserver les originaux |
| La taille n'a pas diminué | Enregistrez honnêtement | La compression réussie de tous les PDF n'est pas garantie |
| Texte relu cohérent | Remplir un chèque | Le rendu complexe nécessite encore une comparaison |
Utilisez cette liste de contrôle pour la traduction de documents
Le fractionnement des fichiers, le cryptage ou le traitement des pièces jointes font partie de la préparation à la livraison et la traduction ne peut remplacer ces contrôles. Il est recommandé de conserver d'abord la copie originale et la liste de traitement, puis d'évaluer l'ordre des pages, les liens et l'intégrité du contenu de la traduction.
📊 Comparaison de base
| Dimensions | Compression du flux de contenu sans perte | remove_images() supprimer l'image | Encodage JPEG avec perte |
|---|---|---|---|
| S'il faut changer les octets décodés | L'acceptation nécessite des octets de décodage cohérents | Le contenu de l'image sera supprimé | Il s'agit d'une opération avec perte et ne peut être confondue avec une compression sans perte. |
| Contenu des images | Les données de pixels d'origine de l'image ne sont pas modifiées | Supprimer complètement | Encodage avec perte |
| Texte et composition | Le texte extrait doit être cohérent | Ne cible pas le texte, mais les images sont supprimées | Cela n'entre pas dans le cadre du contrôle non destructif de cet article |
| Est-ce réversible ? | Réception selon exigences non destructives | Irréversible | avec perte |
| Le volume diminue-t-il nécessairement ? | Il n'y a aucune garantie que chaque PDF sera plus petit | Le volume change en fonction de la situation réelle du dossier | Dépend des résultats réels du traitement |
🎯 Quelle méthode vous convient ?
Si vous devez conserver les images et la typographie
- Utilisez la compression sans perte du flux de contenu et révisez avec les octets décodés et la relecture du texte.
Si vous n'avez besoin que d'un contenu en texte brut
- Vous pouvez envisager de supprimer l'image, mais confirmez d'abord que l'image n'est pas nécessaire pour la scène cible.
Si vous souhaitez que le volume soit nettement plus petit après la compression
- Utilisez d'abord votre échantillon réel pour le mesurer, ne présumez pas qu'il deviendra définitivement plus petit.
Si vous devez traiter des fichiers importants
- Conservez d'abord le document original et examinez les résultats en fonction des limites et des éléments d'acceptation dans le texte.
❓ Questions fréquemment posées (FAQ)
1. La compression sans perte modifiera-t-elle l'image ?
Selon les critères d'acceptation de cet article, les données de pixels d'origine de l'image ne seront pas modifiées après compression sans perte du flux de contenu, et les octets décodés et le texte extrait doivent être cohérents.
2. Le PDF sera-t-il plus petit après compression ?
incertain. Cet article ne promet pas que chaque PDF deviendra plus petit. Si la taille ne diminue pas, elle doit être enregistrée fidèlement.
3. compress_content_streams peut-il ajuster le niveau de compression ?
Ne peut pas. Cette fonction n'accepte pas de paramètre de niveau de compression et utilise en interne la configuration par défaut de zlib.
4. remove_images() peut-il être utilisé comme compression d'image ?
Ne peut pas. Il supprime complètement l'image, au lieu de la compresser, et ne doit pas être utilisé lors de l'étape de préparation de la traduction, sauf si l'image n'est vraiment pas nécessaire pour la scène cible.
📝Résumé
Avant de compresser un PDF, déterminez d'abord si vous pouvez accepter la perte d'image, puis choisissez la méthode de traitement correspondante. La compression du flux de contenu sans perte convient aux scénarios dans lesquels l'apparence d'origine doit être préservée et où les octets décodés et la relecture du texte sont utilisés comme critères d'acceptation.


