Y a-t-il des pièces jointes cachées dans le PDF ? Inventaire des fichiers intégrés avant livraison avec pypdf

Des pièces jointes peuvent être intégrées au PDF et les pièces jointes portant le même nom peuvent correspondre à plusieurs éléments de contenu. Inventaire avec pypdf avant livraison : attribuez un identifiant indépendant à chaque pièce jointe dans l'ordre d'extraction, laissez le nom d'origine comme métadonnées, n'écrivez pas sur le disque, n'exécutez pas, ne laissez pas les clients recevoir un colis de livraison avec des pièces manquantes.

Des pièces jointes peuvent être intégrées au PDF. S'ils ne sont pas vérifiés avant la livraison, le paquet de documents reçu par le client peut manquer. Cet article est destiné aux développeurs et au personnel de livraison de documents qui doivent extraire ou vérifier des fichiers PDF incorporés par lots. Il explique pourquoi les pièces jointes portant le même nom et des noms de fichiers anormaux peuvent entraîner une perte silencieuse de fichiers, et comment utiliser pypdf pour compter les pièces jointes en toute sécurité.

Après avoir lu ceci, vous devriez être capable de faire trois choses : attribuer un identifiant unique à chaque pièce jointe, conserver le nom d'origine sous forme de métadonnées plutôt que de l'écrire directement sur le disque et utiliser un formulaire d'acceptation pour faire la distinction entre les cas qui peuvent être traités automatiquement et ceux qui nécessitent une révision manuelle.

Les exemples de cet article sont tous des échantillons synthétiques et le code a passé avec succès une inspection par échantillons dans un environnement isolé, mais cela ne représente pas une garantie de tous les fichiers réels ou effets du produit. Veuillez conserver les originaux avant de manipuler des documents importants.

Comment compter les pièces jointes PDF avant livraison ? Conclusion en une phrase

Utilisez pypdf pour attribuer un identifiant indépendant à chaque pièce jointe dans l'ordre d'extraction. Le nom d'origine est uniquement conservé sous forme de métadonnées et n'est pas directement écrit sur le disque. Les exceptions sont examinées manuellement selon le formulaire d'acceptation.

votre situationPratiques recommandéesraison
Il peut y avoir des pièces jointes portant le même nom dans le PDFAttribuez des identifiants indépendants dans l'ordre d'extraction, conservez tout le contenuLes pièces jointes portant le même nom sont stockées sous forme de liste. Écrire directement par nom s'écrasera.
Le nom du fichier contient ../ ou un séparateur de cheminSupprimez la structure des répertoires et prenez uniquement le nom du fichier comme métadonnéesL'écriture directe peut échouer et même entraîner des risques de sécurité
Il existe de nombreuses pièces jointes, un cryptage ou des signatures.Suspendez le processus automatisé et transférez-le à un réviseur dédiéLorsqu'il y a plus de 20 pièces jointes ou qu'il y a un cryptage ou des signatures, les résultats automatisés nécessitent une confirmation manuelle.
L'intégralité doit être confirmée avant la livraisonVérifier article par article par rapport au formulaire d'acceptationL'extraction automatique ne peut pas remplacer la vérification manuelle avant la livraison

Pourquoi une pièce jointe portant le même nom perd-elle silencieusement des fichiers ?

Lors du traitement de fichiers PDF contenant des fichiers intégrés, le problème le plus caché n'est pas l'erreur, mais le manque de fichiers une fois le processus exécuté « avec succès ».

  • Lors d'une boucle sur reader.attachments et d'une écriture directe sur le disque avec le nom d'origine, si le PDF contient deux fichiers nommés report.xlsx, ce dernier écrasera le précédent.
  • Lorsque le nom du fichier contient des ../ ou des caractères réservés au système, l'écriture peut échouer et même déclencher des risques de sécurité.
  • Le document officiel pypdf indique que les noms des pièces jointes peuvent contenir n'importe quel caractère et que les pièces jointes portant le même nom sont stockées sous forme de liste.

