PDF para conversão de texto ao enviar para o IIS Web App?
Pergunta
Eu já investigou vários C # DLL e não encontrei nenhuma que o trabalho especialmente bem. Meus requisitos são:
- documentos PDF são enviados via uma página ASPX.
- necessidades texto a ser extraídos e armazenados no DB com o PDF.
- Solution não pode ter custo adicional para replicar o Web App (por isso, se eu sei ele vai trabalhar, uma solução de taxa fixa seria considerado, mas nenhuma taxa-per-instalação).
- Embora boas conversões são mais importantes, os usuários podem desejar fazer upload de muitos arquivos PDF de uma só vez, assim que a velocidade também é importante.
O processo a jusante que vai consumir o texto está configurado para usar PDFBox , que parece trabalhe bem. Mas:
- PDFBox é escrito em Java, então eu preciso lançá-lo como um processo separado e recuperar os resultados (estou descartando a usá-lo através de IKVM ).
- Por padrão, ele lê a partir de arquivos de disco, mas para simplicidade e velocidade que eu preferiria um stdin-> stdout filtro. Fixação PDFBox era simples, mas recebendo I / O para um subprocesso de C # foi tedioso.
- Eu sei que eu poderia escrever um novo disco para o disco rígido, lançamento PDFBox, esperar por ele para sair, em seguida, ler a partir do disco rígido (ou a sua stdout ), mas que parece hackish e faria provavelmente será mais lenta.
Eu estou surpreso que eu não consigo encontrar uma receita conversor de PDF, parece que um requisito comum. Então, alguém poderia me ajudar com:
- A solução de conversão enlatados que você use o que funciona , pelo menos , bem como PDFBox .
- Se estiver usando um filtro de stdio trás IIS é realmente uma má ideia, uma explicação do por .
Agradecemos antecipadamente.
Solução
I pedido inicialmente como escrever dados binários para um Process.StandardInput ( StreamWriter ) uma vez que só lida com dados de caracteres: a resposta é usar processo. StandardInput.BaseStream ( Corrente ).
Além disso, uma vez que ambos os tubos pode encher-se (64KB buffers IIUC), eu usei o seguinte padrão:
- gerou uma thread para gravar dados, em seguida, definir um sinalizador,
- gerou uma thread para ler todos os dados de retorno, em seguida, definir um sinalizador,
- Curva até que ambos os sinalizadores são definidos, chamando Thread.Sleep (100).
- dados de retorno ler de processo.
Assim, além do aspecto hackish de qualquer colocando um executável dentro do WebApp (ou exigindo uma instalação separada) este parece funcionar bem -. Mas eu ainda preciso fazer alguns testes abuso
Outras dicas
Se você tem o processo de execução posibilidade () em seu servidor, você pode usar XPDF de http: // www .foolabs.com / xpdf / Um dos utils é pdftotext que é capapble de extrair arquivos PDF text I, e até mesmo manter algum tipo de layout.
De volta aos velhos dias, eu ouvi falar de exemplos em que a busca Adobe e serviço MS índice combinado pode extrair texto de arquivos PDF também.