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

Bedienung per Reiter-GUI oder Kommandozeile

Das Tool 7-PDF Attach Extract And Remove Files bietet zwei komfortable Bedienwege:

  • eine intuitive GUI mit Reiterstruktur für visuelle Bedienung
  • eine mächtige CLI (Command Line Interface) zur Automatisierung und Integration

Die Benutzeroberfläche erlaubt alle Hauptfunktionen per Klick – ideal für Einzelverarbeitung. Die CLI ermöglicht Stapelverarbeitung und professionelle Workflows in automatisierten Umgebungen wie WaWi, ERP, Druckdienste usw.

Reiteransicht PDF-Rechnung

Videotutorial zu 7-PDF Attach Extract & Remove - noch ohne den Reiter "PDF-Rechnung in PDF ZUGFeRD"

Das Video illustriert die Reiter "Anfügen" "Extraktion" und "Löschen" von Dateianhängen an PDF Dokumenten. Der Reiter "PDF-Rechnung in PDF ZUGFeRD" fehlt hier noch, die Bedienung ist aber zu den anderen Reitern identisch.

Wie "PDF-Rechnung in PDF ZUGFeRD" mit Word und Excel oder aus anderen Anwendungen heraus genutzt werden kann, zeigen wir Ihnen in einer kurzen Step-by-Step Anleitung hier...

🖱️ GUI-Reiter und Funktionen im Überblick

ReiterFunktion
Datei an PDF anhängenBindet externe Dateien in eine PDF/A-3-Datei ein (z. B. XML nach ZUGFeRD)
Datei aus PDF extrahierenExtrahiert gezielt eingebettete Dateien aus der PDF
Datei aus PDF entfernenEntfernt eingebettete Dateien nach Typ oder Name
PDF-Rechnung in PDF ZUGFeRDStartet die ZUGFeRD-Konvertierung über den integrierten Webservice
DatenschutzEinwilligung zur Verarbeitung bei Nutzung des Webservices
Lizenz/InfosLizenzstatus einsehbar

🔐 Lizenzierung & Freirechnungsläufe für die Umwandlung von PDF zu ZUGFeRD

  • 25 kostenfreie ZUGFeRD-Umwandlungen bei Vollversion
  • Lizenz- oder API-Key wird automatisch erkannt
  • Ihr Freikontingent ist aufgebraucht? Kein Problem – direkt im Tool erhalten Sie einen Hinweis, wie Sie bequem ein API-Token für die dauerhafte Nutzung aktivieren können.

📍 PDF-Rechnung in ZUGFeRD umwandeln - Weitere Hinweise

  • Nur PDF/A-3b Dateien werden unterstützt (ISO 19005-3)
    Keine Sorge: 👉 Hier geht’s zur Anleitung, wie Sie Ihre Rechnung mit 7-PDF Printer Professional ganz einfach konform ausgeben. Danach einfach erneut „drucken“ – fertig ist Ihre ZUGFeRD-konforme PDF-Rechnung.
  • 🎯 Die GUI bietet Drag & Drop und visuelles Feedback
  • ⚙️ Ideal auch für die Automatisierung per CLI im Hintergrund

💡 CLI-Modus – Command Line Bedienung

Für Poweruser, Automatisierung und Integration in Druckserver, ERP, Batch-Verarbeitung.

Start über:

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

Verfügbare CLI-Parameter

ParameterBeschreibung
-modegui (Standard), console, hidden
-usageattach, extract, remove, generate
-inpdfPfad zur Eingabedatei (PDF/A-3)
-infileDatei zum Anhängen (z. B. XML)
-outpathZielpfad für Extraktion
-fileextDateityp-Filter (z. B. .xml)
-byNameEinzeldatei nach Name extrahieren oder löschen
-estandardZUGFeRD Version: ZF1, ZF2, ZF21
-apiTokenAPI-Token zur Nutzung des KI-Webservices
-logfileOptional: Logausgabe in Datei (bei hidden)

Beispielbefehle

:: Datei anhängen:
PDFAttachExtractAndRemoveFiles.exe -mode "console" -usage "attach" -inpdf "rechnung.pdf" -infile "factur-x.xml" -estandard "ZF2"

:: Datei extrahieren:
PDFAttachExtractAndRemoveFiles.exe -mode "console" -usage "extract" -inpdf "rechnung.pdf" -outpath "C:\Output" -fileext ".xml"

