2017-10-18 5 views
0

Lorsque j'essaie de générer le pdf; J'obtiens le pdf mais les données entrées ne sont pas montrées sur le dossier de pdf, tandis que la même information est envoyée à la base de données. Je vois cette information mais je ne suis pas sûr de ce que le problème pourrait être en ce qui concerne le fichier pdf. Et je l'ai essayé dans différents navigateurs et c'est toujours la même chose.Impression pdf à partir du projet mvc asp.net

Mise à jour

IssueDAO dbdata = new IssueDAO(); 
     dbdata.connectionString = ConfigurationManager.ConnectionStrings["TWCL_OPERATIONSConnectionString"].ConnectionString; 
     getIssue.transactionDate = DateTime.Now; //Sets the transaction date to current date 
     getIssue.status = -1; 
     Item item = new Item(); 
     try 
     { 
      dbdata.createIssue(getIssue, item);//Creates the issue in the database 
     } 
     catch (Exception ex) 
     { 
      LogWrite logWriter = new LogWrite(ex.ToString()); 
      ViewBag.errorMessage = "Unable to complete the Issue. Please see Log file for more Information"; 
      return View("IssueItem", getIssue); 

     } 


     DataSet ds = dbdata.GetReceipt(getIssue.requisitionNumber); 
     LocalReport localreport = new LocalReport(); 
     localreport.ReportPath = Request.MapPath(Request.ApplicationPath) + @"Reports\Reciept.rdlc"; 
     localreport.DataSources.Add(new ReportDataSource("Receipt_Data", ds.Tables[0])); 
     localreport.SetParameters(new ReportParameter("Req_num", getIssue.requisitionNumber)); 
     string reporttype = "PDF"; 
     string mimeType; 
     string encoding; 
     string fileNameExtension = "pdf"; 
     string deviceInfo = @"<DeviceInfo>    
       <OutputFormat>PDF</OutputFormat>    
       <PageWidth>8.5in</PageWidth>    
       <PageHeight>11in</PageHeight>   
       <MarginTop>0.25in</MarginTop>   
       <MarginLeft>0.45in</MarginLeft>    
       <MarginRight>0.45in</MarginRight>  
       <MarginBottom>0.25in</MarginBottom></DeviceInfo>"; 
     Warning[] warnings; 
     string[] streams; 
     byte[] renderedBytes; 
     renderedBytes = localreport.Render(
     reporttype, deviceInfo, out mimeType, out encoding, out fileNameExtension, 
     out streams, out warnings); 


     var doc = new iTextSharp.text.Document(); 
     var reader = new PdfReader(renderedBytes); 
     using (FileStream fs = new FileStream(Server.MapPath("~/Receipt" + 
      Convert.ToString(Session["CurrentUserName"]) + ".pdf"), FileMode.Create)) 
     { 
      PdfStamper stamper = new PdfStamper(reader, fs); 
      string Printer = "Xerox Phaser 3635MFP PCL6"; 
      // This is the script for automatically printing the pdf in acrobat viewer 
      stamper.JavaScript = "var pp = getPrintParams();pp.interactive =pp.constants.interactionLevel.automatic; pp.printerName = " + 
          Printer + ";print(pp);\r"; 
      stamper.Close(); 
     } 
     reader.Close(); 
     FileStream fss = new FileStream(Server.MapPath("~/Receipt.pdf"), FileMode.Open); 
     byte[] bytes = new byte[fss.Length]; 
     fss.Read(bytes, 0, Convert.ToInt32(fss.Length)); 
     fss.Close(); 
     System.IO.File.Delete(Server.MapPath("~/Receipt.pdf")); 

     //Here we returns the file result for view(PDF) 
     ModelState.Clear(); 
     Session.Clear(); //Clears the session variable for reuse 
     return File(bytes, "application/pdf"); 
    } 
+0

Avez-vous débogué le code? Avez-vous vérifié si 'ds.Tables [0]' contient des données? –

+0

Oui, il a des données. –

+0

J'ai cessé d'utiliser C# pour générer Excel & PDF ... JS sur le client est suffisant pour générer docs facilement manipulables .. juste obtenir les données sur le côté client en quelque sorte ... et faire la chose –

Répondre

0

J'ai fait un peu de recherche sur ce sujet et je curieux de savoir pourquoi ne pas vous retourner le FileStream pour le pdf que vous avez créé à l'intérieur de votre déclaration à l'aide. Plutôt que d'essayer de ce qui ressemble à l'ouvrir à nouveau, puis envoyer les octets?

J'ai trouvé cet article et peut-être cela aidera parce qu'il élimine le besoin pour le lecteur et tout. Regardez la première réponse.

