Связь PHP и C # на IIS7 (для создания динамического PDF) - PullRequest
0 голосов
/ 07 мая 2010

Справочная информация:

Я не смог найти достойных бесплатных утилит для преобразования HTML в PDF в C #.Есть сотни из них для PHP с обширной документацией, поддержкой и поддержкой CSS.Поэтому я использую html2ps и html2pdf (php).

У меня установлен PHP 5.2 на IIS7, и он прекрасно работает для создания PDF-файлов.

У меня есть следующее в getPDF.aspx

<!-- Output the header -->
<DM:header runat="server" ID="header" />

<asp:Placeholder id="content" runat="server" />

<!-- Output the footer -->
<DM:footer runat="server" ID="footer" />

и в getPDF.aspx.cs:

protected void Page_Load(object sender, EventArgs e){
    // AddContentControl simples adds a controls to the content Placeholder.

    AddContentControl("controls/page1.ascx");
    AddContentControl("controls/page2.ascx");
    AddContentControl("controls/page3.ascx");
}

и в generatePDF.php:

<?php
    /* ... includes and stuff here ... */

    $data = "THE HTML GOES HERE!";
    // creates the PDF from the $data and Outputs the created file.
    convert_to_pdf($data);
?>

- getPDF.aspx работает отлично ...except выходной является HTML.

Так, как я могу получить getPDF.aspx, чтобы вывести его HTML как PDF, сгенерированный generatePDF.php?

1 Ответ

1 голос
/ 07 мая 2010

Я бы посоветовал заглянуть в iTextSharp бесплатный порт .NET iText (PDF Lib на основе Java). Тогда вы можете вырезать php прямо из уравнения.

Для конвертации HTMLиспользуя iTextSharp Пожалуйста, смотрите Это сообщение (Найдено с помощью Google)

Обновление

Рендеринг Partials в ASP.NETФормы (т. Е. Рендеринг одного элемента управления или страницы с элементами управления) Вы создаете System.Web.Page для управления структурой событий.

Вот пример кода, который я адаптировал для моего проекта:

    public static string Render<T>(string controlPath, Action<T> initControlCallback) where T : Control
    {
        Page renderPage = new Page();

        // Load the control & add to page
        T control = (T) renderPage.LoadControl(controlPath);
        renderPage.Controls.Add(control);

        // Initialize the control
        initControlCallback.Invoke(control);
        renderPage.DataBind();

        StringWriter result = new StringWriter();
        HttpContext.Current.Server.Execute(renderPage, result, false); // Render Process
        return result.ToString();
    }

Он называется так:

MyHelper.Render<MyControlBase>("~/SomePath/SomeControl.ascx", p => { p.SomeProperty = "Initializer" });

Этот код может быть не тем, что вам нужно, но, как вы можете видеть, вы можете отобразить результат, используя объекты Server / Page, это может бытьмаршрут, по которому вы должны идти.

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