Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

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

}