كيفية إنشاء توقيع الباركود في PDF باستخدام Java

في هذا البرنامج التعليمي، ستتعلم كيفية إنشاء توقيع باركود في ملفات PDF باستخدام Java وGroupDocs.Signature. توقيعات الباركود تدمج معرّفات قابلة للقراءة آليًا تكون مقاومة للعبث وسهلة المسح—مثالية للعقود، الشهادات، الفواتير، وأي مستند يحتاج إلى تحقق موثوق.

إجابات سريعة

  • ما هو توقيع الباركود؟ باركود مدمج في PDF يخزن بيانات منظمة ويمكن قراءته بواسطة الماسحات أو البرمجيات.
  • ما نوع الباركود الموصى به؟ Code128، لأنه يتعامل مع البيانات الحرفية الرقمية بشكل مضغوط.
  • هل أحتاج إلى ترخيص؟ نسخة تجريبية مجانية تكفي للاختبار؛ الترخيص الكامل مطلوب للإنتاج.
  • هل يمكنني وضع الباركود على أي حجم صفحة؟ نعم—استخدم التموضع القائم على النسبة المئوية للتوسيع التلقائي.
  • هل الباركود قائم على المتجهات؟ نعم، يضيف فقط بضع كيلوبايتات إلى PDF ويبقى واضحًا بأي دقة.

ما هو توقيع الباركود؟

توقيع الباركود هو باركود قائم على المتجهات مدمج مباشرةً في صفحة PDF، يعمل كعنصر بصري وكتوقيع تشفير يمكن التحقق منه لاحقًا. يخزن بيانات منظمة، مثل المعرفات أو الطوابع الزمنية، ويضمن سلامة المستند مع توفير مرجع قابل للقراءة آليًا.

لماذا توقيعات الباركود مهمة لملفات PDF الخاصة بك

توفر توقيعات الباركود للملفات PDF معرفًا مضغوطًا وقابلاً للقراءة آليًا يمكن مسحه فورًا، مما يلغي إدخال البيانات يدويًا ويقلل الأخطاء. وبما أنها مدمجة كرسومات متجهة، فإنها تظل حادة بأي دقة وتضيف فقط بضع كيلوبايتات إلى الملف. يجمع هذا بين القابلية للقراءة، ومقاومة العبث، وحجم صغير، مما يجعلها مثالية للعقود، الفواتير، الشهادات، وأي مستند يتطلب تحققًا موثوقًا.

إليك تحدٍ ربما واجهته: تحتاج إلى إضافة معرفات فريدة إلى ملفات PDF تكون قابلة للقراءة آليًا ومقاومة للعبث. ربما تعمل على نظام إدارة مستندات، أو معالجة شهادات، أو التعامل مع عقود تحتاج إلى تحقق لاحقًا.

هنا تأتي توقيعات الباركود لتكون مفيدة. على عكس الطوابع النصية البسيطة، تسمح الباركودات لك بدمج بيانات منظمة يمكن للماسحات (وبرمجياتك) قراءتها فورًا. بالإضافة إلى ذلك، عندما تجمعها مع توقيع PDF عبر GroupDocs.Signature for Java، تحصل على طريقة قوية لتتبع والتحقق من المستندات دون الحاجة إلى عمليات بحث معقدة في قاعدة البيانات.

في هذا الدليل، ستتعلم بالضبط كيفية تنفيذ توقيعات الباركود في ملفات PDF الخاصة بـ Java — من الإعداد الأساسي إلى الكود الجاهز للإنتاج مع تموضع مرن. سواء كنت تبني نظام فواتير، أو مولد شهادات، أو منصة إدارة عقود، ستحصل على كل ما تحتاجه في النهاية.

ما ستتمكن من إتقانه:

  • إعداد GroupDocs.Signature لـ Java في دقائق
  • إنشاء توقيعات باركود Code128 (ولماذا غالبًا ما تكون اختيارك الأفضل)
  • تموضع الباركودات باستخدام تخطيطات قائمة على النسبة المئوية تعمل على أي حجم PDF
  • تجنب الأخطاء الشائعة التي تعيق المطورين
  • اختبار تنفيذك بشكل صحيح

