Afdrukken vanuit FileMaker Server is mogelijk
In sommige bedrijfsprocessen is het zeer nuttig als afdrukken beschikbaar zijn zonder de afdrukopdracht uit te voeren vanaf een client-werkstation. In een workflow met hoge capaciteit, zoals bijvoorbeeld orderpicking, is afdrukken in feite tijdverspilling. Het is veel eenvoudiger en sneller als een server pakbonnen afdrukt zodra orders binnenkomen.
[
](https://loggix.com/wp-content/uploads/2025/06/FMS_Printing.jpg#36452)
In sommige bedrijfsprocessen is het zeer nuttig als afdrukken beschikbaar zijn zonder de afdrukopdracht uit te voeren vanaf een client-werkstation. In een workflow met hoge capaciteit, zoals bijvoorbeeld orderpicking, is afdrukken in feite tijdverspilling. Het is veel eenvoudiger en sneller als een server pakbonnen afdrukt zodra orders binnenkomen.
Helaas ondersteunt FileMaker de afdrukfunctionaliteit niet wanneer deze wordt uitgevoerd in een script op de server. Filemaker Server (FMS) is wat wij 'headless' noemen en ondersteunt wel de printerinstellingen, maar niet de daadwerkelijke afdrukopdracht. Dit maakt de standaard "geplande scripts" als uitvoeringsoptie onbruikbaar. Maar zelfs als je zou kunnen afdrukken, waar zou je dan naartoe afdrukken? De server is gewoonlijk een cloudmachine waarop geen printers zijn aangesloten, toch?
Maar is afdrukken vanuit een cloud-FMS naar lokale printers dan wel mogelijk?
FMS Afdrukken instellen
Ja, als je wilt voorkomen dat er een 'werkstation als printerrobot' in je netwerk aanwezig is en je wilt dat FMS Server het afdrukken afhandelt, is dit mogelijk. Zelfs als je FileMaker Server zich in de cloud bevindt en je geen eigen printserver hebt! Er zijn 4 stappen nodig om vanuit FMS af te drukken:
1. een document om af te drukken (bijv. een PDF-bestand)
2. een systeemscript dat de documenten kan verwerken en aanbieden om afgedrukt te worden
3. een PDF-reader die het document kan openen en afdrukken
4. een netwerkprinter die de afdrukopdracht kan ontvangen en je document kan uitvoeren.
Ad. 1 Een bestand genereren vanuit een script
Een bestand genereren (bijv. een PDF) vanuit een Filemaker-script is gelukkig een optie die door FMS wordt ondersteund. De optie "Sla record op als PDF" geeft je bijvoorbeeld de mogelijkheid om je geselecteerde record(s) op basis van de huidige lay-out op te slaan als een (meerpagina's) PDF-bestand. Er zijn ook plugins die je hierbij kunnen helpen.
Ad. 2. Systeemscripts
FileMaker Server biedt ons de mogelijkheid om geplande FileMaker-scripts uit te voeren, wat voor de meesten van jullie een bekende optie zal zijn. Maar naast het plannen van Filemaker-scripts, laat FMS je ook zogenaamde systeemscripts uitvoeren. Dit zijn scripts die op de server worden uitgevoerd (bijv. Applescripts op Mac of PowerShell-scripts op Windows).
Met behulp van deze systeemscriptoptie zijn we in staat om buiten FMS 'Afdruk'-functionaliteit aan te roepen die binnen FMS niet beschikbaar is. Hieronder vind je een voorbeeld van enkele basisscripts die kunnen worden gebruikt om afdrukken vanuit FMS te realiseren via een Windows PowerShell-script (ps1). Omdat FMS .ps1-scripts niet goed verwerkt, roepen we in dit voorbeeld een batchscript (.bat) aan dat op zijn beurt het .ps1-script aanroept.

Zoals te zien in de bovenstaande schermafbeelding roepen we aan: run-printscript.bat, dat er als volgt uitziet:
powershell.exe -ExecutionPolicy Bypass -File "C:\Program Files\FileMaker\FileMaker Server\Data\Scripts\print-pdfs.ps1"
En de "run-printscript.bat" roept aan: print-pdfs.ps1, dat er als volgt uitziet:
$watchFolder = "C:\PrintQueue" $logFile = "$watchFolder\fms-print-log.txt" $printedPath = Join-Path -Path $watchFolder -ChildPath "Printed" $failedPath = Join-Path -Path $watchFolder -ChildPath "Failed" $sumatraPath = "C:\Program Files\SumatraPDF\SumatraPDF.exe"
Ensure subfolders exist
if (!(Test-Path -Path $printedPath)) { New-Item -ItemType Directory -Path $printedPath | Out-Null } if (!(Test-Path -Path $failedPath)) { New-Item -ItemType Directory -Path $failedPath | Out-Null }
$printerMap = @{ "P1" = "Kyocera ECOSYS M5526cdn" "P2" = "Kyocera ECOSYS P2040dn KX" "P3" = "Kyocera P2040dn Bol Printer" "P4" = "Kyocera Filemaker-KBLANCO" }
Add-Content -Path $logFile -Value "`n[$(Get-Date)] Starting print job..."
Get-ChildItem -Path $watchFolder -Filter *.pdf | ForEach-Object { $pdf = $_.FullName $fileName = $_.Name
Add-Content -Path $logFile -Value "\[$(Get-Date)\] Found file: ${fileName}"
$prefixMatched = $false
if ($fileName -match "^(P\\d+)\_") {
$prefix = $matches\[1\]
$prefixMatched = $true
Add-Content -Path $logFile -Value "\[$(Get-Date)\] Matched prefix: ${prefix}"
if ($printerMap.ContainsKey($prefix)) {
$printerName = $printerMap\[$prefix\]
Add-Content -Path $logFile -Value "\[$(Get-Date)\] Printer mapped: ${printerName}"
}
else {
Add-Content -Path $logFile -Value "\[$(Get-Date)\] Unknown prefix: ${prefix}"
}
}
if ($prefixMatched) {
try {
Add-Content -Path $logFile -Value "\[$(Get-Date)\] Attempting to print ${fileName} with SumatraPDF..."
$p = Start-Process -FilePath $sumatraPath -ArgumentList "-print-to \`"$printerName\`" \`"$pdf\`"" -PassThru
$p | Wait-Process -Timeout 20
if ($p.HasExited) {
$destination = Join-Path -Path $printedPath -ChildPath $fileName
Move-Item -Path $pdf -Destination $destination
Add-Content -Path $logFile -Value "\[$(Get-Date)\] SUCCESS: Printed ${fileName}"
} else {
Stop-Process -Id $p.Id -Force
$failedDest = Join-Path -Path $failedPath -ChildPath $fileName
Move-Item -Path $pdf -Destination $failedDest
Add-Content -Path $logFile -Value "\[$(Get-Date)\] ERROR: Timeout printing ${fileName}"
}
} catch {
Add-Content -Path $logFile -Value "\[$(Get-Date)\] ERROR printing ${fileName}: ${\_}"
$failedDest = Join-Path -Path $failedPath -ChildPath $fileName
Move-Item -Path $pdf -Destination $failedDest
}
} else {
Add-Content -Path $logFile -Value "\[$(Get-Date)\] Skipped ${fileName}: no valid prefix"
$skippedDest = Join-Path -Path $failedPath -ChildPath $fileName
Move-Item -Path $pdf -Destination $skippedDest
}
}
Add-Content -Path $logFile -Value "[$(Get-Date)] Print job finished." exit 0
Ad.3. PDF-software
Zoals je in de bovenstaande code kunt zien, roepen we met dit script de SumatraPDF-software aan. Dit is een lichtgewicht PDF-reader die wij (vanwege de bestandsgrootte en de optie voor 'stille afdrukken') de voorkeur geven boven Adobe Acrobat. Download en installeer SumatraPDF op de server om dit mogelijk te maken. Zorg ervoor dat het pad naar het .exe-bestand correct is.
**
Ad.4. Contact maken met de printer**
Last but not least moeten we een printer bereiken. In de bovenstaande code zie je dat we enkele extra regels hebben toegevoegd om afdrukken naar verschillende printers mogelijk te maken. Afhankelijk van het voorvoegsel sturen we de afdrukopdracht door naar de bijbehorende netwerkprinter. Wat bedoelen we met netwerkprinter, want FMS heeft toch geen printers aangesloten? Correct, en hier komt de laatste truc om de hoek kijken. We hebben Printix geïnstalleerd.

Printix is een cloud-printservice die uiterst betaalbaar en eenvoudig te gebruiken is in combinatie met je FileMaker Server. Installeer eenvoudig een Printix-client in je kantoornetwerk en op je databaseserver, en alle printers in je kantoor worden beschikbaar voor elke applicatie op je cloudgebaseerde databaseserver. Dit betekent: een afdrukopdracht uitgevoerd op de FMS resulteert uiteindelijk in een afdruk op je lokale kantoorprinter!

Conclusie
Afdrukken vanuit FileMaker Server is mogelijk. En in het juiste productieproces is het zelfs meer dan noodzakelijk. Vergeet op basis van bovenstaande code niet om een PrintQueue-map aan te maken met daarin een map "printed" en een map "failed". Elk document dat in de PrintQueue wordt opgeslagen, wordt automatisch afgedrukt op de toegewezen printer. Als er iets misgaat – printer niet beschikbaar etc. – kunnen documenten in de map "failed" terechtkomen. Je kunt een ander script gebruiken om de mislukte afdrukken bij te houden en bijvoorbeeld een beheerder te informeren wanneer dit gebeurt.
Als je overweegt FileMaker voor je bedrijf te gebruiken of er al mee werkt, is dit het perfecte moment om contact met ons op te nemen en te ontdekken hoe we je kunnen helpen je processen te automatiseren.
Aarzel niet om contact met ons op te nemen als je meer wilt weten!
Delen