Par conséquent, toute logique d’extraction par lots non nettoyée ne sera pas fiable lorsqu’elle rencontrera des PDF non standard.

Construire une entrée de limite vérifiable à l'aide d'échantillons synthétiques

Pour vérifier la robustesse de la logique d’extraction, des échantillons synthétiques contrôlés doivent être construits plutôt que de s’appuyer sur des fichiers de production d’origine inconnue. L'exemple suppose qu'un PDF contient trois pièces jointes :

  1. Fichier normal data.csv ;
  2. data.csv avec le même nom que le premier, mais avec un contenu différent ;
  3. Le nom du fichier contient ..\secret.txt avec des caractéristiques de parcours de chemin.

Ces trois pièces jointes couvrent respectivement trois types de situations : extraction normale, conflit de même nom et anomalie de chemin.

Exécutez l'exemple d'extraction sécurisée et de désinfection du nom de fichier

Voir la liste d'importation pour les dépendances. Le code construit l'entrée en mémoire, n'écrit pas sur le disque et n'exécute pas le contenu des pièces jointes.

from io import BytesIO
from pypdf import PdfReader, PdfWriter
writer = PdfWriter()
writer.add_blank_page(width=200, height=200)
writer.add_attachment("data.csv", b"row-one")
writer.add_attachment("data.csv", b"row-two")
writer.add_attachment("../secret.txt", b"synthetic secret")
out = BytesIO()
writer.write(out)
out.seek(0)
reader = PdfReader(out)
records = []
for name, contents in reader.attachments.items():
    for content in contents:
        records.append({"id": len(records), "source_name": name, "bytes": content})
assert len(records) == 3
assert len({r["id"] for r in records}) == 3
assert {r["bytes"] for r in records if r["source_name"] == "data.csv"} == {b"row-one", b"row-two"}
assert any(r["source_name"] == "../secret.txt" for r in records)

Il convient de noter que ce code n'est qu'une démonstration logique et ne constitue pas une couverture complète de toutes les fonctionnalités de pièce jointe de pypdf. Des situations telles que la lecture en streaming de fichiers volumineux et les anomalies d’encodage doivent également être prises en compte en production.

📊 Comparaison de base

pratiquePièce jointe du même nomLe nom du fichier contient un séparateur de cheminillustrer
Écrivez directement sur le disque avec le nom d'origineCe dernier couvre le premierLes écritures peuvent échouer et même déclencher des risques de sécuritéIl est facile de perdre des fichiers en silence
Attribuer des identifiants indépendants dans l'ordre d'extractionConservez chaque pièce jointe individuellementLe nom d'origine est utilisé uniquement comme métadonnées et n'est pas utilisé pour écrire le cheminLe nom d'origine peut encore être retracé

🎯 Quelle méthode vous convient ?

Si vous n'avez besoin de vérifier qu'un petit nombre de pièces jointes normales

Conservez l'original, extrayez-le avec l'exemple de code et comparez le contenu des fichiers un par un.

Si le PDF que vous traitez peut contenir des pièces jointes portant le même nom

Attribuez des identifiants indépendants dans l’ordre d’extraction et n’utilisez pas de numéros de série locaux ou de noms épurés comme clés globales.

S'il y a plus de 20 pièces jointes, ou s'il y a un cryptage ou une signature

Suspendez le processus automatisé et transférez-le à un réviseur dédié.

❓ Questions fréquemment posées (FAQ)

1. Pourquoi la pièce jointe portant le même nom ne peut-elle pas être écrite directement sur le disque ?

Les fichiers écrits plus tard écraseront les fichiers écrits plus tôt, entraînant une perte silencieuse du contenu.

2. Quels risques comporte ../ dans le nom de fichier ?

Les écritures directes peuvent échouer et même déclencher des risques de sécurité. L'article recommande de supprimer la structure des répertoires et de conserver uniquement les noms de fichiers comme métadonnées.

3. Le contenu de la pièce jointe est vide ou très petit. Voulez-vous toujours le sauvegarder ?