كيفية إنشاء توقيع باركود في Java

إنشاء توقيع باركود في Java يتضمن تحميل ملف PDF المستهدف، وتكوين خيارات الباركود مثل البيانات، النوع، الحجم، والموضع، ثم تطبيق التوقيع لإنشاء مستند جديد. تتولى GroupDocs.Signature عملية العرض والربط التشفيري، لذا كل ما عليك هو توفير المعلمات المطلوبة وإدارة مسارات الملفات.

المتطلبات المسبقة وقائمة التحقق للبيئة

قبل أن تبدأ، تحقق من أن لديك العناصر التالية جاهزة:

  • Java Development Kit (JDK) 8 أو أحدث – مطلوب لجميع مكتبات GroupDocs Java.
  • Maven أو Gradle – لإدارة تبعية GroupDocs.Signature.
  • بيئة تطوير متكاملة (IDE) مثل IntelliJ IDEA أو Eclipse أو VS Code مع امتدادات Java.
  • GroupDocs.Signature for Java (الإصدار 23.12 أو أحدث يُنصح به).
  • معرفة أساسية بـ Java – يجب أن تكون مرتاحًا لإنشاء الفئات، معالجة الاستثناءات، والعمل مع إدخال/إخراج الملفات.

إعداد GroupDocs.Signature في مشروعك

إدخال المكتبة إلى مشروعك سهل. اختر أداة البناء الخاصة بك: لمستخدمي Maven، أضف هذا التبعية إلى ملف pom.xml الخاص بك:

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-signature</artifactId>
    <version>23.12</version>
</dependency>

تستخدم Gradle؟ أضف هذا السطر إلى ملف build.gradle الخاص بك:

implementation 'com.groupdocs:groupdocs-signature:23.12'

تفضل الإعداد اليدوي؟ قم بتنزيل ملف JAR مباشرةً من إصدارات GroupDocs.Signature for Java وأضفه إلى مسار الفئة الخاص بك.

ترتيب الترخيص الخاص بك

قبل الانتقال إلى الإنتاج الكامل، ستحتاج إلى معالجة الترخيص:

  • نسخة تجريبية مجانية: مثالية للاختبار — احصل عليها من موقع GroupDocs لاستكشاف الميزات الأساسية.
  • ترخيص مؤقت: هل تحتاج إلى مزيد من الوقت للتقييم؟ قدِّم طلبًا للحصول على ترخيص مؤقت لمدة 30 يومًا.
  • ترخيص كامل: جاهز للإنتاج؟ اشترِ ترخيصًا للاستخدام غير المحدود. إليك فحص سريع للتأكد من أن كل شيء يعمل:
Signature signature = new Signature("sample.pdf");
System.out.println("Signature object created successfully.");

إذا تم تشغيله دون أخطاء، فأنت جاهز!

كيفية إنشاء توقيع باركود في Java

الآن للجزء الممتع — دعنا نوقع ملف PDF باستخدام باركود. سنقسم ذلك إلى خطوات صغيرة لتفهم بالضبط ما يحدث في كل مرحلة.

الخطوة 1: تهيئة كائن Signature

مرساة التعريف: فئة Signature هي نقطة الدخول في GroupDocs.Signature لتحميل، تعديل، وحفظ مستندات PDF. أولاً، تحتاج إلى إخبار GroupDocs بأي ملف PDF تعمل عليه:

Signature signature = new Signature("input.pdf");

ما يحدث هنا: كائن Signature يحمل ملف PDF في الذاكرة ويجهزه للتعديلات. تأكد من أن مسار الملف صحيح — خطأ شائع هو استخدام الشرطات المائلة العكسية في Windows دون الهروب منها (استخدم \\ أو استخدم الشرطات المائلة الأمامية، التي تعمل عبر الأنظمة).

