Преобразование PDF в текст при загрузке в IIS Web App? - PullRequest
0 голосов
/ 30 апреля 2009

Я исследовал несколько C # DLL и не нашел ни одной, которая бы работала особенно хорошо. Мои требования:

  • Документы в формате PDF загружаются через страницу ASPX.
  • Текст необходимо извлечь и сохранить в БД вместе с PDF.
  • Решение не может иметь дополнительных затрат на репликацию веб-приложения (поэтому, если я знаю, оно будет работать, будет рассматриваться решение с фиксированной платой, но без платы за установку).
  • Хотя хорошее преобразование является наиболее важным, пользователи могут захотеть загрузить много файлов PDF одновременно, поэтому скорость также важна.

Нижестоящий процесс, который будет использовать текст, настроен на использование PDFBox , который, кажется, работает хорошо. Но:

  • PDFBox написан на Java, поэтому мне нужно запустить его как отдельный процесс и получить результаты (я отказываюсь использовать его через IKVM ).
  • По умолчанию он читает файлы на диске, но для простоты и скорости я бы предпочел фильтр stdin-> stdout . Исправление PDFBox было простым, но получение ввода-вывода для подпроцесса из C # было утомительным.
  • Я знаю, что могу записать новый диск на жесткий диск, запустить PDFBox, дождаться его завершения, затем прочитать с жесткого диска (или его stdout ), но это кажется хакерским и, скорее всего, будь медленнее.

Я удивлен, что не могу найти рецепт конвертера PDF, похоже, это общее требование. Итак, кто-нибудь может мне помочь с:

  • Используемое вами решение для консервированной конвертации, которое работает как минимум , а также PDFBox .
  • Если использование фильтра stdio за IIS действительно плохая идея, объяснение почему .

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 24 августа 2011

Если у вас есть возможность запустить Process () на вашем сервере, вы можете использовать XPDF из http://www.foolabs.com/xpdf/ Одним из утилит является PDFtoText, который способен извлекать текстовые файлы в формате PDF и даже поддерживать некоторый тип макета. .

В давние времена я слышал о примерах, когда поиск Adobe и служба MS Index вместе могли извлекать текст из файлов PDF.

0 голосов
/ 05 мая 2009

Первоначально я спросил, как записать двоичные данные в Process.StandardInput ( StreamWriter ), поскольку он обрабатывает только символьные данные: ответ должен использовать Process.StandardInput. BaseStream ( Stream ).

Кроме того, поскольку обе трубы могут заполниться (буферы 64 КБ IIUC), я использовал следующую схему:

  • Создает поток для записи данных, затем устанавливает флаг,
  • Создает поток для чтения всех возвращаемых данных, затем устанавливает флаг,
  • Цикл, пока оба флага не установлены, вызывая Thread.Sleep (100).
  • Возврат данных, прочитанных из процесса.

Таким образом, кроме хакерского аспекта, заключающегося в том, чтобы поместить исполняемый файл в WebApp (или требовать отдельной установки), это, кажется, работает нормально - но мне все еще нужно провести некоторое тестирование на злоупотребление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...