سؤال

أنا إنشاء ملف pdf باستخدام BIRT الإبلاغ المكتبة.في وقت لاحق أريد أن رقميا هذه الملفات.أنا باستخدام iText رقميا التوقيع على الوثيقة.

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

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

هل هذا من الممكن تحقيقه باستخدام بيرت و iText

شكرا

هل كانت مفيدة؟

المحلول

إذا كنت على استعداد للغش قليلا، يمكنك استخدام وصلة ... الذي يدعم BIRT وفقا لبلدي الغوص قليلا في مستندات بها للتو.

وصلة هو الشرح. للأسف، iText لا يدعم دراسة الشروح على مستوى عال، وتوليد لهم فقط، لذلك سيكون لديك لاستخدام المكالمات الكائن على مستوى منخفض.

ورمز لاستخراجها قد تبدو شيئا من هذا القبيل:

// getPageN is looking for a page number, not a page index
PdfDictionary lastPageDict = myReader.getPageN(myReader.getNumberOfPages());

PdfArray annotations = lastPageDict.getAsArray( PdfName.ANNOTS );
PdfArray linkRect = null;
if (annotations != null) {
  int numAnnots = annotations.size();
  for (int i = 0; i < numAnnots; ++i) {
    PdfDictionary annotDict = annotations.getAsDict( i );
    if (annotDict == null) 
      continue; // it'll never happen, unless you're dealing with a Really Messed Up PDF.

    if (PdfName.LINK.equals( annotDict.getAsName( PdfName.SUBTYPE ) )) {
      // if this isn't the only link on the last page, you'll have to check the URL, which
      // is a tad more work.
      linkRect = annotDict.getAsArray( PdfName.RECT );

      // a little sanity check here wouldn't hurt, but I have yet to come across a PDF
      // that was THAT screwed up, and I've seen some Really Messed Up PDFs over the years.

      // and kill the link, it's just there for a placeholder anyway.
      // iText doesn't maintain any extra info on links, so no need for other calls.
      annotations.remove( i ); 
      break;
    }
  }
}

if (linkRect != null) {
  // linkRect is an array, thusly: [ llx, lly, urx, ury ].
  // you could use floats instead, but I wouldn't go with integers.  
  double llx = linkRect.getAsNumber( 0 ).getDoubleValue(); 
  double lly = linkRect.getAsNumber( 1 ).getDoubleValue();
  double urx = linkRect.getAsNumber( 2 ).getDoubleValue();
  double ury = linkRect.getAsNumber( 3 ).getDoubleValue();

  // make your signature
  magic();
}

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

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

وتحرير: إذا كنت بحاجة للبحث عن URL معين، فأنت تريد أن ننظر إلى قسم "الشروح 12.5.6.5 لينك" من المرجع PDF، والتي يمكن العثور عليها هنا: http://www.adobe.com/content /dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf

نصائح أخرى

أنا لا أعرف أي شيء عن بيرت إلا قليلا الألفة مع iText.ولكن ربما يعمل هذا...

يمكن بيرت توليد مربع التوقيع مخطط العادية حقل النموذج مع مجال معين الاسم ؟ إذا كان الأمر كذلك, ثم عليك أن تكون قادرا على:

  1. البحث في هذا المجال في iText هو AcroFields hashmap باستخدام getField;
  2. إنشاء توقيع جديد باستخدام pdf محرد ، وتعيين الهندسة على أساس القيم من حقل العمر الكائن ؛ و
  3. حذف حقل العمر باستخدام removeField.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top