Comment forcer le formatage et les calculs dans un fichier PDF lorsque vous remplissez d'autres champs avec iTextSharp?

StackOverflow https://stackoverflow.com/questions/470707

Question

J'ai un formulaire PDF avec un certain nombre de champs de texte. Les valeurs entrées dans ces champs sont utilisées pour calculer les valeurs dans d’autres champs (les champs calculés sont en lecture seule).

Lorsque j'ouvre le formulaire dans Adobe Reader et que je remplis un champ, les champs calculés sont automatiquement recalculés.

Toutefois, j'utilise iTextSharp pour remplir les champs, aplatir le formulaire obtenu, puis transférer le formulaire aplati à l'utilisateur via le Web.

Cette partie fonctionne parfaitement, sauf que les champs calculés ne sont jamais calculés. Je suppose que, dans la mesure où aucun événement déclenché par l'utilisateur (comme les raccourcis clavier, la mise au point ou le flou) ne se déclenche, les calculs ne se produisent pas.

Évidemment, je pourrais supprimer les calculs du formulaire à remplir et les faire tous sur le serveur au fur et à mesure que je remplis les champs, mais j'aimerais que le formulaire à remplir soit utilisable à la fois par les humains et par le serveur.

Quelqu'un sait-il forcer les calculs?

EDIT: Je ne me sens pas trop iText / iTextSharp love here ...

Voici quelques détails supplémentaires. La définition de stamper.AcroFields.GenerateAppearances sur true n’aide en rien.

Je pense que la réponse se trouve quelque part dans les actions de la page, mais je ne sais pas comment la déclencher ...

Était-ce utile?

La solution

Paulo Soares (l’un des principaux développeurs d’iText et le responsable actuel de iTextSharp) dit :

  

iText ne fait aucun effort pour réparer   champs calculés parce que la plupart des   Parfois c'est impossible. PdfCopyFields   a un certain soutien pour que parfois   fonctionne et parfois pas.

Autres conseils

J'ai compris comment faire cela. S'il vous plaît voir ma réponse pour la question stackoverflow:

Comment actualiser le formatage sur Champ non calculé et actualisation des champs calculés dans le formulaire PDF remplissable

J'ai mis à jour tous les champs calculés de mes fichiers PDF en appelant la méthode javascript CalculateNow sur l'objet Doc.

Selon la documentation Adobe javascript this.calculateNow ();

  

Force le calcul de tous les champs de calcul du document actuel.

     

Lorsqu'un formulaire contient de nombreux calculs, il peut s'écouler un retard important après que l'utilisateur a saisi des données dans un champ, même s'il ne s'agit pas d'un champ de calcul. Une stratégie consiste à désactiver les calculs à un moment donné et à les réactiver ultérieurement (voir exemple).

Pour inclure l'appel javascript avec iTextSharp:

using (PdfReader pdfReader = new PdfReader(pdfTemplate))
using (PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(newFile, FileMode.Create)))
{
    // fill f1 field and more...
    AcroFields pdfFormFields = pdfStamper.AcroFields;
    pdfFormFields.SetField("f1", "100");
    //...

    // add javascript on load event of the pdf
    pdfStamper.JavaScript = "this.calculateNow();";
    pdfStamper.Close();
}

Sur le serveur, voyez s'il y a une réponse dans les champs calculés. Sinon, calculez-les.

Comme le dit Greg Hurlman, vous devez effectuer les calculs vous-même sur le serveur. C’est pour plus que de la commodité, il ya en fait une bonne raison.

Tous les fichiers du client peuvent potentiellement être visionnés. Je ne sais pas à quoi servent les formulaires PDF, mais il y a des chances pour que cela soit lié à l'argent, alors il est possible que des personnes trichent en faisant en sorte que les calculs montrent un résultat erroné. Si vous faites confiance aux calculs effectués côté client, vous n’avez aucun moyen de le détecter.

Lorsque vous recevez le formulaire PDF du client, vous devez rétablir tous les calculs afin de savoir qu'ils sont corrects. Ensuite, si vous devez également comparer les versions du client, vous devez vérifier si elles ont été mal foutues.

Vous ne pensez pas que vos clients sont si peu fiables? Bon pour vous, mais les preuves sont en désaccord. L'une de mes premières introductions à la programmation a été d'ouvrir les sauvegardes de SimCity afin de me donner plus d'argent. Si l’opportunité existe de tricher d’une manière ou d’une autre, les gens l’essayeront à un moment donné.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top