Cardify is a JavaFX desktop application for turning an HTML ID-card template into a printable, data-driven workflow.
- Open the app and go to the Template & Excel tab first.
- Upload your HTML template.
- Put placeholders like
{{name}},{{department}}, and{{photo}}inside the HTML where you want data to appear. - Check the detected placeholders list. If you already uploaded older templates, use the dropdown to switch to one of them.
- Click Download Excel Template. Cardify creates a workbook with the same placeholder names as column headers.
- Fill the workbook with one ID card per row.
- Use normal text for normal fields, local file paths for image fields, and QR source text for QR-related columns.
- Go to the Data tab and upload the completed Excel workbook.
- Use the search box to find rows by any column value and use the status filter to show only the rows you want.
- Select one or more rows and click Print Selected Rows.
- Use Template Preview or Row Preview if you want to check the output before printing.
- Use Export Excel to save filtered rows, Remove Selected Template to delete one saved template, or the Danger Zone to clear everything after captcha confirmation.
Cardify turns an HTML card template into a print-ready workflow:
- uploads HTML templates with placeholders like
{{name}},{{department}}, or{{photo}} - generates a matching Excel workbook from those placeholders
- imports filled Excel rows into a data table
- previews the template or a single row before printing
- prints selected rows to the connected printer
- keeps a history of saved templates so you can switch between them
- Use
{{placeholder_name}}in the HTML file wherever you want data to appear. - If the placeholder value is a local image path, Cardify converts it into a printable image.
- If the placeholder name looks like a QR field, Cardify generates a QR code image for it.
- Use
imgtags for photos and QR codes, for example<img src="{{photo}}" />.
The code is organized using a standard desktop-app layout:
src/main/java/org/example/cardify/MainApp.javafor the JavaFX launcher.src/main/java/org/example/cardify/controller/for UI orchestration.src/main/java/org/example/cardify/service/for template, Excel, and print logic.src/main/java/org/example/cardify/model/for row data objects.src/main/java/org/example/cardify/util/for reusable helpers.
mvn test
mvn javafx:runBuild the app and copy runtime dependencies first:
mvn clean package dependency:copy-dependencies -DincludeScope=runtimeUbuntu .deb:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
$JAVA_HOME/bin/jpackage \
--type deb \
--input target \
--main-jar Cardify-1.0-SNAPSHOT.jar \
--main-class org.example.cardify.MainApp \
--name Cardify \
--app-version 1.0.0 \
--vendor "Your Name or Org" \
--icon src/main/resources/app-icon.png \
--dest installer \
--linux-shortcut \
--module-path target/dependency \
--add-modules javafx.controls,javafx.fxml,javafx.web \
--verboseWindows .exe:
set JAVA_HOME=C:\Program Files\Java\jdk-17
%JAVA_HOME%\bin\jpackage ^
--type exe ^
--input target ^
--main-jar Cardify-1.0-SNAPSHOT.jar ^
--main-class org.example.cardify.MainApp ^
--name Cardify ^
--app-version 1.0.0 ^
--vendor "Your Name or Org" ^
--icon src\main\resources\app-icon.ico ^
--dest installer ^
--win-shortcut ^
--win-menu ^
--module-path target\dependency ^
--add-modules javafx.controls,javafx.fxml,javafx.web ^
--verboseUse {{placeholder_name}} in the HTML file. If a placeholder value points to a local image file, Cardify converts it to a printable data URL before rendering.
QR code fields are also supported. If the placeholder name looks like a QR field, for example qr_code, qr_id, or employee_qr, Cardify renders that value as a QR code image.
For image fields, place the placeholder inside an image tag, for example:
<img src="{{photo}}" alt="Employee photo" />For QR code fields, use an image tag as well:
<img src="{{qr_code}}" alt="QR code" />The generated workbook uses the placeholder names as column headers. Fill one row per ID card. The first worksheet contains the data; the second worksheet contains instructions.