الخطوة 2: تكوين خيارات الباركود (كيفية إضافة باركود)

مرساة التعريف: BarcodeSignOptions تغلف جميع الإعدادات المطلوبة لرسم باركود داخل PDF. الآن لننشئ توقيع الباركود ببياناتك:

BarcodeSignOptions options = new BarcodeSignOptions("12345678");
options.setEncodeType(BarcodeEncodeType.Code128);
  • "12345678" هي بيانات الباركود الخاصة بك — يمكن أن تكون معرف طلب، رقم شهادة، أو أي معرف تحتاجه.
  • Code128 هو نوع الترميز (المزيد حول اختيار النوع المناسب أدناه). نصيحة احترافية: يمكن لـ Code128 التعامل مع الأرقام والحروف، مما يجعله متعدد الاستخدامات لمعظم الحالات. إذا كنت تحتاج فقط إلى أرقام، قد يكون Code39 أبسط، لكن Code128 يمنحك مرونة أكبر.

الخطوة 3: تموضع الباركود (كيفية توقيع PDF بالباركود)

مرساة التعريف: SignatureOptions توفر خصائص التخطيط مثل رقم الصفحة، الحجم، والمحاذاة. هنا يتألق GroupDocs حقًا — التموضع القائم على النسبة المئوية يعني أن الباركود يبدو جيدًا على أي حجم PDF:

options.setLeft(10);   // 10% from the left edge
options.setTop(90);    // 90% from the bottom edge (near the footer)
options.setWidth(30);  // 30% of page width
options.setHeight(10); // 10% of page height
options.setPageNumber(1);

لماذا النسب مهمة: تخيل أنك توقع مستندات A4 ونماذج بحجم قانوني. باستخدام التموضع النسبي، يوسع الباركود تلقائيًا ليظهر متسقًا على كليهما. استخدام قيم بكسل ثابتة سيجعل الباركود صغيرًا جدًا على المستندات الكبيرة أو كبيرًا جدًا على الصغيرة. مثال من الواقع: على صفحة A4 (595 × 842 نقطة)، سيكون عرض الباركود بنسبة 30% حوالي 180 نقطة. على صفحة قانونية (612 × 1008 نقطة)، سيكون حوالي 184 نقطة — متناسب تلقائيًا.

الخطوة 4: توقيع وحفظ المستند (كيفية إضافة باركود إلى PDF)

حان الوقت لتطبيق التوقيع فعليًا وحفظ عملك:

signature.sign(outputPath, options);

ملاحظة مهمة: يجب أن يكون دليل الإخراج موجودًا قبل تشغيل هذا الكود. لا يقوم GroupDocs بإنشاء أدلة متداخلة لك، لذا أنشئها أولًا أو تعامل مع ذلك في الكود الخاص بك:

new File("output").mkdirs();

ماذا لو حدث خطأ؟ ضع هذا داخل كتلة try‑catch:

try {
    signature.sign("signed.pdf", options);
} catch (Exception e) {
    e.printStackTrace();
}

اختيار نوع الباركود المناسب لاحتياجاتك (إنشاء باركود code128)