Selon les recommandations de traitement automatique du formulaire d'acceptation, le journal doit être enregistré et le fichier toujours sauvegardé, puis juger manuellement s'il s'agit d'un espace réservé ou s'il est endommagé.

4. Ce code peut-il couvrir toutes les fonctionnalités des pièces jointes pypdf ?

ne peut pas. Il ne s’agit que d’une démonstration logique, et des situations telles que la lecture en continu de fichiers volumineux et les exceptions d’encodage doivent être considérées séparément.

Critères d'acceptation et limites de révision manuelle

L'extraction automatisée ne remplace pas la vérification manuelle avant la livraison. Le tableau suivant répertorie les exceptions courantes et leurs méthodes de traitement, en distinguant les scénarios qui peuvent être résolus par code et ceux qui nécessitent une intervention manuelle :

Observer les phénomènesTraitement automatiqueRévision manuelle
Plusieurs pièces jointes portant le même nomAjouter un préfixe de numéro de série et conserver tout le contenuConfirmez s'il s'agit d'une itération de version ou d'un mauvais intégration
Le nom du fichier contient un séparateur de cheminSupprimez la structure des répertoires et ne prenez que le nom du fichierVérifiez si la charge utile malveillante est destinée à être cachée
Le contenu de la pièce jointe est vide ou extrêmement petitConnectez-vous, enregistrez toujours le fichierDéterminer s'il s'agit d'un espace réservé ou endommagé
Caractères tronqués ou non imprimables dans le nom de fichierRemplacer par un trait de soulignement, conserver l'indexRetour en arrière sur la sémantique de confirmation des métadonnées PDF d'origine
Le type de pièce jointe ne correspond pas à l'extensionRenifler par contenu ou laisser tel quelUtilisation déterminée par des experts du domaine

Ce tableau convient à la vérification au niveau de la démonstration de code. L’effet de bout en bout doit également être combiné avec le contexte commercial. Par exemple, des pièces jointes manquantes au contrat peuvent être plus graves qu'un nom de fichier incorrect. Lorsque le nombre de pièces jointes dépasse 20, ou qu'il y a un cryptage ou des signatures, le processus automatisé doit être suspendu et transféré à une personne dédiée pour examen.

Lectures complémentaires

Étape suivante

  • Ajouter des cas de test de pièces jointes synthétiques au pipeline CI ;
  • Exécuter le script d'extraction de purification sur un échantillon de documents de livraison historiques pour établir une référence d'intégrité des pièces jointes ;
  • Si une perte systémique est détectée, donnez la priorité aux conflits de noms plutôt qu'aux problèmes de réseau ou d'autorisation.

Comment combiner avec la traduction de documents avant la livraison

La décomposition des fichiers, le chiffrement ou le traitement des pièces jointes font partie de la préparation à la livraison, et la traduction ne peut remplacer ces contrôles. Après avoir conservé la copie originale et la liste de traitement, évaluez l'ordre des pages, les liens et l'intégrité du contenu de la traduction.

OmniDoc (portail produit) fournit un portail de traduction de documents multiformat et le site officiel présente des fonctions d'OCR, de glossaire et de comparaison bilingue. Pour les équipes qui souhaitent commencer à travailler directement à partir de fichiers, ce chemin peut être évalué avec des échantillons réels. Veuillez utiliser les fichiers désensibilisés que vous êtes autorisé à télécharger et utilisez les éléments de vérification de cet article pour examiner les résultats. Cet article ne prétend pas qu'OmniDoc utilise les bibliothèques open source ou les algorithmes internes de l'article, et les exemples ne peuvent pas remplacer les tests de performances du produit.

📝Résumé

La clé pour compter les pièces jointes PDF avant leur livraison consiste à attribuer un identifiant indépendant à chaque pièce jointe, à conserver le nom d'origine sous forme de métadonnées et à effectuer un examen manuel des exceptions. Validez le processus d’abord avec des échantillons synthétiques, puis avec des documents réels.

Essayez-le maintenant : téléchargez le document pour lancer la traduction, en conservant la mise en page d'origine.

Mis à jour le 2026-11-14