Frage

Ich erstelle eine pdf-Datei mit BIRT Reporting-Bibliothek. Später muss ich digital diese Dateien signieren. Ich verwende iText das Dokument digital unterschreiben.

Das Problem, das ich bin Bewurf ist, ich brauche die Unterschrift an verschiedenen Orten in verschiedenen Berichten zu platzieren. Ich habe bereits den Code das Dokument digital zu signieren, jetzt bin ich immer die Unterschrift am Ende der letzten Seite in jedem Bericht platzieren.

Schließlich muss ich jeden Bericht sagen, wo ich die Unterschrift platzieren müssen. Dann habe ich die Lage mit iText zu lesen und dann an dieser Stelle die Unterschrift setzen.

Ist das möglich mit BIRT und iText zu erreichen

Danke

War es hilfreich?

Lösung

Wenn Sie bereit sind, ein bisschen zu betrügen, können Sie einen Link verwenden ..., die BIRT in ihre Dokumente jetzt nur noch zu meinem kleinen Tauchgang nach unterstützt.

Ein Link ist eine Anmerkung. Leider iText unterstützt keine Anmerkungen auf einem hohen Niveau der Prüfung, so dass sie nur zu erzeugen, so dass Sie die Low-Level-Objekt Anrufe verwenden müssen werden.

Der Code zu extrahieren, die es so etwas wie folgt aussehen:

// 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();
}

Wenn BIRT einen Text in dem Seiteninhalt unter dem Link für die visuelle Darstellung erzeugt, das ist nur ein kleineres Problem. Ihre Signatur sollte es vollständig abdecken.

Sie sind auf jeden Fall besser, wenn Sie die Signatur direkt von BIRT in erster Linie erzeugen können, aber meine kleine Inspektion ihres docs mich in ihren PDF Anpassung Fähigkeiten ... trotz sitzen oben mit Vertrauen nicht genau füllen von iText selbst. Es ist ein Report-Generator, der PDF-Dateien erzeugen zu können, geschieht ... ich sollte nicht erwarten, dass zu viel. `

Edit: Wenn Sie für die spezifische URL suchen müssen, sollten Sie bei Abschnitt „12.5.6.5 Link-Annotations“ der PDF-Referenz suchen, die hier gefunden werden kann: http://www.adobe.com/content /dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf

Andere Tipps

Ich weiß nichts über BIRT, und haben nur wenig Vertrautheit mit iText. Aber vielleicht funktioniert ...

Kann das Unterschriftsfeld der Umriss als reguläres Formularfeld mit einem bestimmten Feldnamen BIRT generieren? Wenn ja, dann sollten Sie in der Lage sein:

  1. Lookup das Feld mit Namen in iText der AcroFields hashmap, mit getField;
  2. Erstellen Sie eine neue Signatur, um die pdf-Stempel verwendet wird, und legen Sie seine Geometrie basierend auf den Werten des alten Feldobjekt; und
  3. Löschen Sie das alte Feld RemoveField verwenden.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top