2010-05-07 6 views
0

Contexte:PHP et C# communication sur IIS7 (pour générer PDF dynamique)

je ne pouvais pas trouver HTML libre décent aux services de conversion PDF en C#. Il y en a 100 pour PHP avec une documentation complète, un support et un support CSS. Donc j'utilise html2ps and html2pdf (php).

J'ai PHP 5.2 installé sur IIS7 et son travail magnifiquement pour créer des fichiers PDF.

je suit dans 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" /> 

et 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"); 
} 

et 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 fonctionne parfaitement ... sauf la sortie est HTML.

Alors, comment puis-je obtenir getPDF.aspx pour sortir son HTML en format PDF généré par generatePDF.php?

Répondre

1

Je suggérerais de regarder dans iTextSharp un port .NET libre de iText (Java-Based PDF Lib) Ensuite, vous pouvez couper php hors de l'équation.

Pour la conversion HTML en utilisant iTextSharp Voir This Post S'il vous plaît (trouvé en utilisant Google)

Mise à jour

Rendu Partials dans les formulaires ASP.NET (c.-à-rendu d'une commande unique, ou une page avec des commandes) Vous créez un System.Web.Page pour piloter la structure d'événement.

est ici un code-échantillon I adapté pour un projet de la mine:

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(); 
    } 

Il est appelé comme ceci:

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

Ce code peut ne pas être ce dont vous avez besoin, mais comme vous pouvez le voir vous pouvez rendre un résultat en utilisant les objets Serveur/Page, cela peut être la route que vous devriez prendre.

+0

J'ai déjà utilisé iTextSharp avant ... mais je ne savais pas que ça fonctionnait avec HTML. la chaîne "HTML" est nulle part sur leur page d'accueil. –

+0

J'ai mis à jour ma réponse avec un lien vers un exemple. – Aren

+0

Je travaille dessus maintenant. Maintenant, mon problème est que j'essaie de rendre les contrôles, puis écrire leur contenu dans un fichier PDF. Les contrôles dépendent de leurs propres événements Page_Load qui ne sont pas déclenchés lors de l'utilisation de control.RenderControl (HtmlTextWriter); –