يدعم GroupDocs صيغ باركود متعددة، واختيار النوع المناسب مهم. إليك مقارنة عملية: Code128 (اختيارنا الافتراضي):

  • الأفضل لـ: بيانات مختلطة حرفية رقمية (معرفات مثل “INV2024-001”)
  • السعة: حتى 128 حرف ASCII
  • لماذا يفضل: مضغوط، مدعوم على نطاق واسع، يتعامل مع الحروف والأرقام
  • استخدام عندما: تحتاج إلى مرونة ولا تعرف نوع البيانات التي ستشفّرها Code39:
  • الأفضل لـ: رموز حرفية رقمية بسيطة
  • السعة: 43 حرفًا (A‑Z، 0‑9، وبعض الرموز)
  • لماذا النظر إليه: غالبًا ما تدعم الماسحات القديمة هذا النوع بشكل أفضل
  • استخدام عندما: العمل مع أنظمة قديمة أو عندما تكون البساطة أهم من كثافة البيانات QR Code:
  • الأفضل لـ: كميات كبيرة من البيانات (روابط URL، حمولة JSON)
  • السعة: حتى 3 KB من البيانات
  • لماذا هو قوي: يمكنه تخزين هياكل بيانات معقدة، وتصحيح الأخطاء مدمج
  • استخدام عندما: تحتاج إلى دمج بيانات منظمة أو روابط URL EAN/UPC:
  • الأفضل لـ: تعريف المنتجات
  • السعة: رموز رقمية بطول ثابت (8‑13 رقمًا)
  • استخدام عندما: تعمل مع أنظمة التجزئة أو المخزون دليل اتخاذ القرار السريع:
  • تحتاج إلى حروف وأرقام؟ → Code128
  • أرقام فقط، أبقها بسيطة؟ → Code39
  • بيانات كثيرة أو روابط URL؟ → QR Code
  • رموز تجزئة/منتجات؟ → EAN/UPC

الأخطاء الشائعة وكيفية تجنبها (باركود مقاوم للعبث)

إليك المشكلات التي يواجهها المطورون غالبًا (حتى لا تواجهها أنت):

المشكلة 1: تموضع الباركود غير صحيح

العَرَض: يظهر الباركود في مواقع غير متوقعة أو يتم قصه. الأسباب الشائعة:

  • استخدام قيم بكسل على أحجام صفحات مختلفة
  • نسيان أن إحداثيات PDF تبدأ من أسفل اليسار، وليس من أعلى اليسار
  • الهوامش تدفع المحتوى خارج المنطقة المرئية الحل: استخدم دائمًا التموضع القائم على النسبة المئوية للاتساق:
options.setLeft(5);
options.setTop(95);
options.setWidth(40);
options.setHeight(12);

المشكلة 2: نص الباركود غير قابل للقراءة

العَرَض: يظهر النص المشفر لكن الماسحات لا تستطيع قراءته. الأسباب:

  • الباركود صغير جدًا بالنسبة لكمية البيانات
  • نوع الترميز غير المناسب لبياناتك
  • تباين منخفض بين الخطوط والخلفية الحل: طابق حجم الباركود مع طول البيانات. بالنسبة لـ Code128 مع 10‑15 حرفًا، استهدف على الأقل 8‑10% من عرض الصفحة.

المشكلة 3: استثناءات مسار الملف

العَرَض: FileNotFoundException أو أخطاء مشابهة. الأسباب:

  • مسارات Windows ثابتة مع شرطات مائلة عكسية مفردة
  • دليل الإخراج غير موجود
  • مشاكل أذونات الملفات الحل: استخدم الشرطات المائلة الأمامية (تعمل في كل مكان) وأنشئ الأدلة أولًا:
Path output = Paths.get("output/signed.pdf");
Files.createDirectories(output.getParent());

المشكلة 4: مشاكل الذاكرة مع ملفات PDF الكبيرة

العَرَض: أخطاء نفاد الذاكرة عند معالجة مستندات كبيرة. الحل: أغلق كائن Signature عند الانتهاء لتحرير الموارد:

signature.close();

اختبار تنفيذ الباركود الخاص بك

قبل النشر، تأكد من أن الباركودات تعمل فعليًا. إليك قائمة فحص اختبار عملية:

1. اختبار الفحص البصري

  • افتح ملف PDF الموقع وتحقق من:
    • هل الباركود مرئي ومتموضع بشكل صحيح؟
    • هل يبدو واضحًا (ليس ضبابيًا أو بكسليًا)؟
    • هل هناك مساحة بيضاء كافية حوله؟

2. اختبار المسح

