Estoy ejecutando un proceso de fin de mes y quiero que cree automáticamente algunos de los informes que deben crearse en ese momento. Estoy usando informes rdlc. ¿Hay alguna forma de crear automáticamente un PDF desde un informe RDLC en segundo plano?Creación de un PDF a partir de un Informe RDLC en segundo plano
Respuesta
Esto es fácil de hacer, puede representar el informe como un PDF y guardar el conjunto de bytes resultante como un archivo PDF en el disco. Para hacer esto en segundo plano, se trata más bien de cómo se escribe su aplicación. Puede simplemente hacer girar un nuevo hilo, o utilizar un BackgroundWorker (si se trata de una aplicación de WinForms), etc. Allí, por supuesto, puede haber problemas de subprocesamiento múltiple para tener en cuenta.
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);
}
Puede utilizar siguiente código que generan archivos PDF en segundo plano como al igual que el botón de clic y luego se emergente en brwoser con GuardarComo y la opción de cancelar.
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();
¿has intentado enviar los parámetros? seguí recibiendo: 'Ha ocurrido un error durante Microsoft.Reporting.WebForms.LocalReport.EnsureExecutionSession informe processing.at local() en Microsoft.Reporting.WebForms.LocalReport.SetParameters (IEnumerable \' 1 Parámetros) ' – Rajan
El siguiente código funciona bien, de seguro, gracias por los comentarios anteriores. Puede añadir visor de informes y cambiar lo visible = false y utilizar el código de abajo en botón de envío:
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();
}
Usted no necesita tener un control ReportViewer en cualquier lugar - se puede crear el LocalReport sobre la marcha:
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();
También puede agregar parámetros: (lr.SetParameter())
, subinformes de controles: (lr.SubreportProcessing+=YourHandler)
, o casi cualquier cosa que se le ocurra.
Necesitamos informe espectador si quiere obtener un archivo pdf formateado. Digamos por ejemplo ... necesito obtener una réplica exacta de mi página web en formato inclinado, color y visualización, luego necesito crear primero una plantilla y luego llenarla con un conjunto de datos. – 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);
}
}
Usted puede instanciar 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. Crear un parámetro en el informe rdlc
- 2. Cómo mostrar imágenes en un informe RDLC
- 3. Generar un informe en PDF a partir de un archivo Excel generado (Biblioteca EPPLUS)
- 4. Renderizar un informe RDLC en HTML en ASP.NET MVC
- 5. ¿Cómo limitar el informe de RDLC para una página en un PDF?
- 6. Informe (RDLC) Localización/globalización
- 7. Rieles Creación de nuevo subproceso o proceso en segundo plano
- 8. Páginas vacías en RDLC-Informe
- 9. Creación automatizada de PDF a partir de la dirección URL
- 10. Creación de un relleno de degradado en un archivo PDF mediante el informe
- 11. Proyecto de referencia en RDLC ReportViewer Informe
- 12. Agregar un DataSet existente a Report .rdlc
- 13. php ejecutar un proceso en segundo plano
- 14. Mostrar el informe .RDLC incrustado en un archivo DLL
- 15. RDLC Imagen incrustada distorsionada en PDF
- 16. Enviar comando a un proceso en segundo plano
- 17. Creación de un informe FxCop legible
- 18. Pasar parámetros de informe a informe integrado en VS 2010 RDLC
- 19. Cómo incrustar una fuente en un PDF con RDLC
- 20. Visualizar un PDF a partir de Reporting Services
- 21. Alinee la imagen a la derecha en el informe RDLC
- 22. iOS procesado en segundo plano
- 23. Depurando tareas en segundo plano
- 24. ¿Genera un proceso en segundo plano en Ruby en Windows?
- 25. ¿Cómo generar un PDF a partir de una definición de informe incrustado sin servidor o interfaz de usuario?
- 26. ¿Cómo se inicia un proceso en segundo plano en Perl?
- 27. ¿Cómo ejecuté() un proceso en segundo plano en C?
- 28. Cómo crear campos PDF editables en un informe de Jasper
- 29. Llamadas de red en segundo plano: iOS
- 30. Inicie un proceso en segundo plano en Linux con C
Así que no sólo tiene que utilizar un ReportViewer genérica (no uno en cualquier forma)? –
Sí. De hecho, puede crear una instancia de un objeto 'LocalReport' (usar su constructor predeterminado luego establecer la propiedad' ReportPath' o 'ReportEmbeddedResource') y usarlo por sí mismo. Es muy común usar un ReportViewer que está solo en la memoria para aprovechar sus capacidades de exportación/renderizado –
¿Por qué obtengo "No se ha especificado la definición del informe para el informe"? – bipartite