Печать ServerReport без предварительного просмотра

Вы можете создать матрицу, повторяющую массив K раз, а затем использовать numpy's cumprod ()

result = np.cumprod([arr,]*k,axis=0)

Если вы не используете numpy, обычный список Python может сделать то же самое, используя метод накопления из itertools.

result = accumulate( ([arr]*k), func=lambda a,b: [x*y for x,y in zip(a,b)])

Это будет намного медленнее, чем при использовании numpy.

примечание: накопление возвращает итератор, вы можете превратить его обратно в список с помощью list(result)

10
задан Joel Coehoorn 20 May 2009 в 19:19
поделиться

4 ответа

Хорошо, Наконец вычисленный.

проверьте эту ссылку: Отчеты Printing Reporting Services 2005 года

То сообщение в блоге имеет почти все, в чем я нуждался, но я собираюсь отправить полный ответ здесь для ссылок.

Я закончил тем, что использовал объект средства просмотра отчета негласно, но только для удобства, так как это не требуется.

Первый шаг просит у пользователя параметры принтера:

Dim doc As New Printing.PrintDocument()
AddHandler doc.PrintPage, AddressOf PrintPageHandler
Dim dialog As New PrintDialog()
dialog.Document = doc
Dim print As DialogResult
print = dialog.ShowDialog()
doc.PrinterSettings = dialog.PrinterSettings

Имея это, мы продолжаем настраивать наш вызов отчета: Изменяя эту строку, можно добраться для печати на любом формате бумаги и любой ориентации (переключающий высоту и ширину для среды), но сам отчет должен быть настроен в том же макете страницы.

Dim deviceInfo As String = _
"<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>"

Dim warnings() As Warning
Dim streamids() As String
Dim mimeType, encoding, filenameExtension, path As String
mimeType = "" : encoding = "" : filenameExtension = ""

Наконец, мы представляем отчет со всеми его страницами.

Обратите внимание, что, если отчет имеет только одну страницу, renderStream метод никогда не используется.

rpt_control является управлением средством просмотра отчета, ранее настроенным и стремление к отчету о сервере.

Обратите внимание также, что в этом коде мы добавляем страницы к списку. Этот список является глобальной переменной, так как он необходим в методе PrintPageHandler.

Dim data() As Byte
rpt_control.ServerReport.SetParameters(_parametros)
data = rpt_control.ServerReport.Render("Image", deviceInfo, mimeType, encoding, filenameExtension, streamids, warnings)
pages.Add(New Metafile(New MemoryStream(data)))

For Each pageName As String In streamids
    data = rpt_control.ServerReport.RenderStream("Image", pageName, deviceInfo, mimeType, encoding)
    pages.Add(New Metafile(New MemoryStream(data)))
Next
doc.Print()

До сих пор мы не сделали никакой печати вообще, это на самом деле обрабатывается методом PrintPageHandler, на который мы сослались ранее.

Dim pages As New List(Of Metafile)
Dim pageIndex As Integer = 0
Private Sub PrintPageHandler(ByVal sender As Object, ByVal e As PrintPageEventArgs)
    Dim page As Metafile = pages(pageIndex)
    pageIndex += 1
    e.Graphics.DrawImage(page, 0, 0, page.Width, page.Height)
    e.HasMorePages = pageIndex < pages.Count
End Sub
11
ответ дан 3 December 2019 в 23:51
поделиться

Я вижу этот образец, но не знаю, удовлетворяет ли он Вашим потребностям: http://www.gotreportviewer.com/EMFPrint.zip

0
ответ дан 3 December 2019 в 23:51
поделиться

2 предостережения к ответу, данному Дэвидом выше: -

1) Порядок, в котором метки потоков возвращаются на SQL2005, обычно от второй страницы до последней, но на при сильно загруженных станках (например, в производственной среде) они вполне могут быть возвращены в произвольном порядке.

Идентификаторы потоков имеют вид <имя_отчета> _nn, где nn - число. Это усложняет сортировку, так как название отчета будет буквенным, а числа - лишь краткой формой, поэтому страница «myreport_2» будет отсортирована после страницы «myreport_10». Подводя к моему второму предостережению

2) В SQL 2005 суффиксы отчета начинаются с 2, в SQL 2008 они начинаются с 1 (для страницы 2)

1
ответ дан 3 December 2019 в 23:51
поделиться

Люди, пытающиеся использовать этот код с SQL Server 2008 R2, обнаружат, что он печатает только первую страницу многостраничных отчетов. Есть новое «поведение», при котором массив, возвращаемый в streamids, пуст. Сообщите Microsoft, что вам не все равно:

https://connect.microsoft.com/SQLServer/feedback/details/573997/with-ssrs-2008-r2-microsoft-reporting-winforms-serverreport-render-method-returns -no-stream-identifiers-for-image-format #

1
ответ дан 3 December 2019 в 23:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: