SSRS 2008 Relatório Exportar para Imagem Exportações Apenas Primeira Página
-
21-08-2019 - |
Pergunta
Ok, então eu estou trabalhando em exportar meus SSRS 2008 Reports a uma imagem. O que eu gostaria de fazer é exportar cada página individual como uma imagem. Do meu código, eu só posso começar a exportar a primeira página do relatório. Qualquer ajuda seria muito apreciada.
Dim warnings As Microsoft.Reporting.WebForms.Warning()
Dim streamids As String()
Dim mimeType, encoding, extension As String
Dim deviceInfo As XElement = _
<DeviceInfo>
<OutputFormat>JPEG</OutputFormat>
</DeviceInfo>
Report.ServerReport.SetParameters(Parameters)
Dim bytes As Byte() = Report.ServerReport.Render("Image", deviceInfo.ToString(), mimeType, encoding, extension, streamids, warnings)
Dim FileStream As New MemoryStream(bytes)
Dim ReportImage As New System.Drawing.Bitmap(FileStream)
ReportImage.Save(Server.MapPath("/Testing.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg)
Solução
em um dos meus projetos eu uso o código a seguir para obter um fluxo por página. Infelizmente eu não usar VB.NET, mas você deve ser capaz de traduzir isso em C # para VB. Nota: Isso funciona em SSRS2005 - Não estou certo de que também funciona para SSRS2008! Além disso, estou usando o código para imprimir diretamente o relatório sem ter que usar o visualizador de relatório, então eu estou criando uma informação dispositivo EMF -. Você pode ter que mudar este
Este código base foi encontrado em algum lugar na web após pesquisando por horas - Eu gostaria de creditar o autor, mas eu não marcar a ligação -. Desculpe
CultureInfo us = new CultureInfo("en-US");
string deviceInfo = String.Format(
"<DeviceInfo>" +
" <OutputFormat>EMF</OutputFormat>" +
" <PageWidth>{0}cm</PageWidth>" +
" <PageHeight>{1}cm</PageHeight>" +
" <MarginTop>{2}cm</MarginTop>" +
" <MarginLeft>{3}cm</MarginLeft>" +
" <MarginRight>{4}cm</MarginRight>" +
" <MarginBottom>{5}cm</MarginBottom>" +
"</DeviceInfo>",
Math.Round(m_pageSize.Width, 2).ToString(us),
Math.Round(m_pageSize.Height, 2).ToString(us),
Math.Round(m_marginTop, 2).ToString(us),
Math.Round(m_marginLeft, 2).ToString(us),
Math.Round(m_marginRight, 2).ToString(us),
Math.Round(m_marginBottom, 2).ToString(us));
m_reportStreams = new List<Stream>();
try
{
// Tell SSRS to store one stream per page on server
NameValueCollection urlAccessParameters = new NameValueCollection();
urlAccessParameters.Add("rs:PersistStreams", "True");
// Render first page
Stream s = viewer.ServerReport.Render("IMAGE", deviceInfo, urlAccessParameters, out mime, out extension);
m_reportStreams.Add(s);
// Loop to get other streams
urlAccessParameters.Remove("rs:PersistStreams");
urlAccessParameters.Add("rs:GetNextStream", "True");
do
{
s = viewer.ServerReport.Render("IMAGE", deviceInfo, urlAccessParameters, out mime, out extension);
if (s.Length != 0) m_reportStreams.Add(s);
}
while (s.Length > 0);
// Now there's one stream per page - do stuff with it
}
finally
{
foreach (Stream s in m_reportStreams)
{
s.Close();
s.Dispose();
}
m_reportStreams = null;
}
Editar
Esqueceu-se de mencionar que viewer
é um exemplo de programação criado do controle ReportViewer
inicializado para processar o relatório que você está tentando imprimir / salvar.