Produire un PDF correspondant à un document de la gestion commerciale

0000002864     -      01/12/2021

Le code repris ci-dessous montre comment produire un fichier PDF, mis à disposition dans un site écrit en ASP.net. Le code est à placer dans un gestionnaire générique (ShowPdf.ashx), qui attend comme paramètres id, journal et piece. L'exemple est donné ici pour une facture (type=1). Notez que cette programmation exploite la possibilité qu'à MercatorReporting de générer le PDF dans un tableau de bytes (outputDescriptorExport.FileContent), ce qui retire la nécessite de le matérialiser sous forme de fichier.

L'URL permettant d'accéder à ce PDF sera de la forme https://www.monsite.com/ShowPdf.ashx?id=A0B1C2D345&journal=Factu&piece=20180298.

Zoom
<%@ WebHandler Language="C#" Class="ShowPdf" %>

using System;
using System.Web;
using MercatorApi;
using System.Collections.Generic;

public class ShowPdf : IHttpHandler, System.Web.SessionState.IRequiresSessionState {

    public void ProcessRequest(HttpContext context)
    {
        context.Response.Cache.SetCacheability(HttpCacheability.Public);
        context.Response.Cache.SetExpires(DateTime.Now.AddHours(1));
        context.Response.Buffer = false;
        context.Response.ContentType = "application/pdf";

        if (string.IsNullOrEmpty(context.Request.Params["id"]) || string.IsNullOrEmpty(context.Request.Params["journal"]) || string.IsNullOrEmpty(context.Request.Params["piece"]))
        {
            context.Response.StatusCode = 500;
            context.Response.End();
            return;
        }

        string id = context.Request.Params["id"];
        string journal = context.Request.Params["journal"];
        Int64 piece = Api.ValSafeInt64(context.Request.Params["piece"]);
        int type = 1;
        using (MercatorUi.Engine.Gescom.BillingEngine billingEngine = MercatorUi.Engine.Gescom.BillingEngine.InitExisting(MercatorUi.Engine.Gescom.Billing.TypeVAEnum.V, type, id, journal, piece))
        {
            if (billingEngine.DataSet == null)
            {
                context.Response.StatusCode = 404;
                context.Response.End();
                return;
            }
            MercatorUi.Reporting.OutputDescriptorExport outputDescriptorExport = new MercatorUi.Reporting.OutputDescriptorExport(MercatorUi.Reporting.ExportReportEnum.PDF, null, MercatorUi.Reporting.ExportOpenAfterEnum.No);
            outputDescriptorExport.ExportToBytes = true;
            List<MercatorUi.Reporting.OutputDescriptor> outputDescriptors = new List<MercatorUi.Reporting.OutputDescriptor>();
            outputDescriptors.Add(outputDescriptorExport);
            System.Data.DataSet dataSetPrintPrev = billingEngine.PrepareDataSetForPrint();
            Dictionary<string, object> parametersPrintPrev = billingEngine.PrepareParametersForPrint();
            Api.LastError = "";
            MercatorUi.Reporting.ReportingStatic.Reporting.RunReport("", billingEngine.SEQUENC["MODELEX_1"].ToString(), dataSetPrintPrev, outputDescriptors, parametersPrintPrev);
            if (!string.IsNullOrEmpty(Api.LastError) || (outputDescriptorExport.FileContent == null) || (outputDescriptorExport.FileContent.Length == 0))
            {
                context.Response.StatusCode = 500;
                context.Response.End();
                return;
            }
            context.Response.AddHeader("Content-Disposition",
                            "attachment; " +
                            "filename=\"" + journal + "_"  + piece.ToString() + ".pdf\"; " +
                            "size=" + outputDescriptorExport.FileContent.Length.ToString() + "; " +
                            "creation-date=" + DateTime.Now.ToString("R").Replace(",", "") + "; " +
                            "modification-date=" + DateTime.Now.ToString("R").Replace(",", "") + "; " +
                            "read-date=" + DateTime.Now.ToString("R").Replace(",", ""));
            context.Response.BinaryWrite(outputDescriptorExport.FileContent);
        }
    }

    public bool IsReusable {
        get {
            return false;
        }
    }

}


Cookies fonctionnels : Cookies nécessaires à l'utilisation du site et cookies de préférence. Ils ne contiennent aucune donnée à caractère personnel. (En savoir plus)

Cookies statistiques : Captation de statistiques liées aux comportements des internautes. (En savoir plus)

Cookies marketing : Pour effectuer le suivi des visiteurs au travers des sites web, à des fins publicitaires. (En savoir plus)