2010-11-12 54 views
2

Actuellement, j'utilise la bibliothèque Acrobat Interop (v1.1) d'Adobe en un seul thread pour modifier plusieurs documents PDF par lot sur plusieurs volumes. C'est un goulot d'étranglement majeur dans mon programme, et, au fur et à mesure que le projet a mûri, je suis devenu tenté de paralléliser certaines parties de ce programme.Création par programme de plusieurs instances d'Acrobat

Cependant, il semble qu'avant de pouvoir continuer, j'ai besoin de créer plusieurs processus Acrobat afin de ne pas avoir plusieurs threads se verrouillant sur l'unique instance de l'application. Je sais que l'on peut ajuster le comportement unique de processus d'Adobe en utilisant le/n interrupteur dans la coque, mais étant donné la façon dont il est instancié au sein .NET:

Type type = Type.GetFromProgID("AcroExch.PDDoc"); 
CAcroPDDoc app = (CAcroPDDoc)Activator.CreateInstance(type); 

Je ne peux pas vraiment trouver un moyen de forcer en plusieurs instances. J'ai essayé chaque hack de registre sous le soleil, mais ceux-ci ne semblent affecter que la façon dont Acrobat se lance depuis le shell. Autant que j'ai pu le dire, il n'y a pas non plus de paramètres pour le constructeur COM. J'espérais que quelqu'un pourrait me diriger dans la bonne direction. Merci!

+0

Il est probablement serveur COM hors processus, vérifiez si vous voyez un démarrage .exe lorsque vous créez l'objet app. Non, vous ne pouvez pas remplacer son comportement dans l'application cliente. –

Répondre

2

Acrobat est exposé en tant que COM à un seul thread, et c'est le mur qui limite votre application à engendrer plusieurs threads. Le seul travail auquel je peux penser est de traiter des fichiers sur des processus séparés.

Ainsi,

a) Mettez votre logique dans une application de la console, et l'engendrer plusieurs fois en parallèle

b) Utilisez un processeur PDF natif, comme ABC Pdf (not free!) ou iTextSharp (free)

+0

Je vais probablement aller en direction de ABC PDF pour des raisons de licence. Merci pour votre réponse! –