2016-07-26 29 views
0

Ich verwende RDLCs für eine kurze Zeit, um grundlegende Berichte zu erstellen, indem ich meine Standard-C# -Modelle (POCOs) an Datensätze binden und sie an den Bericht weiterleiten Daten darstellen. So lieferte in meinem MVC-Controller ein Aktionsergebnis, das es dem Benutzer ermöglichte, die PDF-Datei bei einem erfolgreichen Aufruf der RESTFUL-API herunterzuladen und dann die Daten an den Bericht zu binden.Hinzufügen eines Kennworts zu einem RDLC-PDF oder Excel in C# (ASP MVC)

public FileContentResult GenerateCensusReport(PersonReportModel model) 
{ 
    Warning[] warnings; 
    string[] streams; 
    string mimeType; 
    byte[] renderedBytes; 
    string encoding; 
    string fileNameExtension; 
    var resultModel = new PersonReportModel(); 
    var inputModel = new List<PersonReportModel>(); 
    var localReport = new LocalReport { ReportPath = Server.MapPath("~/Reports/statsReportTemplate.rdlc") }; 

    //call api 
    var tokenString = HttpContext.Items["tokenValue"]; 
    ServiceClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", 
     tokenString.ToString()); 

    DataObject.Data = model; 
    var data = JsonConvert.SerializeObject(DataObject.Data); 
    var content = new StringContent(data, Encoding.Default, "application/json"); 
    var response = ServiceClient.PostAsync(ServiceUrl + "Report/ReportStats", content).Result; 

    if (response.IsSuccessStatusCode) 
    { 
     var responseResult = response.Content.ReadAsAsync<JsonResponseObject>().Result; 
     resultModel = JsonConvert.DeserializeObject<PersonReportModel>(responseResult.Data.ToString()); 
     inputModel.Add(resultModel); 
    } 

    var reportDataSourceOne = new ReportDataSource 
    { 
     Name = "DataSetPersonalStats", 
     Value = inputModel 
    }; 

    localReport.DataSources.Add(reportDataSourceOne); 

    localReport.Refresh(); 

    var deviceInfo = "<DeviceInfo>" + "<OutputFormat>PDF</OutputFormat>" + "</DeviceInfo>"; 

    renderedBytes = localReport.Render("PDF", deviceInfo, out mimeType, out encoding, out fileNameExtension, 
     out streams, out warnings); 

    var fileName = "Census_Report_" + DateTime.Now + "_.pdf"; 

    Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName); 

    return new FileContentResult(renderedBytes, mimeType); 
} 

jedoch basierend auf Client-Anfrage i angefordert wurde auf dem Dokument ein Passwort festlegen (oder die Dokumentenausgabe verschlüsselt), die den Zugriff auf Daten, die in der document.In kurz beschränken, wenn ein Client der PDF öffnet sollte ein Fenster haben, das sie nach einem Passwort für den Zugang zu den Informationen fragt

Ich habe überall nach möglichen Lösungen gesucht und bin auf einige gestoßen, die die Verwendung von iText Sharp und anderen Tools von Drittanbietern vorgeschlagen haben, die bestimmte Lizenzbeschränkungen haben.

Gibt es vielleicht etwas, das ich vermissen könnte, um das PDF zu sichern?

Antwort

1

gefunden eine Lösung für ein solches Problem mit PDFSharp :)