:: Datei entfernen:
PDFAttachExtractAndRemoveFiles.exe -mode "console" -usage "remove" -inpdf "rechnung.pdf" -byName "factur-x.xml"

:: PDF in ZUGFeRD konvertieren:
PDFAttachExtractAndRemoveFiles.exe -mode "console" -usage "generate" -inpdf "rechnung.pdf" -apiToken "IHR_TOKEN"

🔌 API-Zugriff via FastAPI & CURL

Mit dem Pro, Team oder Enterprise Abo erhalten Sie zusätzlich zur komfortablen Nutzung per GUI auch vollen API-Zugriff auf unseren FastAPI-basierten Invoice Extractor. Damit lassen sich PDF-Rechnungen direkt über eigene Anwendungen, DMS-, ERP- oder Websysteme automatisiert in ZUGFeRD E-Rechnungen umwandeln.

Der Zugriff erfolgt über einen gesicherten Token-basierten HTTP POST Endpoint und liefert strukturierte JSON- und XML-Ergebnisse – ideal für Entwickler, Integratoren und automatisierte Rechnungsverarbeitung.

Der Upload erfolgt verschlüsselt per HTTPS. Die Verarbeitung geschieht direkt auf der eigenen Server-Infrastruktur in Deutschland. Die Antwort enthält bei Erfolg automatisch das generierte ZUGFeRD XML.

Nutzen Sie hierfür unsere moderne und dokumentierte REST-API via /extract-invoice/ Endpunkt.

Beispiel: PDF nach ZUGFeRD XML per CURL konvertieren

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/benutzername/Documents/Invoice.pdf"

Antwort (Auszug):

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

Sie können diesen API-Aufruf auch bequem mit Tools wie Postman testen oder in Skripte integrieren.

Powershell-Beispiel: PDF nach ZUGFeRD XML konvertieren unter Windows

Auch unter Windows kann der API-Endpunkt bequem über ein PowerShell-Skript mit curl.exe aufgerufen werden. Das ermöglicht die direkte Umwandlung einer PDF Rechnung in eine factur-x.xml (E-Rechnung XML). Nachfolgend ein Beispielskript:

               
    # 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
                
    

Aufruf-Beispiel in einem Powershell Fenster:

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

Tipp: Entsperren Sie das Skript ggf. mit Unblock-File .\GetFacturXFromPDF.ps1, falls Windows eine Ausführungswarnung zeigt.

Hinweis: Ersetzen Sie [[ T O K E N - C O D E ]] mit Ihrem gültigen persönlichen API-Token. Der Endpunkt akzeptiert PDF-Dateien und liefert Ihnen strukturierte Rechnungsdaten als JSON sowie optional die konforme ZUGFeRD XML-Datei.

Powershell-Beispiel: Alle PDF Rechnungen eines Verzeichnisses in ZUGFeRD PDF konvertieren

Das nachfolgende Powershell Script nutzt unseren 7-PDF Invoice Extractor um alle PDF Rechnungen vollautomatisch in eine PDF ZUGFeRD Rechnung (E-Rechnungen) zu konvertieren.

Das ZUGFeRD XML wird hier mit 7-PDF Attach Extract and Remove angefügt. Da wird PDF/A3-b benötigen, werden die normalen PDF Rechnungen zuvor über unseren 7-PDF Printer Professional in selbiges Format konvertiert. Es müssen also beide Programme auf dem System installiert sein, damit es läuft. Für den Zugriff auf den 7-PDF Invoice Extractor wird zudem ein API Token benötigt!

Das Script erwartet 3 Parameter:
-InputFolder "[Pfad zu den normalen PDF Rechnungen]"
-OutputFolder "[Ausgabepfad der ZUGFeRD PDF Rechnungen]"
-ApiToken "**[[ T O K E N - C O D E ]]"

** Hinweis: Im Trailmode von 7-PDF Attach Extract and Remove, einfach ein Leerzeichen als API-Token nutzen

Hier nun der PowerShell Code:

               
    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)"
                
                

Aufruf-Beispiel in einem Powershell Fenster:

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

Ihre Vorteile mit direktem API-Zugriff

  • Automatisierte Verarbeitung von PDF-Rechnungen in DMS, ERP, oder Webanwendungen
  • Keine manuelle Interaktion notwendig – 100% Serververarbeitung
  • Integration in bestehende Softwarelösungen möglich (z. B. CURL, Postman, Python, PHP etc.)
  • Sichere Token-Authentifizierung
