7-PDF Attach Extract And Remove Files – Documentation GUI & CLI

Utilisation par interface graphique à onglets ou ligne de commande

L’outil 7-PDF Attach Extract And Remove Files offre deux modes d’utilisation :

  • Une interface graphique intuitive à onglets
  • Une interface en ligne de commande (CLI) puissante pour l’automatisation et l’intégration

L’interface utilisateur permet toutes les fonctions principales par simple clic – idéale pour un usage manuel. La CLI permet un traitement par lots dans des environnements automatisés comme ERP, solutions d'impression ou systèmes de gestion.

Vue onglet facture PDF

Tutoriel vidéo – onglet "Facture PDF vers ZUGFeRD" non encore inclus

Cette vidéo montre les onglets "Joindre", "Extraire" et "Supprimer" des pièces jointes dans des fichiers PDF. L'onglet "Facture PDF vers ZUGFeRD" n’est pas encore représenté, mais son utilisation est identique aux autres.

Comment utiliser "Facture PDF vers ZUGFeRD" avec Word, Excel ou d'autres logiciels est expliqué ici dans un guide pas à pas…

🖱️ Aperçu des onglets et des fonctions GUI

OngletFonction
Joindre un fichier au PDFIntègre des fichiers externes dans un PDF/A-3 (ex. XML ZUGFeRD)
Extraire un fichier du PDFExtrait des pièces jointes spécifiques du PDF
Supprimer un fichier du PDFSupprime des pièces jointes par nom ou type
Facture PDF vers PDF ZUGFeRDLance la conversion ZUGFeRD via le service Web intégré
Protection des donnéesConsentement requis pour l’utilisation du service Web
Licence / InfosAffiche le statut de la licence

🔐 Licence & Factures Gratuites pour la Conversion de PDF en ZUGFeRD

  • 25 conversions gratuites ZUGFeRD avec la version complète
  • Reconnaissance automatique du jeton API ou de la licence
  • Une fois votre quota de factures gratuites utilisé, un message dans l'application vous indiquera comment activer facilement un jeton API pour une utilisation illimitée.

📍 Conversion de Factures PDF en ZUGFeRD – Informations Complémentaires

  • Seuls les fichiers au format PDF/A-3b sont pris en charge (ISO 19005-3)
    Pas d’inquiétude : 👉 Voir le guide ici pour créer votre facture avec 7-PDF Printer Professional. Il suffit de réimprimer votre facture (par ex. depuis Acrobat Reader) pour générer automatiquement un PDF ZUGFeRD conforme.
  • 🎯 L’interface graphique prend en charge le glisser-déposer et fournit un retour visuel
  • ⚙️ Idéal pour l’automatisation en arrière-plan via CLI

💡 Mode CLI – Interface en ligne de commande

Pour les utilisateurs avancés, l’automatisation et l’intégration dans des processus (ERP, batch, impression).

Lancement via :

PDFAttachExtractAndRemoveFiles.exe -mode "console" -usage "attach" -inpdf "facture.pdf" -infile "factur-x.xml"

Paramètres disponibles en CLI

ParamètreDescription
-modegui (défaut), console, hidden
-usageattach, extract, remove, generate
-inpdfChemin vers le fichier PDF source (PDF/A-3)
-infileFichier à joindre (ex. XML)
-outpathChemin cible pour l'extraction
-fileextFiltre d’extension (ex. .xml)
-byNameExtraire ou supprimer un fichier spécifique par nom
-estandardVersion ZUGFeRD : ZF1, ZF2, ZF21
-apiTokenJeton API pour accéder au Webservice
-logfileFichier log en sortie (mode hidden)

Exemples de commandes

:: Joindre un fichier :
PDFAttachExtractAndRemoveFiles.exe -mode "console" -usage "attach" -inpdf "facture.pdf" -infile "factur-x.xml" -estandard "ZF2"

:: Extraire un fichier :
PDFAttachExtractAndRemoveFiles.exe -mode "console" -usage "extract" -inpdf "facture.pdf" -outpath "C:\Output" -fileext ".xml"

:: Supprimer un fichier :
PDFAttachExtractAndRemoveFiles.exe -mode "console" -usage "remove" -inpdf "facture.pdf" -byName "factur-x.xml"

:: Convertir en ZUGFeRD :
PDFAttachExtractAndRemoveFiles.exe -mode "console" -usage "generate" -inpdf "facture.pdf" -apiToken "VOTRE_TOKEN"

