Cara Membuat Tanda Tangan Barcode Java untuk Dokumen PDF
Pendahuluan
Dalam tutorial ini Anda akan belajar cara create barcode signature Java untuk file PDF menggunakan GroupDocs.Signature. Baik Anda perlu menyematkan kode produk, ID audit, atau data terstruktur apa pun ke dalam kontrak, tanda tangan barcode memungkinkan Anda menambahkan informasi yang dapat dibaca mesin yang dapat dipindai secara instan sambil tetap menjaga dokumen tetap aman secara kriptografis. Kami akan membahas pengaturan, kode, kustomisasi, dan tip praktik terbaik sehingga Anda dapat mulai menambahkan tanda tangan barcode ke PDF Anda dalam hitungan menit.
Jawaban Cepat
- Perpustakaan apa yang menambahkan tanda tangan barcode di Java? GroupDocs.Signature for Java.
- Jenis barcode apa yang terbaik untuk ritel?
GS1CompositeBar(standar industri untuk pelacakan produk). - Apakah saya memerlukan lisensi untuk produksi? Ya – lisensi GroupDocs yang dibeli diperlukan.
- Bisakah saya menambahkan tanda tangan digital dan barcode sekaligus? Tentu saja; gabungkan keduanya untuk keamanan dan kemampuan pemindaian.
- Apakah kode kompatibel dengan Java 11 dan yang lebih baru? Ya, API bekerja dengan JDK 8+.
Apa itu create barcode signature java?
create barcode signature java mengacu pada proses menyisipkan barcode secara programatis ke dalam PDF menggunakan kode Java. GroupDocs.Signature menyediakan API sederhana yang menghasilkan gambar barcode, menempatkannya pada halaman, dan menyimpan dokumen yang ditandatangani dalam satu operasi yang mulus.
Mengapa Menggunakan Tanda Tangan Barcode?
Tanda tangan barcode memberi Anda metadata yang dapat dibaca mesin di dalam PDF yang ditandatangani secara sah. Mereka memungkinkan verifikasi visual instan, memperlancar pemindaian rantai pasokan, dan memungkinkan sistem hilir mengekstrak data terstruktur tanpa membuka file. Lebih dari 60 format barcode didukung, dan GS1CompositeBar dapat mengkodekan pengidentifikasi produk, nomor seri, dan kode batch dalam satu simbol kompak—sempurna untuk ritel, perawatan kesehatan, dan keuangan.
Prasyarat
- Java Development Kit: JDK 8 atau yang lebih baru (Java 11, 17, 21 semuanya bekerja).
- Alat Build: Maven atau Gradle – pilih yang Anda sukai.
- IDE: IntelliJ IDEA, Eclipse, atau VS Code.
- Perpustakaan GroupDocs.Signature: Tambahkan dependensi seperti yang ditunjukkan di bawah.
- Lisensi: Versi percobaan gratis untuk pengembangan; lisensi yang dibeli untuk produksi.
Menambahkan GroupDocs.Signature ke Proyek Anda
Untuk pengguna Maven, tambahkan ini ke pom.xml Anda:
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Untuk pengguna Gradle, tambahkan ini ke build.gradle Anda:
implementation 'com.groupdocs:groupdocs-signature:23.12'
Tentang lisensi: GroupDocs menawarkan percobaan gratis yang sempurna untuk pengujian dan pengembangan. Anda dapat mengunduhnya dari halaman rilis. Saat Anda siap untuk produksi, Anda perlu membeli lisensi atau meminta lisensi sementara dari situs GroupDocs. Untuk penggunaan API secara detail lihat Referensi API, konsultasikan Panduan Pengembang untuk instruksi langkah demi langkah, dan ajukan pertanyaan di Forum GroupDocs. Tautan pembelian yang sama juga tercantum sebagai halaman pembelian.
Cara Menyiapkan GroupDocs.Signature di Java?
Kelas Signature mewakili sebuah dokumen dan menyediakan metode untuk menerapkan tanda tangan, mencari konten, dan mengelola sumber daya. Buat instance Signature untuk membuka PDF Anda dan mempersiapkannya untuk penandatanganan. Kelas Signature adalah komponen inti GroupDocs.Signature yang mengelola pemuatan dokumen, penanganan sumber daya, dan alur kerja penandatanganan, memastikan semua operasi dilakukan dengan aman dan efisien.
import com.groupdocs.signature.Signature;
// Point to your PDF file
Signature signature = new Signature("path/to/your/document.pdf");
Penting: Selalu buang (dispose) objek Signature setelah digunakan—ini melepaskan handle file dan membebaskan memori.
Cara Mengonfigurasi Opsi Tanda Tangan Barcode?
Kelas BarcodeSignOptions mendefinisikan setiap aspek barcode yang akan Anda sematkan, mulai dari payload data hingga gaya visual. Ini berfungsi sebagai wadah untuk semua pengaturan terkait barcode seperti tipe, ukuran, warna, dan penempatan. Di bawah ini adalah konfigurasi minimal yang membuat barcode GS1CompositeBar berisi GTIN dan nomor seri, serta menunjukkan cara mengatur margin dan warna latar belakang untuk keterbacaan optimal.
import com.groupdocs.signature.options.sign.BarcodeSignOptions;
import com.groupdocs.signature.domain.barcodes.BarcodeTypes;
// Create barcode with GS1 format data
BarcodeSignOptions options = new BarcodeSignOptions("(01)03212345678906/(21)A1B2C3D4E5F6G7H8");
options.setEncodeType(BarcodeTypes.GS1CompositeBar);
String "(01)03212345678906/(21)A1B2C3D4E5F6G7H8" mengikuti standar GS1:
(01)= GTIN (pengidentifikasi produk global)03212345678906= kode produk sebenarnya(21)= pengidentifikasi nomor seriA1B2C3D4E5F6G7H8= seri unik
Anda dapat mengganti ini dengan teks apa pun untuk QR code, Code128, DataMatrix, dll. Lebih dari 60 tipe barcode didukung—lihat dokumentasi GroupDocs untuk daftar lengkap.
Cara Menempatkan dan Menyesuaikan Barcode?
Penempatan dan gaya dikendalikan melalui objek BarcodeSignOptions yang sama. Gunakan setTop, setLeft, setWidth, dan setHeight untuk menentukan koordinat dan dimensi yang tepat. Mengatur setAllPages(true) menambahkan barcode ke setiap halaman secara otomatis, sementara setPageNumber(1) menargetkan halaman tertentu. Anda juga dapat memutar barcode, menambahkan warna latar belakang, atau menyesuaikan margin untuk memastikan barcode tidak tumpang tindih dengan konten yang ada.
// Set position and apply to all pages
options.setTop(200); // Set vertical position
options.setAllPages(true);
Untuk tata letak yang lebih tepat, Anda juga dapat menambatkan barcode ke halaman tertentu, memutarnya, atau menambahkan warna latar belakang:
options.setLeft(100); // 100 pixels from left edge
options.setTop(200); // 200 pixels from top
options.setWidth(300); // Barcode width in pixels
options.setHeight(100); // Barcode height in pixels
options.setPageNumber(1); // Only sign page 1 (removes setAllPages)
Penyesuaian visual (warna latar depan/latar belakang, margin, label teks) tersedia melalui properti tambahan:
options.setMargin(new Padding(10)); // Add padding around barcode
options.setBackground(new Background()); // Set background color
options.setForeColor(Color.BLACK); // Barcode color
options.setBackgroundColor(Color.WHITE); // Background color
Cara Menandatangani Dokumen dengan Barcode?
Metode sign pada instance Signature menerapkan opsi yang dikonfigurasi dan menulis dokumen yang ditandatangani ke disk. Metode ini mengembalikan objek SignResult yang memberi tahu berapa banyak tanda tangan yang diterapkan dan apakah ada peringatan. Metode ini menangani semua manipulasi PDF tingkat rendah, sehingga Anda tidak perlu bekerja langsung dengan perpustakaan PDF.
try {
SignResult signResult = signature.sign(outputPath, options);
System.out.println("Document signed successfully!");
System.out.println("Signed document saved to: " + outputPath);
} finally {
if (signature != null) {
signature.dispose();
}
}
Blok try‑finally di sekitarnya menjamin objek Signature dibuang meskipun terjadi pengecualian, mencegah kebocoran handle file.
Anda dapat memeriksa SignResult untuk mengonfirmasi keberhasilan:
if (signResult.getSucceeded().size() > 0) {
System.out.println("Successfully added " + signResult.getSucceeded().size() + " signature(s)");
}
Contoh Kerja Lengkap
Menggabungkan semuanya, berikut adalah satu metode yang memuat PDF, menambahkan barcode GS1CompositeBar, dan menyimpan file yang ditandatangani:
import com.groupdocs.signature.Signature;
import com.groupdocs.signature.options.sign.BarcodeSignOptions;
import com.groupdocs.signature.domain.barcodes.BarcodeTypes;
public class BarcodeSigningExample {
public void signPdfWithBarcode(String inputPath, String outputPath) {
Signature signature = null;
try {
// Initialize signature
signature = new Signature(inputPath);
// Configure barcode
BarcodeSignOptions options = new BarcodeSignOptions(
"(01)03212345678906/(21)A1B2C3D4E5F6G7H8"
);
options.setEncodeType(BarcodeTypes.GS1CompositeBar);
options.setTop(200);
options.setAllPages(true);
// Sign and save
SignResult result = signature.sign(outputPath, options);
System.out.println("Signing completed: " + result.getSucceeded().size() + " signature(s) added");
} catch (Exception e) {
System.err.println("Error signing document: " + e.getMessage());
e.printStackTrace();
} finally {
if (signature != null) {
signature.dispose();
}
}
}
}
Metode ini siap produksi: memvalidasi input, mengelola sumber daya, dan melaporkan hasil.
Cara Menambahkan Tanda Tangan Digital dan Barcode?
Untuk keamanan maksimal, tambahkan tanda tangan digital kriptografis terlebih dahulu, kemudian lapiskan barcode di atasnya. Tanda tangan digital menjamin integritas dokumen, sementara barcode menyediakan verifikasi visual cepat dan data yang dapat dibaca mesin. Gunakan kelas DigitalSignOptions untuk langkah pertama dan kemudian terapkan BarcodeSignOptions seperti yang ditunjukkan di atas.
// First, add digital signature
DigitalSignOptions digitalOptions = new DigitalSignOptions("certificate.pfx");
digitalOptions.setPassword("cert_password");
signature.sign(outputPath, digitalOptions);
// Then, add barcode on top
BarcodeSignOptions barcodeOptions = new BarcodeSignOptions("DATA");
barcodeOptions.setEncodeType(BarcodeTypes.QR);
signature.sign(outputPath, barcodeOptions);
PDF yang dihasilkan menjadi sah secara hukum (tanda tangan digital) dan dapat langsung dibaca oleh pemindai barcode apa pun.
Bekerja dengan Berbagai Tipe Barcode
Berpindah format barcode semudah mengubah satu nilai enum. Berikut contoh yang mengganti GS1CompositeBar dengan QR code:
// Define barcode sign options with sample text
BarcodeSignOptions options = new BarcodeSignOptions("Sample Text");
// Assign specific barcode type
options.setEncodeType(BarcodeTypes.GS1CompositeBar);
Dan berikut perubahan yang sama untuk barcode linear Code128:
options.setEncodeType(BarcodeTypes.QR); // QR code
options.setEncodeType(BarcodeTypes.Code128); // Code 128
options.setEncodeType(BarcodeTypes.DataMatrix); // Data Matrix
Ingat setiap tipe barcode memiliki batas kapasitas data masing‑masing—QR code dapat menampung ribuan karakter, sementara Code39 terbatas pada alfanumerik.
Kasus Penggunaan Dunia Nyata
Manajemen Rantai Pasokan
Menyematkan GS1CompositeBar pada manifest pengiriman memungkinkan staf gudang memindai nomor pesanan, tujuan, dan kode batch tanpa membuka PDF.
BarcodeSignOptions options = new BarcodeSignOptions(
"(01)" + gtin + "/(21)" + serialNumber + "/(10)" + batchNumber
);
options.setEncodeType(BarcodeTypes.GS1CompositeBar);
Dokumentasi Kesehatan
QR code pada formulir persetujuan dapat dipindai untuk secara otomatis menyimpan dokumen ke dalam rekam medis pasien yang tepat.
String patientData = "PATIENT_ID:" + patientId + "|DOC_TYPE:CONSENT|DATE:" + dateString;
BarcodeSignOptions options = new BarcodeSignOptions(patientData);
options.setEncodeType(BarcodeTypes.QR);
Layanan Keuangan
ID transaksi yang dikodekan dalam barcode memungkinkan auditor memverifikasi kepatuhan dengan pemindaian sederhana.
String complianceData = "TXN:" + transactionId + "|AGENT:" + agentId + "|BRANCH:" + branchCode;
BarcodeSignOptions options = new BarcodeSignOptions(complianceData);
options.setEncodeType(BarcodeTypes.PDF417);
Kontrol Kualitas Manufaktur
Laporan inspeksi yang ditandatangani dengan barcode yang berisi nomor batch dan ID inspeksi membuat analisis penyebab utama menjadi instan.
String qcData = "BATCH:" + batchNumber + "|INSPECTOR:" + inspectorId + "|RESULT:" + passFailStatus;
BarcodeSignOptions options = new BarcodeSignOptions(qcData);
options.setEncodeType(BarcodeTypes.DataMatrix);
Masalah Implementasi Umum
Masalah 1: Pengecualian “File is already in use”
Jawaban: File tetap terkunci jika instance Signature sebelumnya tidak dibuang. Selalu bungkus kode penandatanganan dalam blok try‑finally dan panggil signature.dispose().
Signature signature = null;
try {
signature = new Signature(filePath);
// ... your code ...
} finally {
if (signature != null) {
signature.dispose();
}
}
Masalah 2: Barcode Tidak Muncul di PDF
Jawaban: Verifikasi bahwa nilai setTop/setLeft berada dalam batas halaman, tingkatkan lebar/tinggi barcode, dan pastikan warna latar depan/latar belakang kontras dengan latar halaman.
// Make sure dimensions are reasonable
options.setTop(100); // Not 10000
options.setLeft(100);
options.setWidth(300); // At least 200 pixels for readability
options.setHeight(100);
// Ensure contrast
options.setForeColor(Color.BLACK);
options.setBackgroundColor(Color.WHITE);
Masalah 3: Pengecualian “Invalid Barcode Data”
Jawaban: Barcode GS1 memerlukan notasi tanda kurung yang ketat. Gunakan Application Identifiers yang benar (mis., (01), (21)) dan hindari karakter yang tidak didukung.
// Correct:
"(01)03212345678906/(21)ABC123"
// Incorrect:
"03212345678906ABC123"
Masalah 4: OutOfMemoryError dengan PDF Besar
Jawaban: Tingkatkan heap JVM (-Xmx4G) dan pertimbangkan menandatangani halaman secara individual alih-alih menggunakan setAllPages(true) untuk dokumen yang sangat besar.
java -Xmx2G -jar your-application.jar
Masalah 5: Pemindaian Barcode Gagal
Jawaban: Pastikan barcode berukuran minimal 200 × 100 px, menggunakan warna kontras tinggi, dan tidak terdistorsi oleh kompresi PDF.
// Increase size
options.setWidth(400);
options.setHeight(150);
// Maximize contrast
options.setForeColor(Color.BLACK);
options.setBackgroundColor(Color.WHITE);
// Add quiet zone (blank space around barcode)
options.setMargin(new Padding(10));
Keamanan dan Validasi
Apakah Tanda Tangan Barcode Aman?
Barcode saja tidak dilindungi secara kriptografis, sehingga siapa pun dapat membuat yang baru. Padukan dengan tanda tangan digital untuk menjamin keaslian dan kemampuan pemindaian. Pola tanda tangan ganda (digital terlebih dahulu, barcode kedua) memberi Anda keberlakuan hukum plus kemudahan operasional.
Memvalidasi Data Barcode
Setelah dipindai, verifikasi bahwa tanda tangan digital dokumen masih valid dan payload barcode cocok dengan pola yang diharapkan. Gunakan API search() milik GroupDocs dengan BarcodeSearchOptions untuk mengekstrak dan memvalidasi konten barcode secara otomatis.
public boolean validateScannedBarcode(String scannedData, String documentPath) {
// Verify digital signature first
if (!verifyDigitalSignature(documentPath)) {
return false;
}
// Validate barcode format
if (!scannedData.matches("(01)\\d{14}/(21)[A-Z0-9]+")) {
return false;
}
// Check against database
String productId = extractProductId(scannedData);
return database.productExists(productId);
}
Pertimbangan Kinerja
Manajemen Sumber Daya
Selalu buang objek Signature setelah setiap operasi untuk menghindari kebocoran memori:
signature.dispose();
Saat memproses banyak file, buat dan buang Signature baru per dokumen:
for (String filePath : documentPaths) {
Signature signature = null;
try {
signature = new Signature(filePath);
// ... signing logic ...
} finally {
if (signature != null) {
signature.dispose();
}
}
}
Pemrosesan Batch
Untuk batch kecil (< 100 file), pemrosesan berurutan sederhana:
for (String path : paths) {
signDocument(path);
}
Untuk beban kerja yang lebih besar, pemrosesan paralel dapat mempercepat—tetapi pantau tekanan I/O dan batasi thread ke 4‑8:
paths.parallelStream().forEach(path -> signDocument(path));
Optimasi Memori untuk PDF Besar
Tingkatkan ukuran heap, proses halaman secara individual, dan bersihkan referensi setelah setiap langkah. Ini mencegah OutOfMemoryError pada dokumen yang lebih besar dari 50 MB.
Caching Opsi Barcode
Jika Anda menggunakan kembali konfigurasi barcode yang sama pada banyak file, cache instance BarcodeSignOptions:
// Create once, reuse many times
private static BarcodeSignOptions createStandardBarcodeOptions(String data) {
BarcodeSignOptions options = new BarcodeSignOptions(data);
options.setEncodeType(BarcodeTypes.GS1CompositeBar);
options.setTop(200);
options.setAllPages(true);
return options;
}
Fitur Lanjutan
Beberapa Tanda Tangan pada Satu Dokumen
Tambahkan beberapa barcode (atau campur dengan tanda tangan digital) dengan memanggil sign beberapa kali dengan objek opsi yang berbeda:
// Add QR code in top-left
BarcodeSignOptions qrOptions = new BarcodeSignOptions("https://example.com");
qrOptions.setEncodeType(BarcodeTypes.QR);
qrOptions.setTop(50);
qrOptions.setLeft(50);
signature.sign(outputPath, qrOptions);
// Add GS1 barcode in bottom-right
BarcodeSignOptions gs1Options = new BarcodeSignOptions("(01)03212345678906");
gs1Options.setEncodeType(BarcodeTypes.GS1CompositeBar);
gs1Options.setTop(700);
gs1Options.setLeft(400);
signature.sign(outputPath, gs1Options);
Konten Barcode Dinamis
Hasilkan data barcode dari metadata dokumen, timestamp, atau pencarian basis data:
// Extract data from PDF or database
String orderId = extractOrderIdFromPdf(filePath);
String timestamp = LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME);
String barcodeData = String.format("ORDER:%s|TIME:%s", orderId, timestamp);
BarcodeSignOptions options = new BarcodeSignOptions(barcodeData);
Integrasi dengan Spring Boot
Buat endpoint REST yang menerima PDF, menambahkan barcode, dan mengembalikan file yang ditandatangani:
@Service
public class DocumentSigningService {
public void signWithBarcode(MultipartFile file, String barcodeData) {
// ... implementation ...
}
}
Contoh API REST
Kontroler minimal yang mendelegasikan ke layanan penandatanganan:
@PostMapping("/sign-document")
public ResponseEntity<byte[]> signDocument(
@RequestParam("file") MultipartFile file,
@RequestParam("barcode") String barcodeData
) {
// Sign document and return as byte array
}
Pertanyaan yang Sering Diajukan
Q: Apa itu barcode GS1CompositeBar?
A: GS1CompositeBar menggabungkan komponen linear dan 2D untuk menyimpan ID produk, nomor seri, dan data lain dalam satu simbol yang dapat dipindai, banyak digunakan dalam ritel dan logistik.
Q: Bisakah saya menggunakan tipe barcode lain selain GS1CompositeBar?
A: Ya—GroupDocs.Signature mendukung lebih dari 60 tipe, termasuk QR, Code128, DataMatrix, PDF417, dan Aztec. Ubah nilai setEncodeType() untuk mengubah format.
Q: Apakah saya memerlukan lisensi untuk penggunaan produksi?
A: Lisensi GroupDocs yang valid diperlukan untuk penerapan produksi. Versi percobaan gratis tersedia untuk pengembangan dan pengujian.
Q: Apakah pemindai barcode dapat membaca barcode dari PDF yang ditandatangani?
A: Tentu saja, asalkan barcode berukuran minimal 200 × 100 px dan memiliki kontras yang cukup. Aplikasi pemindaian smartphone bekerja di layar; pemindai perangkat keras bekerja pada salinan cetak.
Q: Bagaimana cara menangani kesalahan selama penandatanganan?
A: Bungkus kode Anda dalam blok try‑catch, catat jejak stack lengkap, dan selalu panggil signature.dispose() dalam blok finally untuk melepaskan sumber daya.
Q: Bisakah saya menandatangani format dokumen lain?
A: Ya—GroupDocs.Signature juga mendukung DOCX, XLSX, PPTX, gambar, dan banyak lagi. Cukup ubah ekstensi file input; API tetap sama.
Q: Apakah ada batas ukuran file?
A: Tidak ada batas keras, tetapi dokumen lebih dari 50 MB mungkin memerlukan heap JVM yang lebih besar dan pemrosesan halaman per halaman agar tetap efisien memori.
Q: Bagaimana cara menandatangani PDF yang disimpan di penyimpanan cloud?
A: Unduh file ke jalur lokal sementara, terapkan tanda tangan, lalu unggah kembali ke bucket cloud Anda. Bersihkan file sementara setelahnya.
Kesimpulan
Anda kini memiliki panduan lengkap yang siap produksi untuk create barcode signature java pada dokumen PDF. Dengan menggabungkan tanda tangan digital kriptografis dengan barcode yang dapat dibaca mesin, Anda memperoleh keberlakuan hukum serta efisiensi operasional di seluruh kasus penggunaan rantai pasokan, perawatan kesehatan, keuangan, dan manufaktur. Bereksperimenlah dengan berbagai tipe barcode, integrasikan kode ke dalam layanan yang ada, dan jelajahi pemrosesan batch untuk penerapan skala besar.
Last Updated: 2026-05-21
Tested With: GroupDocs.Signature 23.10 for Java
Author: GroupDocs
String filePath = "YOUR_DOCUMENT_DIRECTORY" + "/sample.pdf";
String fileName = new java.io.File(filePath).getName();
String outputPath = "YOUR_OUTPUT_DIRECTORY" + "/SignedWithBarcodeGS1CompositeBar/" + fileName;
String documentDir = System.getenv("DOCUMENT_DIR");
String outputDir = System.getenv("OUTPUT_DIR");
Signature signature = new Signature(filePath);