2015-04-24 6 views
1

J'utilise ActivePDF Toolkit depuis un certain temps mais je voudrais passer ma solution à iTextSharp. Je compare la performance de l'un par rapport à l'autre et trouve que iTextSharp est plus lent que activePDF lors du remplissage de champs de formulaire sur un PDF. Voici le code que je utilise pour iTextSharp:itextSharp SetField Performance (vs ActivePDF Toolkit)

using (MemoryStream memoryStream = new MemoryStream()) 
{ 
    PdfReader pdfReader = new PdfReader(template); 
    PdfStamper pdfStamper = new PdfStamper(pdfReader, memoryStream); 
    pdfStamper.FormFlattening = true; 
    AcroFields pdfFormFields = pdfStamper.AcroFields; 

    foreach (Field f in fields) 
     pdfFormFields.SetField(f.Name,f.Value); 
} 

Il est seulement quelques millisecondes plus lent par la forme, mais qui ajoute quand vous traitez des centaines de milliers de formes lors de la création d'un seul PDF. J'espérais qu'il pourrait y avoir une façon différente de définir la valeur des champs, mais je n'en vois pas (j'ai aussi regardé AcroFields.cs).

Quelqu'un a des idées à ce sujet?

+1

ActivePDF crée-t-il également des apparences et aplatit le formulaire par la suite? – mkl

+0

Je ne suis pas familier avec le concept des "apparences", mais ma solution avec activePDF fait de l'aplatissement. J'ai essayé iTextSharp sans l'aplatissement et les résultats étaient à peu près les mêmes – VandyLtd

+0

Si vous remplissez le même formulaire encore et encore, vous pouvez utiliser la méthode 'setFieldCache()' comme indiqué dans ['Subscribe'] (http: // itextpdf .com/examples/iia.php? id = 161) exemple. Cela permettra de garder un cache des propriétés des champs, évitant ainsi d'avoir à lire le modèle encore et encore. –

Répondre

2

Vous n'atteindrez probablement jamais la même vitesse. ActivePDF Toolkit est un code natif 32 bits et 64 bits avec un wrapper .NET. Nous pouvons (et faisons) toujours trouver des moyens de modifier et d'améliorer les performances, mais le code géré est à la merci du CLR.