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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top