Domanda

Ho studiato diverse DLL C # e non ho trovato nessuna che funzioni particolarmente bene. I miei requisiti sono:

  • I documenti PDF vengono caricati tramite una pagina ASPX.
  • Il testo deve essere estratto e archiviato nel DB con il PDF.
  • La soluzione non può avere costi aggiuntivi per la replica dell'app Web (quindi se so funzionerà, verrebbe considerata una soluzione a tariffa fissa, ma nessuna commissione per installazione).
  • Sebbene le buone conversioni siano molto importanti, gli utenti potrebbero voler caricare molti file PDF contemporaneamente, quindi anche la velocità è importante.

Il processo a valle che consumerà il testo è impostato per utilizzare PDFBox , che sembra lavorare bene. Ma:

  • PDFBox è scritto in Java, quindi ho bisogno di avviarlo come processo separato e recuperare i risultati (lo sto eliminando usando IKVM ).
  • Di default legge dai file del disco, ma per semplicità e velocità preferirei un filtro stdin- > stdout . Risolvere PDFBox era semplice, ma ottenere I / O su un sottoprocesso da C # era noioso.
  • So che potrei scrivere un nuovo disco sul disco rigido, avviare PDFBox, attendere che esca, quindi leggere dal disco rigido (o dal suo stdout ), ma sembra un hack e probabilmente sarà più lento.

Sono sorpreso di non riuscire a trovare una ricetta per il convertitore PDF, sembra un requisito comune. Quindi, qualcuno potrebbe aiutarmi con uno dei due:

  • Una soluzione di conversione predefinita che usi che funziona almeno e PDFBox .
  • Se usare un filtro stdio dietro IIS è davvero una cattiva idea, una spiegazione del perché .

Grazie in anticipo.

È stato utile?

Soluzione

Inizialmente ho chiesto come scrivere i dati binari in un Process.StandardInput ( StreamWriter ) poiché gestisce solo i dati dei caratteri: la risposta è utilizzare Processo. StandardInput.BaseStream ( Stream ).

Inoltre, poiché entrambe le pipe potrebbero riempirsi (buffer IIUC da 64 KB), ho usato il seguente schema:

  • Genera un thread per scrivere i dati, quindi imposta un flag
  • Ha generato un thread per leggere tutti i dati di ritorno, quindi impostare un flag
  • Ripeti finché non vengono impostati entrambi i flag, chiamando Thread.Sleep (100).
  • Restituisce i dati letti dal processo.

Quindi, a parte l'aspetto hacker di inserire un eseguibile all'interno della WebApp (o richiedere un'installazione separata) questo sembra funzionare bene, ma ho ancora bisogno di fare dei test sugli abusi.

Altri suggerimenti

Se hai la possibilità di eseguire Process () sul tuo server, puoi utilizzare XPDF da http: // www .foolabs.com / xpdf / Uno dei programmi di utilità è PDFtoText che è in grado di estrarre testo i file PDF e persino di mantenere un tipo di layout.

Ai vecchi tempi, ho sentito parlare di esempi in cui la ricerca Adobe e il servizio MS Index combinati potevano estrarre anche il testo dei file PDF.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top