🔒 Wichtig: Die Nutzung dieses API-Endpunkts ist exklusiv für Kunden mit einem Pro-, Team- oder Enterprise-Abo vorgesehen.
Aktuell ist eine technische Sperre zwar noch nicht aktiv – ein gelegentlicher Test mit Starter oder Basic funktioniert ggf. dennoch. Der direkte API-Zugriff ist aber ausdrücklich Kunden mit erweiterten Abos vorbehalten.

Jetzt API-Zugang freischalten

Tool herunterladen API-Token erwerben

Registrierung des Lizenzschlüssels in der Anwendung

Ihr persönlicher Lizenzkey kann nach dem Lizenzerwerb in das bereits installierte Programm direkt über den Button "Lizenzschlüssel erfassen, ..." im Tab/Basisreiter "Lizenz/Info" als Vollversion freigeschaltet werden. Zur Veranschaulichung nachfolgende Grafik, welche die Schaltfläche "Lizenzschlüssel erfassen,..." innerhalb der Software zeigt:

Hier erfassen sie ihren Lizenzkey

Hinweis: Bei Erfassung des Lizenzkeys wird dieser über das Internet validiert und freigeschaltet (via SSL). Achten sie daher auf eine aktive Internetverbindung für den einmaligen Registrierungsprozess der Anwendung! In seltenen Fällen blockieren lokal installierte Applikationsfirewalls von Drittherstellern ggf. dem Programm den Zugriff auf das Internet. Achten sie, bei Nutzung derartiger Dritt-Firewalls darauf, für den einmaligen Registrierungsprozess der Anwendung entsprechende nötige Rechte für den Zugriff auf das Internet zu gewähren.

Leider ist das Thema Softwarepiraterie auch für uns schädlich und wir müssen dieser Piraterie entgegentreten. Nur so ist es uns möglich ihnen auch weiterhin dauerhaft die Bereitstellung von Wartungs- oder Supportleistungen kostenlos zu ermöglichen. Das Internet ist einzig und allein nur für den Registrierungsprozess einmalig nötig! Das was auf ihren Systemen gespeichert ist, bleibt auch auf ihren Systemen!

Automatische Lizenzverteilung bei 7-PDF Attach Extract and Remove

Eine Lizenzierung kann, neben der manuellen Erfassung im installierten Programm, auch automatisiert im Kontext eines Deployments erfolgen. Hierfür setzt man einen entsprechenden Registry Eintrag.

Für die Lizenzierung im Zuge eines Deployments auf "vielen" (!) PCs, Citrix und TS Systemen, gleichzeitig kontaktieren sie uns bitte. Denn hierfür wird ein spezieller Schlüssel (!) benötigt den sie direkt verteilen können, entweder per INI-Datei oder besser per Registry Eintrag. Ihr erworbener Lizenzkey ist kein SpecialKey, daher bringt es nichts diesen "plain" in die Registry zu erfassen.

Der nachfolgende Screenshot zeigt den Pfad zum Erfassen des Lizenzkeys innerhalb der Registry (SpecialKey).

Der nachfolgende Screenshot zeigt den Pfad zum Erfassen des Lizenzkeys innerhalb der Registry

Durch ein Setzen des Lizenzkeys im Schlüssel „Code“ startet die Software danach als Vollversion.

Unter Citrix und TS Systemen hingegen reicht es in der Regel aus die Anwendung mit „Als Administrator ausführen“ zu Starten und einmal den durch sie erworbenen Lizenzkey manuell als Admin in der Anwendung zur Lizenzierung zu erfassen. Der oben in der Abbildung gezeigte Registryschlüssel wird in diesem Szenario von der Anwendung selbst gesetzt. Dieser Schritt ist allerdings für jeden Terminalserver einzeln manuell durchzuführen. Haben sie eine hohe Anzahl an Terminalservern, empfiehlt es sich uns diesbezüglich ebenfalls zu kontaktieren. Wie beim Deployment auf vielen PCs gleichzeitig, wird für dieses Szenario ebenfalls ein spezieller Schlüssel benötigt den sie direkt und automatisiert verteilen können.

Automatisches Deployment / Softwareverteilung

Zur Verteilung der Software unterstützt das Setup die Installationsparameter /SILENT und /VERYSILENT.

Haben Sie weitere Fragen zum Programm, dann wenden Sie sich bitte direkt an unseren kostenlosen eMail-Support. Ansonsten wünschen wir Ihnen viel Freude mit PDF Attach Extract And Remove Files!

Top