استخدم تطبيق ماسح باركود على هاتفك (مثل “Barcode Scanner” أو “QR & Barcode Reader”) للتحقق من:

  • يستطيع الماسح قراءة الباركود الخاص بك
  • البيانات المفكوكة تتطابق مع ما شفرته
  • يعمل من زوايا ومسافات مختلفة

3. اختبار عبر الأنظمة

افتح ملف PDF على أجهزة مختلفة:

  • Windows (Adobe Reader، Chrome)
  • Mac (Preview، Chrome)
  • الأجهزة المحمولة (iOS، Android) تأكد من أن الباركود يُظهر بشكل صحيح في كل مكان.

4. كود الاختبار الآلي

إليك اختبار بسيط يمكنك تشغيله:

Signature testSignature = new Signature("signed.pdf");
List<BarcodeSignature> signatures = testSignature.search(BarcodeSignature.class);
if (signatures.size() > 0) {
    System.out.println("Barcode found: " + signatures.get(0).getText());
}

حالات الاستخدام الواقعية لتوقيعات الباركود

دعنا نلقي نظرة على الأماكن التي يتألق فيها هذا الأسلوب في أنظمة الإنتاج:

1. إنشاء الشهادات والتحقق منها

السيناريو: تقوم بإنشاء منصة تدريب تصدر شهادات إكمال.
التنفيذ: أنشئ معرف شهادة فريد (مثال، “CERT‑2024‑00123”) وادمجه كباركود Code128 في الزاوية السفلية اليمنى. يتيح مسح الباركود لواجهة برمجة التطبيقات (API) استرجاع تفاصيل الشهادة فورًا، مما يلغي إدخال البيانات يدويًا.

2. أنظمة تتبع الفواتير

السيناريو: شركتك تعالج آلاف الفواتير شهريًا.
التنفيذ: أضف رقم الفاتورة وتاريخ الاستحقاق كرمز QR موضعًا بحيث يمكن لمعدات المسح قراءته بسهولة. يمكن لأنظمة الفرز الآلية توجيه الفواتير دون تدخل بشري، مما يقلل وقت المعالجة من ساعات إلى دقائق.

3. إدارة العقود القانونية

السيناريو: تحتاج شركة محاماة إلى تتبع إصدارات العقود والتعديلات.
التنفيذ: يحصل كل إصدار من العقد على معرف باركود فريد يتضمن معرف العقد، رقم الإصدار، وتاريخ التوقيع. يتيح المسح أثناء التدقيق استرجاع تاريخ الإصدارات بالكامل تلقائيًا.

4. أمان السجلات الطبية

السيناريو: يرغب مستشفى في منع الوصول غير المصرح به إلى السجلات.
التنفيذ: دمج معرف المريض وطابع إنشاء السجل في باركود. فقط الأجهزة المصادقة يمكنها فك الشفرة والوصول إلى السجل الكامل، وكل مسح يخلق سجل تدقيق للامتثال.

نصائح تحسين الأداء (أمان مستندات Java)

عند توقيع عدد كبير من ملفات PDF، يكون الأداء مهمًا. إليك بعض النصائح للحفاظ على سير العمل بسلاسة:

استراتيجية المعالجة الدفعية

بدلاً من توقيع مستند واحد في كل مرة، قم بمعالجتها دفعة واحدة:

for (String filePath : pdfList) {
    Signature batchSignature = new Signature(filePath);
    batchSignature.sign(outputPath, options);
    batchSignature.close();
}

لماذا يساعد ذلك: إعادة استخدام كائن الخيارات وإغلاق الموارد بشكل صحيح يمنع تسرب الذاكرة.

إدارة الذاكرة لملفات PDF الكبيرة

  • للملفات PDF التي يزيد حجمها عن 50 MB:
    • عالجها بشكل متسلسل بدلاً من تحميل عدة ملفات في آن واحد.
    • استخدم try‑with‑resources لضمان التنظيف.
    • راقب حجم الـ heap واضبط معلمات JVM إذا لزم الأمر: -Xmx2g.

تخزين الباركودات المستخدمة بشكل متكرر في الذاكرة المؤقتة

