2009-12-30 4 views
5

В ссылке на ранее должность (PDF Report generation)Преобразование HTML в PDF

Я решил использовать решение, похожее на http://www.alistapart.com/articles/boom

Для тех из вас, кто не хочет читать либо ссылки - Я создавая отчет и нуждающийся в нем как в формате PDF. Я решил пойти по пути HTML -> PDF, используя .NET.

Итак, скажем, я получаю файл HTML в точности так, как будто я его хочу. Каков наилучший способ преобразования указанной страницы в PDF? По сути, я хотел бы, чтобы пользователь увидел «предварительный просмотр» в HTML, а затем смог конвертировать указанную страницу в PDF. Библиотека, в которой я сейчас экспериментирую, - это ABCPdf.

Моя первая мысль состояла в том, чтобы сохранить страницу в файловой системе и указать ее URL в процедуре преобразования во время обработчика событий на самой странице. У этого есть свои проблемы, потому что я должен был бы сохранить страницу каждый раз, когда она была подготовлена ​​для ее распечатки. На самом деле, это просто кажется backasswards.

Следующая мысль заключалась в том, чтобы использовать метод рендеринга страницы для захвата страницы как байтового потока и использовать ее (поскольку ABCPdf поддерживает преобразование потока HTML.) Если это мой ответ, я теряюсь за то, это от. У вас есть кнопка «Печать», которая выполняет обработчик Me.Render(), и отправляет его в процедуру преобразования? Возможно ли это?

Нижняя строка. Как только страница отображается в хорошем HTML, как вы инициализируете преобразование в PDF этой страницы? Обходные решения и другие решения приветствуются.

Я надеюсь, что я что-то очевидное, так как это не хватает надо быть «легкая часть»

+1

Кроме того, я играю с идеей сохранения шаблона HTML на странице в БД и программной обработки данных. Таким образом, у меня есть HTML, с которым я могу делать все, что захочу (рендеринг на экране или преобразование) – IniTech

ответ

3

Хорошо, он работает, и это было довольно просто. Просто передайте это следующему парню, которому может понадобиться ответ. Я просто использовал свойство Url страницы и отправил его в метод ABCPdf addImageUrl(). Также нужно было использовать цепочку, так как это было более одной страницы. Спасибо за помощь.

Dim oPdfDoc As New Doc() 
Dim iPageID As Int32 
Dim MyUrl = Request.Url 

iPageID = oPdfDoc.AddImageUrl(MyUrl.AbsoluteUri) 

While True 
    oPdfDoc.FrameRect() 
    If Not oPdfDoc.Chainable(iPageID) Then 
     Exit While 
    End If 
    oPdfDoc.Page = oPdfDoc.AddPage() 
    iPageID = oPdfDoc.AddImageToChain(iPageID) 
End While 

For i as Int32 = 1 To oPdfDoc.PageCount 
    oPdfDoc.PageNumber = i 
    oPdfDoc.Flatten() 
Next 

oPdfDoc.Save(Server.MapPath("test.pdf")) 
oPdfDoc.Clear() 
-2

Как вы делаете это из C#? У вас нет (напрямую).

Неисправность рабочего процесса PRINCE.EXE может быть вашим единственным вариантом.

PRINCE.EXE будет считывать/записывать данные из стандартного ввода HTML и отправлять PDF в «стандартный вывод». Используйте командную строку «% dir% \ PRINCE -» без имени выходного файла.

Возможно, вам понадобится отдельный COM-компонент, чтобы вызвать PRINCE, поскольку класс System.Management может не работать для вас. Используйте Visual Basic или C++ для создания COM-компонента.

Ввод HTML в базу данных - это плохая идея, но может быть хорошо в вашем случае, поскольку это звучит, как будто это по существу статично.

EDIT

Изменено "ребенок PRINCE.EXE" на "рабочий процесс PRINCE.EXE". У меня странное чувство, что PRINCE.EXE не должен быть дочерним процессом.