🔌 Accès à l’API via FastAPI & CURL

Avec un abonnement Pro, Team ou Enterprise, vous bénéficiez en plus d’un accès API complet à notre service FastAPI de conversion de factures PDF. Il permet de convertir automatiquement vos factures PDF en factures électroniques ZUGFeRD dans vos propres applications ou systèmes.

L’accès s’effectue via une requête POST HTTPS sécurisée avec jeton et retourne des données structurées JSON ou XML – idéal pour les développeurs ou intégrateurs.

Les données sont transférées de manière chiffrée (HTTPS) et traitées exclusivement sur notre infrastructure serveur en Allemagne.

Consultez notre REST API moderne via le point de terminaison /extract-invoice/.

Exemple : conversion d’un PDF en ZUGFeRD XML via CURL

curl -X POST https://generator.7-pdf.de/extract-invoice/ \
-H "accept: application/json" \
-H "Authorization: Bearer [[ T O K E N - C O D E ]]" \
-H "Content-Type: multipart/form-data" \
-F "file=@/Users/utilisateur/Documents/Facture.pdf"

Remarque : Remplacez [[ T O K E N - C O D E ]] par votre jeton API personnel valide.

Réponse (extrait) :

{
  "success": true,
  "invoice_number": "2825056",
  "xml": "<?xml version=\"1.0\" ?>\n<rsm:CrossIndustryInvoice ...",
  "validation_file": "passed",
  "validation_string": "passed"
}

Vous pouvez tester cette API également via Postman ou intégrer l’appel dans vos scripts.

Exemple PowerShell : Convertir un PDF en XML ZUGFeRD sous Windows

