Преобразование больших объемов текста и динамических данных в PDF - PullRequest
0 голосов
/ 09 августа 2011

У меня есть трехстраничный документ Word, который необходимо преобразовать в PDF.Этот документ Word был предоставлен мне в качестве шаблона, чтобы показать, как должен выглядеть вывод PDF.Я попытался преобразовать этот документ в PDF, создал форму PDF и использовал iTextSharp, чтобы открыть форму, заполнить ее данными и вернуть обратно клиенту.Это все замечательно, но из-за большого количества хранимых данных местозаполнителей было недостаточно, а текст был бы обрезан или скрыт.

Моя вторая попытка состояла в том, чтобы создать MVC 2 View без главной страницы, передать модельпредставление, возьмите представление представления в HTML, передайте его iTextSharp и выполните рендеринг PDF.Проблема заключалась в том, что iTextSharp не работал на некоторых тегах (один из них был тегом <hr>).Мне удалось избавиться от проблемного тега, но тогда таблицы не отображались должным образом.А именно, атрибут border был проигнорирован, поэтому я получил таблицы без полей.Эта попытка не удалась.

Мне нужно предложение или совет о наиболее эффективном способе создания PDF-документа в MVC 2, который можно было бы поддерживать в долгосрочной перспективе.Я действительно не хочу, чтобы мои действия были длиной более 200 строк.Работа напрямую с документом Word - не лучшее решение, так как я никогда не работал с VSTO, поэтому я не совсем понимаю, как будет выглядеть приложение Word, манипулировать текстом внутри него, добавлять динамические данные и затем динамически преобразовывать их в PDF..

Любые предложения приветствуются.

С уважением!

Ответы [ 3 ]

2 голосов
/ 09 августа 2011

Одна вещь, которую я делал в прошлом, - это сохранить файл Word в формате DOCX и разархивировать его, поскольку DOCX - это просто переименованный файл zip.В архиве откройте /word/document.xml, и вы увидите свой документ.Там есть много странных тегов XML, но в целом вы должны получить довольно хорошее представление о том, где находится ваш контент.Затем просто добавьте текст-заполнитель, такой как {FIRST_NAME}, сохраните файл и повторно заархивируйте.

Затем из кода вы можете просто выполнить те же самые шаги, распаковав что-то вроде SharpZipLib или DotNetZip , замена копии заполнителя, повторное архивирование и последующее использование самой автоматизации автоматизации Word * для сохранения в формате PDF .

Другой путь заключается в полном использовании iTextSharp и записиParagraphs и PdfPTable и все остальное.Установка займет намного больше времени, но даст вам максимальный контроль.

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

Объектная модель документов Word довольно проста для понимания.Он будет содержать ряд абзацев или таблиц.Используя Open XML SDK , вы можете перебирать каждый абзац / таблицу в документе word и получать его содержимое и стили.Затем вы можете сгенерировать PDF-документ на лету, используя полученную информацию.Это будет работать и под MVC.

Но если ваш текстовый документ содержит сложные элементы, то вам потребуется больше времени для реализации на основе этого подхода.Кроме того, этот подход будет работать только с файлами (Word 2007 и 2010).

Кроме того, параметры HTML в PDF, доступные в настоящее время в библиотеке ITextSharp, будут работать только с известным набором тегов, насколько я знаю.

Еще одно предложение - использовать имеющиеся в продаже компоненты .NET.Есть много хороших доступных решений.Например: Syncfusion

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

В: Вы говорите: «... но из-за большого количества хранимых данных заполнителей было недостаточно, и текст был бы обрезан или скрыт». Как вы в конечном итоге получаете много данных?Если слово «шаблон» может «хранить» данные на 3 страницах, они должны уместиться на 3 страницах PDF.Раньше я использовал iTextSharp для создания своих PDF-файлов, но я также почти всегда заканчивал тем, что сам создавал PDF-документ с нуля. (На самом деле это не решение <200 строк)используйте тогда iText, множество примеров / docus </p>

Просто мои два цента

...