DataSet ds = dbdata.GetReceipt(getIssue.requisitionNumber); 
    ReportDataSource reportDataSource = new ReportDataSource(); 
    reportDataSource.Value = ds.Tables[0]; 
    reportDataSource.Name = "Receipt_Data"; 
    LocalReport localreport = new LocalReport(); 
    localreport.ReportPath = Request.MapPath(Request.ApplicationPath) + @"Reports\Reciept.rdlc"; 
    localreport.DataSources.Add(reportDataSource); 
    localreport.SetParameters(new ReportParameter("Req_num", getIssue.requisitionNumber)); 
    string reporttype = "PDF"; 
    string mimeType; 
    string encoding; 
    string fileNameExtension = "pdf"; 
    string deviceInfo = @"<DeviceInfo>    
      <OutputFormat>PDF</OutputFormat>    
      <PageWidth>8.5in</PageWidth>    
      <PageHeight>11in</PageHeight>   
      <MarginTop>0.25in</MarginTop>   
      <MarginLeft>0.45in</MarginLeft>    
      <MarginRight>0.45in</MarginRight>  
      <MarginBottom>0.25in</MarginBottom></DeviceInfo>"; 
    Warning[] warnings; 
    string[] streams; 
    byte[] renderedBytes; 
    renderedBytes = localreport.Render(
    reporttype, deviceInfo, out mimeType, out encoding, out fileNameExtension, 
    out streams, out warnings); 


    var doc = new iTextSharp.text.Document(); 
    var reader = new PdfReader(renderedBytes); 
    using (FileStream fs = new FileStream(Server.MapPath("~/Receipt" + 
     Convert.ToString(Session["CurrentUserName"]) + ".pdf"), FileMode.Create)) 
    { 
     PdfStamper stamper = new PdfStamper(reader, fs); 
     string Printer = "Xerox Phaser 3635MFP PCL6"; 
     // This is the script for automatically printing the pdf in acrobat viewer 
     stamper.JavaScript = "var pp = getPrintParams();pp.interactive =pp.constants.interactionLevel.automatic; pp.printerName = " + 
         Printer + ";print(pp);\r"; 
     stamper.Close(); 
    } 
    reader.Close(); 
    FileStream fss = new FileStream(Server.MapPath("~/Receipt.pdf"), FileMode.Open); 
    byte[] bytes = new byte[fss.Length]; 
    fss.Read(bytes, 0, Convert.ToInt32(fss.Length)); 
    fss.Close(); 
    System.IO.File.Delete(Server.MapPath("~/Receipt.pdf")); 

    //Here we returns the file result for view(PDF) 
    ModelState.Clear(); 
    Session.Clear(); //Clears the session variable for reuse 
    return File(bytes, "application/pdf"); 
} 

Creating a PDF from a RDLC Report in the Background

Other good examples

+0

Les commentaires ne sont pas pour une discussion prolongée; cette conversation a été [déplacée pour discuter] (http://chat.stackoverflow.com/rooms/157524/discussion-on-answer-by-kyle-pearson-printing-pdf-from-asp-net-mvc-project) . – Andy

+0

Encore quelque chose pour moi Kyle –

+0

@LeonCharles Avez-vous utilisé cet article? https://www.codeproject.com/Tips/569335/Automatiquement-Printing-an-RDLC-file-in-ASP-NET-MVC –

0

! St vous obtenez des données à côté client en quelque sorte ... Ajax, ViewBag, séance ..whatever

jsPDF est capable d'utiliser des plugins. Pour lui permettre d'imprimer HTML, vous devez inclure certains plugins et doivent donc effectuer les opérations suivantes:

Go to https://github.com/MrRio/jsPDF and download the latest Version. 
Include the following Scripts in your project: 
jspdf.js 
jspdf.plugin.from_html.js 
jspdf.plugin.split_text_to_size.js 
jspdf.plugin.standard_fonts_metrics.js 

Si vous voulez ignorer certains éléments, vous devez les marquer avec un ID, que vous pouvez puis ignorez dans un gestionnaire d'élément spécial de jsPDF. Par conséquent, votre HTML devrait ressembler à ceci:

*

<!DOCTYPE html> 
<html> 
    <body> 
    <p id="ignorePDF">don't print this to pdf</p> 
    <div> 
     <p><font size="3" color="red">print this to pdf</font></p> 
    </div> 
    </body> 
</html> 

*

Ensuite, vous utilisez le code JavaScript suivant pour ouvrir le fichier PDF créé dans un PopUp:

var doc = new jsPDF();   
var elementHandler = { 
    '#ignorePDF': function (element, renderer) { 
    return true; 
    } 
}; 
var source = window.document.getElementsByTagName("body")[0]; 
doc.fromHTML(
    source, 
    15, 
    15, 
    { 
     'width': 180,'elementHandlers': elementHandler 
    }); 

doc.output("dataurlnewwindow"); 

Pour moi ceci a créé un pdf gentil et bien rangé qui a seulement inclus la ligne «imprime ceci en pdf».