Le point de terminaison de l'API peut également être appelé facilement sous Windows à l’aide d’un script PowerShell avec curl.exe. Cela permet de convertir directement une facture PDF en factur-x.xml (facture électronique XML). Voici un exemple de script :

    
    # Store that Script Code under: GetFacturXFromPDF.ps1
    # Call: .\GetFacturXFromPDF.ps1
    # Params: -PdfPath "C:\inv\2025-05-17.pdf" -ApiToken "[[ T O K E N - C O D E ]]"
                    
    param (
        [Parameter(Mandatory = $true)]
        [string]$PdfPath,
    
        [Parameter(Mandatory = $true)]
        [string]$ApiToken
    )
    
    # 1. Send PDF to "7-PDF Invoice Extractor" - FastAPI
    curl.exe -X POST "https://generator.7-pdf.de/extract-invoice/" `
    -H "accept: application/json" `
    -H "Authorization: Bearer $ApiToken" `
    -H "Content-Type: multipart/form-data" `
    -F "file=@$PdfPath" `
    -o response.json
    
    # 2. Read JSON Response
    $json = Get-Content -Raw -Path .\response.json | ConvertFrom-Json
    
    # 3. Extract and store ZUGFeRD XML
    $json.xml | Set-Content -Encoding UTF8 -Path .\factur-x.xml
                    
               

Exemple d’appel dans une fenêtre PowerShell :

.\GetFacturXFromPDF.ps1 "C:\inv\2025-05-17.pdf" -ApiToken "[[ T O K E N - C O D E ]]"

Astuce : Si Windows affiche un avertissement de sécurité, vous pouvez débloquer le script avec Unblock-File .\GetFacturXFromPDF.ps1.

Remarque : Remplacez [[ T O K E N - C O D E ]] par votre jeton API personnel valide. Le point de terminaison accepte les fichiers PDF et renvoie les données de facture structurées au format JSON ainsi que, facultativement, le fichier XML conforme à ZUGFeRD.

Exemple PowerShell : Convertir toutes les factures PDF d’un dossier en PDF ZUGFeRD

Le script PowerShell ci-dessous utilise notre 7-PDF Invoice Extractor pour convertir automatiquement toutes les factures PDF d’un dossier en factures électroniques ZUGFeRD valides (PDF/A-3).

Le fichier XML ZUGFeRD est ajouté via 7-PDF Attach Extract and Remove. Comme le format PDF/A-3b est requis, les factures PDF standard sont d’abord converties via notre 7-PDF Printer Professional. Les deux programmes doivent donc être installés sur le système. Un jeton API est également requis pour accéder au 7-PDF Invoice Extractor !

Le script attend 3 paramètres :
-InputFolder "[Chemin vers les factures PDF standard]"
-OutputFolder "[Dossier de sortie pour les factures PDF ZUGFeRD]"
-ApiToken "**[[ T O K E N - C O D E ]]"

** Remarque : en mode d'essai de 7-PDF Attach Extract and Remove, utilisez simplement un espace comme jeton d'API

Voici le code PowerShell :

               
    param (
        [Parameter(Mandatory = $true)] [string]$InputFolder,
        [Parameter(Mandatory = $true)] [string]$OutputFolder,
        [Parameter(Mandatory = $true)] [string]$ApiToken
    )
    
    function Get-7PdfPrinterAppPath {
        $key = 'HKLM:\SYSTEM\CurrentControlSet\Control\Print\Printers'
        $printers = Get-ChildItem -Path $key -ErrorAction SilentlyContinue
        foreach ($printer in $printers) {
            $desc = Get-ItemProperty -Path "$key\$($printer.PSChildName)" -ErrorAction SilentlyContinue
            if ($desc.Description -like "*7-PDF Printer*") {
                $appFolder = $desc.AppFolder
                if ($appFolder -and (Test-Path $appFolder)) {
                    return $appFolder
                }
            }
        }
        return $null
    }
    
    function Escape-PathForPostScript {
        param ([string]$Path)
        return ($Path -replace '\\', '/' -replace ' ', '\\ ')
    }
    
    function Save-PostScriptForPdfA3 {
        param (
            [string]$TargetFilePath,
            [string]$ICCPath,
            [string]$Title = "PDF Title",
            [string]$Author = "PDF Author",
            [string]$Subject = "PDF Subject",
            [string]$Keywords = "PDF/A, ZUGFeRD",
            [string]$Producer = "7-PDF Printer",
            [string]$Creator = "7-PDF Printer"
        )
    
        $iccUnix = Escape-PathForPostScript $ICCPath
        $postScriptText = @"
    %!
    % This is a sample prefix file for creating a PDF/A document.
    % Users should modify entries marked with "Customize".
    % This assumes an ICC profile resides in the file (srgb.icc),
    % in the current directory unless the user modifies the corresponding line below.
    
    % Define entries in the document Info dictionary :
    [ /Title ($Title)
      /Author ($Author)
      /Subject ($Subject)
      /Keywords ($Keywords)
      /Producer ($Producer)
      /Creator ($Creator)
      /DOCINFO pdfmark
    
    % Define an ICC profile :
    /ICCProfile ($iccUnix) % Customize
    def
    
    [/_objdef {icc_PDFA} /type /stream /OBJ pdfmark
    
    [{icc_PDFA}
    <<
    %% ----------8<--------------8<-------------8<--------------8<----------
      systemdict /ColorConversionStrategy known {
        systemdict /ColorConversionStrategy get cvn dup /Gray eq {
          pop /N 1 false
        }{
          dup /RGB eq {
            pop /N 3 false
          }{
            /CMYK eq {
              /N 4 false
            }{
              (\tColorConversionStrategy not a device space, falling back to ProcessColorModel, output may not be valid PDF/A.\n)=
              true
            } ifelse
          } ifelse
        } ifelse
      } {
        (\tColorConversionStrategy not set, falling back to ProcessColorModel, output may not be valid PDF/A.\n)=
        true
      } ifelse
    
      {
        currentpagedevice /ProcessColorModel get
        dup /DeviceGray eq {
          pop /N 1
        }{
          dup /DeviceRGB eq {
            pop /N 3
          }{
            dup /DeviceCMYK eq {
              pop /N 4
            } {
              (\tProcessColorModel not a device space.)=
              /ProcessColorModel cvx /rangecheck signalerror
            } ifelse
          } ifelse
        } ifelse
      } if
    %% ----------8<--------------8<-------------8<--------------8<----------
    
    >> /PUT pdfmark
    [
    {icc_PDFA}
    {ICCProfile (r) file} stopped
    {
      (\n\tFailed to open the supplied ICCProfile for reading. This may be due to\n) print
      (\t  an incorrect filename or a failure to add --permit-file-read=<profile>\n) print
      (\t  to the command line. This PostScript program needs to open the file\n) print
      (\t  and you must explicitly grant it permission to do so.\n\n) print
      (\tPDF/A processing aborted, output may not be a PDF/A file.\n\n) print
      cleartomark
    }
    {
      /PUT pdfmark
      [/_objdef {OutputIntent_PDFA} /type /dict /OBJ pdfmark
      [{OutputIntent_PDFA} <<
        /Type /OutputIntent
        /S /GTS_PDFA1
        /DestOutputProfile {icc_PDFA}
        /OutputConditionIdentifier (sRGB) % Customize
      >> /PUT pdfmark
      [{Catalog} << /OutputIntents [ {OutputIntent_PDFA} ]>> /PUT pdfmark
    } ifelse
    "@
    
        Set-Content -Path $TargetFilePath -Value $postScriptText -Encoding ASCII
    }
    
    function Convert-ToPdfA3b {
        param (
            [string]$InputPdf,
            [string]$PrinterAppPath
        )
    
        $gsExe = Join-Path $PrinterAppPath "gs\gswin64c.exe"
        $iccFile = Join-Path $PrinterAppPath "icc\sRGB_IEC61966-2-1_no_black_scaling.icc"
        $dir = Split-Path $InputPdf
        $psFile = Join-Path $dir "lib_PDFA_def.ps"
        $tempPdfa = Join-Path $dir ("A_" + [System.IO.Path]::GetFileName($InputPdf))
    
        if (-not (Test-Path $gsExe)) {
            Write-Warning "Ghostscript not found: $gsExe"
            return $false
        }
        if (-not (Test-Path $iccFile)) {
            Write-Warning "ICC profile missing: $iccFile"
            return $false
        }
    
        Save-PostScriptForPdfA3 -TargetFilePath $psFile -ICCPath $iccFile
    
        # Ghostscript-Args
        $args = @(
            "--permit-file-read=$iccFile",
            "-sDEVICE=pdfwrite",
            "-dPDFACompatibilityPolicy=1",
            "-dPDFA=3",
            "-sColorConversionStrategy=RGB",
            "-o", "`"$tempPdfa`"",
            "`"$psFile`"",
            "`"$InputPdf`""
        )
    
        & "$gsExe" @args 2>&1 | Tee-Object "$env:TEMP\gs_pdfa3b.log"
    
        if (Test-Path $tempPdfa) {
            Move-Item $tempPdfa $InputPdf -Force
            Remove-Item $psFile -Force -ErrorAction SilentlyContinue
            return $true
        } else {
            Write-Warning "PDF/A conversion failed for: $InputPdf (see $env:TEMP\gs_pdfa3b.log)"
            return $false
        }
    }
    
    # Tool path to ZUGFeRD processor
    $toolPath = "C:\Program Files (x86)\7-PDF\7-PDF Attach Extract And Remove Files\PDFAttachExtractAndRemoveFiles.exe"
    if (-not (Test-Path $toolPath)) {
        Write-Error "ZUGFeRD processor not found: $toolPath"
        exit 1
    }
    
    if (-not (Test-Path $OutputFolder)) {
        Write-Host "Creating output folder: $OutputFolder"
        New-Item -ItemType Directory -Path $OutputFolder | Out-Null
    }
    
    $appPath = Get-7PdfPrinterAppPath
    if (-not $appPath) {
        Write-Error "7-PDF Printer not found in registry."
        exit 1
    }
    
    $successCount = 0
    $errorCount = 0
    
    Get-ChildItem -Path $InputFolder -Filter *.pdf | ForEach-Object {
        $inputFile = $_.FullName
        $basename = $_.BaseName
        $outputFile = Join-Path $OutputFolder "$basename.pdf"
    
        Write-Host "Processing: $inputFile -> $outputFile"
    
        Copy-Item $inputFile $outputFile -Force
    
        if (-not (Convert-ToPdfA3b -InputPdf $outputFile -PrinterAppPath $appPath)) {
            $errorCount++
            return
        }
    
        $argLine = "-mode `"hidden`" -usage `"generate`" -inpdf `"$outputFile`" -apiToken `"$ApiToken`""
    
        $proc = Start-Process -FilePath "$toolPath" -ArgumentList $argLine -Wait -NoNewWindow -PassThru
    
        if ($proc.ExitCode -eq 0) {
            $successCount++
        } else {
            Write-Warning "ZUGFeRD processing failed (ExitCode $($proc.ExitCode)): $outputFile"
            $errorCount++
        }
    }
    
    Write-Host ""
    Write-Host "Script finished."
    Write-Host "Successfully processed: $successCount file(s)"
    Write-Host "Failed: $errorCount file(s)"
                
                

Exemple d’appel dans une fenêtre PowerShell:

.\convert-pdfs-to-pdf-zugferd.ps1 -InputFolder "pdfs_in" -OutputFolder "pdfs_out" -ApiToken "[[ T O K E N - C O D E ]]"

Avantages de l’accès API direct

  • Traitement automatisé des factures PDF dans DMS, ERP ou applications Web
  • Pas d'interaction manuelle requise – 100% automatisé
  • Facilement intégrable (ex. CURL, Postman, Python, PHP...)
  • Authentification sécurisée par jeton
🔒 Important : L'accès API est exclusivement réservé aux clients avec abonnement Pro, Team ou Enterprise.
Il n’y a actuellement pas de blocage technique – des tests occasionnels peuvent fonctionner avec Starter ou Basic. Mais un accès complet est uniquement destiné aux abonnements avancés.

Activer l’accès API

Télécharger l’outil Acheter un jeton API

Enregistrement de la clé de licence dans l'application

Votre clé de licence personnelle peut être activée en tant que version full après avoir acquis la licence dans le programme déjà installé en utilisant le bouton "Insérer la clé de licence, ..." dans l'onglet "Info". À titre d'illustration, nous avons un graphique ci-dessous qui montre le bouton "Enter license key, ..." dans le logiciel:

Entrez votre clé de licence ici

Classe: Lorsque la clé de licence est saisie, elle est validée et activée sur Internet (via SSL). Par conséquent, assurez-vous que vous disposez d'une connexion Internet active pour le processus d'enregistrement unique de l'application! Dans de rares cas, des pare-feu d'applications tierces installés localement peuvent bloquer l'accès du programme à Internet. Lorsque vous utilisez ces pare-feu tiers, assurez-vous d'accorder les droits nécessaires pour accéder à Internet pour le processus d'enregistrement unique de l'application.

Malheureusement, le problème du piratage de logiciels nous est également préjudiciable et nous devons faire face à ce piratage. C'est la seule façon pour nous de continuer à vous fournir gratuitement des services de maintenance ou d'assistance. Internet n'est nécessaire qu'une seule fois pour le processus d'inscription! Ce qui est stocké sur vos systèmes reste sur vos systèmes!

Distribution automatique des licences avec la version complète de 7-PDF Attach Extract and Remove

En plus de la saisie manuelle dans le programme installé, les licences peuvent également être automatisées dans le cadre d'un déploiement. Pour cela, vous définissez une entrée de registre correspondante.

Pour une licence dans le cadre d'un déploiement sur « plusieurs » (!) PC, systèmes Citrix et TS, veuillez nous contacter en même temps. Cela nécessite une clé spéciale que (!) vous pouvez distribuer directement, soit via un fichier INI ou mieux via une entrée de registre. La clé de licence que vous avez achetée n’est pas une clé spéciale, il est donc inutile de la saisir directement dans le registre.

La capture d'écran ci-dessous montre le chemin pour capturer la clé de licence spéciale dans le registre (SpecialKey).

La capture d'écran suivante montre le chemin d'accès pour entrer la clé de licence dans le registre

Le logiciel démarre ensuite en version complète en définissant la clé de licence dans la clé "Code".

Sur Citrix et TS Systems, il suffit généralement de démarrer l'application avec "Exécuter en tant qu'administrateur" et de saisir manuellement la clé de licence que vous avez acquise en tant qu'administrateur dans la demande de licence. La clé de registre illustrée dans la figure ci-dessus est définie par l'application elle-même dans ce scénario. Cependant, cette étape doit être effectuée manuellement pour chaque serveur Terminal Server. Si vous avez un grand nombre de serveurs Terminal Server, il est conseillé de nous contacter également. Ce scénario nécessite également une clé spéciale que vous pouvez distribuer automatiquement.

Déploiement automatique / distribution de logiciels

La configuration prend en charge les paramètres d'installation /SILENT et /VERYSILENT pour distribuer le logiciel.

Si vous avez d'autres questions sur le programme, veuillez contacter directement notre support par e-mail gratuit. Sinon, nous vous souhaitons beaucoup de plaisir avec PDF Attach Extract and Remove Files!

Top