Sto eseguendo un processo di fine mese e voglio che venga creato automaticamente alcuni dei report che devono essere creati in quel momento. Sto usando i rapporti di rdlc. C'è un modo per creare automaticamente un PDF da un report RDLC in background?Creazione di un PDF da un report RDLC in background
risposta
Questo è facile da eseguire, è possibile eseguire il rendering del report come PDF e salvare l'array di byte risultante come file PDF su disco. Per fare ciò in background, è più una questione su come è scritta la tua app. Puoi semplicemente creare un nuovo thread, o usare un BackgroundWorker (se si tratta di un'app WinForms), ecc. Ovviamente, potrebbero esserci problemi di multithreading.
Warning[] warnings;
string[] streamids;
string mimeType;
string encoding;
string filenameExtension;
byte[] bytes = reportViewer.LocalReport.Render(
"PDF", null, out mimeType, out encoding, out filenameExtension,
out streamids, out warnings);
using (FileStream fs = new FileStream("output.pdf", FileMode.Create))
{
fs.Write(bytes, 0, bytes.Length);
}
È possibile utilizzare seguente codice che generano file PDF in background come come il pulsante di scatto e poi sarebbe compare in brwoser con SaveAs ed annullare l'opzione.
Warning[] warnings;
string[] streamIds;
string mimeType = string.Empty;
string encoding = string.Empty;`enter code here`
string extension = string.Empty;
DataSet dsGrpSum, dsActPlan, dsProfitDetails,
dsProfitSum, dsSumHeader, dsDetailsHeader, dsBudCom = null;
enter code here
//This is optional if you have parameter then you can add parameters as much as you want
ReportParameter[] param = new ReportParameter[5];
param[0] = new ReportParameter("Report_Parameter_0", "1st Para", true);
param[1] = new ReportParameter("Report_Parameter_1", "2nd Para", true);
param[2] = new ReportParameter("Report_Parameter_2", "3rd Para", true);
param[3] = new ReportParameter("Report_Parameter_3", "4th Para", true);
param[4] = new ReportParameter("Report_Parameter_4", "5th Para");
DataSet dsData= "Fill this dataset with your data";
ReportDataSource rdsAct = new ReportDataSource("RptActDataSet_usp_GroupAccntDetails", dsActPlan.Tables[0]);
ReportViewer viewer = new ReportViewer();
viewer.LocalReport.Refresh();
viewer.LocalReport.ReportPath = "Reports/AcctPlan.rdlc"; //This is your rdlc name.
viewer.LocalReport.SetParameters(param);
viewer.LocalReport.DataSources.Add(rdsAct); // Add datasource here
byte[] bytes = viewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings);
// byte[] bytes = viewer.LocalReport.Render("Excel", null, out mimeType, out encoding, out extension, out streamIds, out warnings);
// Now that you have all the bytes representing the PDF report, buffer it and send it to the client.
// System.Web.HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Buffer = true;
Response.Clear();
Response.ContentType = mimeType;
Response.AddHeader("content-disposition", "attachment; filename= filename" + "." + extension);
Response.OutputStream.Write(bytes, 0, bytes.Length); // create the file
Response.Flush(); // send it to the client to download
Response.End();
hai provato a inviare i parametri? ho continuato a ottenere: 'Si è verificato un errore durante la Microsoft.Reporting.WebForms.LocalReport.EnsureExecutionSession rapporto processing.at locale() a Microsoft.Reporting.WebForms.LocalReport.SetParameters (IEnumerable \' 1 parametri) ' – Rajan
Il codice seguente funziona bene con me di sicuro grazie per i commenti sopra. È possibile aggiungere visualizzatore di report e modificare il visibile = false e utilizzare il codice qui sotto sul pulsante di invio:
protected void Button1_Click(object sender, EventArgs e)
{
Warning[] warnings;
string[] streamIds;
string mimeType = string.Empty;
string encoding = string.Empty;
string extension = string.Empty;
string HIJRA_TODAY = "01/10/1435";
ReportParameter[] param = new ReportParameter[3];
param[0] = new ReportParameter("CUSTOMER_NUM", CUSTOMER_NUMTBX.Text);
param[1] = new ReportParameter("REF_CD", REF_CDTB.Text);
param[2] = new ReportParameter("HIJRA_TODAY", HIJRA_TODAY);
byte[] bytes = ReportViewer1.LocalReport.Render(
"PDF",
null,
out mimeType,
out encoding,
out extension,
out streamIds,
out warnings);
Response.Buffer = true;
Response.Clear();
Response.ContentType = mimeType;
Response.AddHeader(
"content-disposition",
"attachment; filename= filename" + "." + extension);
Response.OutputStream.Write(bytes, 0, bytes.Length); // create the file
Response.Flush(); // send it to the client to download
Response.End();
}
Non è necessario disporre di un controllo ReportViewer ovunque - è possibile creare il LocalReport al volo:
var lr = new LocalReport
{
ReportPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? @"C:\", "Reports", "PathOfMyReport.rdlc"),
EnableExternalImages = true
};
lr.DataSources.Add(new ReportDataSource("NameOfMyDataSet", model));
string mimeType, encoding, extension;
Warning[] warnings;
string[] streams;
var renderedBytes = lr.Render
(
"PDF",
@"<DeviceInfo><OutputFormat>PDF</OutputFormat><HumanReadablePDF>False</HumanReadablePDF></DeviceInfo>",
out mimeType,
out encoding,
out extension,
out streams,
out warnings
);
var saveAs = string.Format("{0}.pdf", Path.Combine(tempPath, "myfilename"));
var idx = 0;
while (File.Exists(saveAs))
{
idx++;
saveAs = string.Format("{0}.{1}.pdf", Path.Combine(tempPath, "myfilename"), idx);
}
using (var stream = new FileStream(saveAs, FileMode.Create, FileAccess.Write))
{
stream.Write(renderedBytes, 0, renderedBytes.Length);
stream.Close();
}
lr.Dispose();
È inoltre possibile aggiungere parametri: (lr.SetParameter())
, gestire i sottoreport: (lr.SubreportProcessing+=YourHandler)
o quasi tutto ciò che si può pensare.
Abbiamo bisogno di rapporto spettatore se vuoi ottenere un file PDF formattato. Ad esempio, per esempio ... ho bisogno di ottenere la replica esatta della mia pagina web in formato PDF, colore, display, quindi devo prima creare un modello e poi riempirlo con il set di dati. – mschoudhary
private void PDFExport(LocalReport report)
{
string[] streamids;
string minetype;
string encod;
string fextension;
string deviceInfo =
"<DeviceInfo>" +
" <OutputFormat>EMF</OutputFormat>" +
" <PageWidth>8.5in</PageWidth>" +
" <PageHeight>11in</PageHeight>" +
" <MarginTop>0.25in</MarginTop>" +
" <MarginLeft>0.25in</MarginLeft>" +
" <MarginRight>0.25in</MarginRight>" +
" <MarginBottom>0.25in</MarginBottom>" +
"</DeviceInfo>";
Warning[] warnings;
byte[] rpbybe = report.Render("PDF", deviceInfo, out minetype, out encod, out fextension, out streamids,
out warnings);
using(FileStream fs=new FileStream("E:\\newwwfg.pdf",FileMode.Create))
{
fs.Write(rpbybe , 0, rpbybe .Length);
}
}
Puoi instanciate LocalReport
FicheInscriptionBean fiche = new FicheInscriptionBean();
fiche.ToFicheInscriptionBean(inscription);List<FicheInscriptionBean> list = new List<FicheInscriptionBean>();
list.Add(fiche);
ReportDataSource rds = new ReportDataSource();
rds = new ReportDataSource("InscriptionDataSet", list);
// attachement du QrCode.
string stringToCode = numinscription + "," + inscription.Nom + "," + inscription.Prenom + "," + inscription.Cin;
Bitmap BitmapCaptcha = PostulerFiche.GenerateQrCode(fiche.NumInscription + ":" + fiche.Cin, Brushes.Black, Brushes.White, 200);
MemoryStream ms = new MemoryStream();
BitmapCaptcha.Save(ms, ImageFormat.Gif);
var base64Data = Convert.ToBase64String(ms.ToArray());
string QR_IMG = base64Data;
ReportParameter parameter = new ReportParameter("QR_IMG", QR_IMG, true);
LocalReport report = new LocalReport();
report.ReportPath = Page.Server.MapPath("~/rdlc/FicheInscription.rdlc");
report.DataSources.Clear();
report.SetParameters(new ReportParameter[] { parameter });
report.DataSources.Add(rds);
report.Refresh();
string FileName = "FichePreinscription_" + numinscription + ".pdf";
string extension;
string encoding;
string mimeType;
string[] streams;
Warning[] warnings;
Byte[] mybytes = report.Render("PDF", null,
out extension, out encoding,
out mimeType, out streams, out warnings);
using (FileStream fs = File.Create(Server.MapPath("~/rdlc/Reports/" + FileName)))
{
fs.Write(mybytes, 0, mybytes.Length);
}
Response.ClearHeaders();
Response.ClearContent();
Response.Buffer = true;
Response.Clear();
Response.Charset = "";
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=\"" + FileName + "\"");
Response.WriteFile(Server.MapPath("~/rdlc/Reports/" + FileName));
Response.Flush();
File.Delete(Server.MapPath("~/rdlc/Reports/" + FileName));
Response.Close();
Response.End();
- 1. Rendering di un report RDLC in HTML in ASP.NET MVC
- 2. Come incorporare un font in un PDF con RDLC
- 3. Aggiungere un DataSet esistente al report .rdlc
- 4. Creazione di report PDF con grafico flottante
- 5. Immagine integrata RDLC distorta in PDF
- 6. RDLC report piè di pagina con valore da "Current Record"
- 7. È possibile visualizzare un PDF in un report di Generatore report?
- 8. .rdlc Report - Impossibile creare un lettore di dati per set di dati 'DataSet1'
- 9. Come sommare un campo in base a una condizione in un altro campo nel report RDLC?
- 10. Passando Parametri report a sottoreport in VS 2010 RDLC
- 11. Come posso migliorare le prestazioni del metodo LocalReport.Render durante l'esportazione di PDF da .rdlc nel codice?
- 12. Creazione di un nuovo PDF unendo documenti PDF usando TCPDF
- 13. Come stampare direttamente report rdlc senza mostrare PrintDialog() in C#?
- 14. Crea una tabella senza set di dati in un report rdlc.
- 15. Codifica caratteri di Jasper Report in PDF
- 16. Font non disponibile per jvm durante la conversione di un report da jrxml in pdf
- 17. converti rdl in rdlc?
- 18. R Knitr PDF: Esiste la possibilità di salvare automaticamente i report PDF (generati da .Rmd) attraverso un ciclo?
- 19. rapporto di visualizzazione .RDLC incorporato in un file DLL
- 20. Rails Creazione di un nuovo thread o processo in background
- 21. Copia RDLC report testo e incolla nel blocco note
- 22. Report RDLC - Errore Rownumber() non può essere utilizzato nel filtro
- 23. iTextSharp creazione di un pdf da un elenco di matrici di byte
- 24. Costruire switch RDLC - C'è un altro?
- 25. Approccio più utilizzato per generare un report PDF (JavaScript, node.js)?
- 26. Crea un modulo PDF di report Jasper da JSON Object o JSON String
- 27. Creazione di un server di archiviazione file sicuro per PDF
- 28. Come si crea un report (rdlc) che mostra 1 registro per pagina
- 29. Creazione di PDF protetti da password in Objective-C
- 30. Errore di sicurezza con Report Viewer di controllo e RDLC rapporti in ASP.NET 4.0
Quindi posso solo usare un ReportViewer generica (non uno qualsiasi forma)? –
Sì. In effetti, puoi semplicemente istanziare un oggetto 'LocalReport' (usa il suo costruttore di default quindi imposta la proprietà' ReportPath' o 'ReportEmbeddedResource') e usalo da solo. È molto comune utilizzare un ReportViewer che è appena in memoria per sfruttare le funzionalità di esportazione/rendering –
Perché ottengo "La definizione del report per il report non è stata specificata"? – bipartite