إذا قمت بتوقيع العديد من المستندات بنفس الباركود، قم بتخزين كائن BarcodeSignOptions في الذاكرة المؤقتة:

BarcodeSignOptions cachedOptions = new BarcodeSignOptions("STATIC_ID");
cachedOptions.setEncodeType(BarcodeEncodeType.Code128);

متى تستخدم توقيعات الباركود (ومتى لا تستخدمها)

السيناريوهات المثالية:

  • تحتاج إلى معرفات مستندات قابلة للقراءة آليًا.
  • سيتم مسح المستندات أو معالجتها تلقائيًا.
  • تريد تتبعًا مقاومًا للعبث دون شهادات رقمية.
  • يتطلب التكامل مع بنية تحتية للباركود موجودة. ليس مثاليًا عندما:
  • تحتاج إلى توقيعات رقمية ملزمة قانونيًا (استخدم الشهادات الرقمية بدلاً من ذلك).
  • سيُعرض المستند فقط على البشر (قد تكون علامة مائية نصية بسيطة كافية).
  • تعمل على مستندات صغيرة جدًا حيث سيهيمن الباركود على الصفحة.
  • متطلبات الأمان تتطلب تشفيرًا—الباركودات مرئية ويمكن لأي شخص مسحها. هل يمكنك دمج الأساليب؟ بالتأكيد! تستخدم العديد من الأنظمة كلًا من توقيعات الباركود للتتبع والتوقيعات الرقمية للصحة القانونية.

الأسئلة المتكررة

س: هل يمكنني استخدام أنواع باركود مختلفة في نفس ملف PDF؟
ج: نعم! استدعِ signature.sign() عدة مرات مع BarcodeSignOptions مختلفة لكل نوع باركود. فقط تأكد من عدم تداخلها.

س: كيف أتعامل مع الباركودات التي تحتوي على أحرف خاصة؟
ج: يدعم Code128 معظم أحرف ASCII بشكل جيد. للبيانات Unicode أو المعقدة، انتقل إلى رموز QR—فهي تدعم ترميز UTF‑8.

س: ما هو الحد الأقصى للبيانات التي يمكن تخزينها في باركود Code128؟
ج: نظريًا حتى 128 حرفًا، لكن قابلية القراءة تنخفض بشكل ملحوظ فوق 30‑40 حرفًا. للحمولات الأكبر، استخدم رموز QR.

س: هل سيؤدي إضافة الباركودات إلى زيادة حجم ملف PDF بشكل ملحوظ؟
ج: ليس بشكل ملحوظ—الباركودات رسومات متجهة، عادةً تضيف فقط 5‑20 KB لكل باركود حسب الحجم والتعقيد.

س: هل يمكنني تدوير الباركودات أو وضعها عموديًا؟
ج: نعم! استخدم options.setRotationAngle(90) لتدوير الباركود، وهو مفيد لوضعه على الهامش.

س: كيف أجعل الباركودات تظهر على كل صفحة من ملف PDF متعدد الصفحات؟
ج: قم بالتكرار عبر الصفحات وتطبيق التوقيع على كل واحدة. راجع فئة PagesSetup في وثائق GroupDocs للتحكم في الصفحات التي يتم توقيعها.

س: ماذا لو لم يتمكن ماسح الباركود من قراءة الباركود المُولد؟
ج: أولاً، تحقق من أن الماسح يدعم نوع الباركود المختار. ثم زد حجم الباركود—معظم مشاكل المسح تنبع من خطوط صغيرة جدًا. استهدف على الأقل عرض 1 بوصة (2.54 سم) للقراءة الموثوقة.

موارد إضافية

الوثائق:

التنزيلات والترخيص:

المجتمع والدعم:


آخر تحديث: 2026-07-20
تم الاختبار مع: GroupDocs.Signature 23.12 (Java)
المؤلف: GroupDocs

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-signature</artifactId>
    <version>23.12</version>
