我有一份报告,我需要多次运行并另存为PDF。我目前正在以编程方式生成报告,但希望保存报告,而无需用户每次都手动选择保存选项。
我用来将单个报告呈现为PDF的代码是:
Dim warnings As Microsoft.Reporting.WebForms.Warning() = Nothing
Dim streamids As String() = Nothing
Dim mimeType As String = Nothing
Dim encoding As String = Nothing
Dim extension As String = Nothing
Dim deviceInfo As String
Dim bytes As Byte()
Dim lr As New Microsoft.Reporting.WebForms.LocalReport
deviceInfo = "<DeviceInfo><SimplePageHeaders>True</SimplePageHeaders></DeviceInfo>"
bytes = ReportViewer1.LocalReport.Render("PDF", deviceInfo, mimeType, encoding, extension, streamids, warnings)
Response.ClearContent()
Response.ClearHeaders()
Response.ContentType = "application/pdf"
Response.BinaryWrite(bytes)
Response.Flush()
Response.Close()
我想我可以在循环中运行它并且每次都保存PDF。
答案 0 :(得分:6)
你在这里有什么问题?它不起作用吗?
这是我们在2005年所做的事情的一个例子。我们定义了一个名为rptViewer1的控件,它可以根据您的需要显示或不显示。 strFormat应包含“PDF”和strNomFicher的完整路径。
顺便说一句,变量名称和函数都是法语,但无论如何都会有效:)
Public Sub CreerFichierRapport(ByVal strNomFichier As String, ByVal strFormat As String) Dim bytes() As Byte Dim strDeviceInfo As String = "" Dim strMimeType As String = "" Dim strEncoding As String = "" Dim strExtension As String = "" Dim strStreams() As String Dim warnings() As Warning Dim oFileStream As FileStream _stream = New List(Of Stream) Try bytes = rptViewer1.LocalReport.Render(strFormat, strDeviceInfo, strMimeType, strEncoding, strExtension, strStreams, warnings) oFileStream = New FileStream(strNomFichier, FileMode.Create) oFileStream.Write(bytes, 0, bytes.Length) _stream.Add(oFileStream) Finally If Not IsNothing(oFileStream) Then oFileStream.Close() oFileStream.Dispose() End If End Try End Sub
答案 1 :(得分:5)
大卫的回答对我很有帮助。我想我会发布这个代码的简化和(略)翻译版本,因为原文包含一些法语,还有一些不相关的参考文献:
Imports Microsoft.Reporting.WebForms
Imports System.IO
Public Class RenderToPDF
Public Sub Save(ByVal viewer As ReportViewer, ByVal savePath As String)
Dim Bytes() As Byte = viewer.LocalReport.Render("PDF", "", Nothing, Nothing, Nothing, Nothing, Nothing)
Using Stream As New FileStream(savePath, FileMode.Create)
Stream.Write(Bytes, 0, Bytes.Length)
End Using
End Sub
End Class
答案 2 :(得分:0)
dt = c.ds.Tables["vt5"];
ReportViewer1.Visible = true;
ReportViewer1.LocalReport.ReportPath = "InvoiceSGST.rdlc";
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("Invoice", dt));
ReportDataSource rds = new ReportDataSource("Invoice", dt);
this.ReportViewer1.LocalReport.EnableExternalImages = true;
ReportViewer1.LocalReport.Refresh();
// Variables
Warning[] warnings;
string[] streamIds;
string mimeType = string.Empty;
string encoding = string.Empty;
string extension = string.Empty;
ReportViewer viewer = new ReportViewer();
viewer.ProcessingMode = ProcessingMode.Local;
viewer.LocalReport.ReportPath = "InvoiceSGST.rdlc";
viewer.LocalReport.DataSources.Add(rds); // Add datasource here
viewer.LocalReport.EnableExternalImages = true;
byte[] bytes = viewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings);
if (bytes != null)
{
Response.ContentType = "application/pdf";
Response.AddHeader("content-length", bytes.Length.ToString());
Response.BinaryWrite(bytes);
string strFilePath = @"C:\Temp\";
string strFileName = "Blah.PDF";
string filename = Path.Combine(strFilePath, strFileName);
using (FileStream fs = new FileStream(filename, FileMode.Create))
{
fs.Write(bytes, 0, bytes.Length);
}
}