Question

J'ai examiné plusieurs DLL C # et n'en ai trouvé aucun qui fonctionne particulièrement bien. Mes exigences sont les suivantes:

  • Les documents PDF sont téléchargés via une page ASPX.
  • Le texte doit être extrait et stocké dans la base de données avec le PDF.
  • La solution ne peut pas entraîner de coût supplémentaire pour la réplication de l'application Web (donc, si je sais que cela fonctionnera, une solution forfaitaire sera envisagée, mais aucun frais par installation).
  • Bien que les conversions soient primordiales, les utilisateurs peuvent souhaiter télécharger de nombreux fichiers PDF en même temps. La rapidité est donc également importante.

Le processus en aval qui consomme le texte est configuré pour utiliser PDFBox , ce qui semble être le cas. bien travailler. Mais:

  • PDFBox est écrit en Java. Par conséquent, je dois le lancer en tant que processus séparé et récupérer les résultats (je refuse de l'utiliser en utilisant IKVM ).
  • Par défaut, il lit les fichiers sur le disque, mais pour des raisons de simplicité et de rapidité, je préférerais un filtre stdin- > stdout . La fixation de PDFBox était simple, mais obtenir des E / S dans un sous-processus à partir de C # était fastidieux.
  • Je sais que je pourrais écrire un nouveau disque sur le disque dur, lancer PDFBox, attendre sa sortie, puis le lire à partir du disque dur (ou de sa sortie standard ), mais cela semble être un hack et probablement plus lent.

Je suis surpris de ne pas pouvoir trouver une recette de convertisseur PDF, cela semble être une exigence courante. Alors, est-ce que quelqu'un pourrait m'aider avec:

  • Une solution de conversion intégrée que vous utilisez qui fonctionne au moins ainsi que PDFBox .
  • Si l'utilisation d'un filtre stdio derrière IIS est vraiment une mauvaise idée, une explication de pourquoi .

Merci d'avance.

Était-ce utile?

La solution

À l'origine, j'avais demandé comment écrire des données binaires sur un Process.StandardInput ( StreamWriter ) puisqu'il ne traitait que des données de caractères: la réponse consiste à utiliser Process. StandardInput.BaseStream ( Flux ).

De plus, comme les deux tuyaux risquent de se remplir (tampons IIUC de 64 Ko), j'ai utilisé le modèle suivant:

  • A créé un thread pour écrire des données, puis définir un indicateur,
  • A créé un thread pour lire toutes les données de retour, puis définir un indicateur,
  • Boucle jusqu'à ce que les deux indicateurs soient définis en appelant Thread.Sleep (100).
  • Renvoyer les données lues du processus.

Donc, mis à part l'aspect délicat de placer un fichier exécutable dans l'application Web (ou nécessitant une installation séparée), cela semble fonctionner correctement - mais je dois tout de même faire quelques tests d'abus.

Autres conseils

Si vous avez la possibilité d’exécuter Process () sur votre serveur, vous pouvez utiliser XPDF à partir de http: // www .foolabs.com / xpdf / L’un de ces utilitaires est PDFtoText qui permet d’extraire des fichiers texte au format PDF, voire de conserver un certain type de présentation.

À l'époque, j’ai entendu parler d’exemples dans lesquels la recherche Adobe et le service MS Index combinés pourraient également extraire le texte de fichiers PDF.

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