</dependency>
implementation 'com.groupdocs:groupdocs-signature:23.12'
import com.groupdocs.signature.Signature;

public class QuickTest {
    public static void main(String[] args) {
        try {
            Signature signature = new Signature("test-document.pdf");
            System.out.println("GroupDocs.Signature is ready to go!");
        } catch (Exception e) {
            System.err.println("Setup issue: " + e.getMessage());
        }
    }
}
String filePath = "YOUR_DOCUMENT_DIRECTORY/sample.pdf";
Signature signature = new Signature(filePath);
import com.groupdocs.signature.options.sign.BarcodeSignOptions;
import com.groupdocs.signature.domain.barcodes.BarcodeTypes;

BarcodeSignOptions options = new BarcodeSignOptions("12345678");
options.setEncodeType(BarcodeTypes.Code128);
import com.groupdocs.signature.domain.enums.MeasureType;
import com.groupdocs.signature.domain.Padding;

// Use percentages instead of fixed pixels
options.setLocationMeasureType(MeasureType.Percents);
options.setLeft(5);  // 5% from the left edge
options.setTop(5);   // 5% from the top

// Size it proportionally too
options.setSizeMeasureType(MeasureType.Percents);
options.setWidth(10);  // 10% of page width
options.setHeight(5);  // 5% of page height

// Add some breathing room with margins
Padding margins = new Padding();
margins.setLeft(1);
margins.setTop(1);
margins.setRight(1);
options.setMargin(margins);
String outputFilePath = "YOUR_OUTPUT_DIRECTORY/SignWithPercents/sample_signed.pdf";
signature.sign(outputFilePath, options);
Path outputPath = Paths.get(outputFilePath);
Files.createDirectories(outputPath.getParent());
signature.sign(outputFilePath, options);
try {
    signature.sign(outputFilePath, options);
    System.out.println("PDF signed successfully at: " + outputFilePath);
} catch (Exception e) {
    System.err.println("Signing failed: " + e.getMessage());
    e.printStackTrace();
}
options.setLocationMeasureType(MeasureType.Percents);
options.setLeft(5);  // 5% from left works on any page width
options.setWidth(10);  // Give it room to breathe
options.setHeight(5);  // Maintain proper aspect ratio
String filePath = "documents/sample.pdf";  // Works on Windows, Mac, Linux
Files.createDirectories(Paths.get("output/signed"));
try (Signature signature = new Signature(filePath)) {
    signature.sign(outputFilePath, options);
} // Automatically closes and releases memory
import org.junit.Test;
import static org.junit.Assert.*;

public class BarcodeSignatureTest {
    
    @Test
    public void testBarcodeSigning() {
        String testPdf = "test-data/sample.pdf";
        String output = "test-output/signed.pdf";
        
        try (Signature signature = new Signature(testPdf)) {
            BarcodeSignOptions options = new BarcodeSignOptions("TEST123");
            options.setEncodeType(BarcodeTypes.Code128);
            
            signature.sign(output, options);
            
            // Verify output file exists
            assertTrue(new File(output).exists());
            
            // Verify file size increased (signature was added)
            long originalSize = new File(testPdf).length();
            long signedSize = new File(output).length();
            assertTrue(signedSize > originalSize);
            
        } catch (Exception e) {
            fail("Signing should not throw exception: " + e.getMessage());
        }
    }
}
List<String> pdfFiles = Arrays.asList("doc1.pdf", "doc2.pdf", "doc3.pdf");

for (String pdfFile : pdfFiles) {
    try (Signature signature = new Signature(pdfFile)) {
        BarcodeSignOptions options = createBarcodeOptions(); // Reuse options
        signature.sign(getOutputPath(pdfFile), options);
    }
}
// Create options once, reuse many times
BarcodeSignOptions templateOptions = createStandardBarcodeOptions();

// For each document, clone and customize
BarcodeSignOptions documentOptions = templateOptions.clone();
documentOptions.setText(uniqueDocumentId);

دروس ذات صلة