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 situation | Pratiques recommandées | raison |
|---|---|---|
| Il peut y avoir des pièces jointes portant le même nom dans le PDF | Attribuez des identifiants indépendants dans l'ordre d'extraction, conservez tout le contenu | Les 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 chemin | Supprimez la structure des répertoires et prenez uniquement le nom du fichier comme métadonnées | L'é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 livraison | Vérifier article par article par rapport au formulaire d'acceptation | L'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.attachmentset d'une écriture directe sur le disque avec le nom d'origine, si le PDF contient deux fichiers nommésreport.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 :
- Fichier normal
data.csv; data.csvavec le même nom que le premier, mais avec un contenu différent ;- Le nom du fichier contient
..\secret.txtavec 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
| pratique | Pièce jointe du même nom | Le nom du fichier contient un séparateur de chemin | illustrer |
|---|---|---|---|
| Écrivez directement sur le disque avec le nom d'origine | Ce dernier couvre le premier | Les é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'extraction | Conservez chaque pièce jointe individuellement | Le nom d'origine est utilisé uniquement comme métadonnées et n'est pas utilisé pour écrire le chemin | Le 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ènes | Traitement automatique | Révision manuelle |
|---|---|---|
| Plusieurs pièces jointes portant le même nom | Ajouter un préfixe de numéro de série et conserver tout le contenu | Confirmez 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 chemin | Supprimez la structure des répertoires et ne prenez que le nom du fichier | Vérifiez si la charge utile malveillante est destinée à être cachée |
| Le contenu de la pièce jointe est vide ou extrêmement petit | Connectez-vous, enregistrez toujours le fichier | Déterminer s'il s'agit d'un espace réservé ou endommagé |
| Caractères tronqués ou non imprimables dans le nom de fichier | Remplacer par un trait de soulignement, conserver l'index | Retour 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'extension | Renifler par contenu ou laisser tel quel | Utilisation 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
- documentation officielle des pièces jointes de poignée pypdf
- Spécification PDF 2.0, section 14.13 (fichiers associés)
É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.


