2016年5月4日 星期三

LocalReport 報表合併後變成空白

我使用了 Local Report 產生了好幾張 PDF  報表,接著想要將他們合併成一份報表。這時,我選用了 Aspose 這工具,多年前,我曾經用過他,一直合作愉快。

「昨是而今非」,是今天最好的註解。透過 Aspose 合併後的 PDF 檔案,裡面竟然是空白的,我發誓,還沒合併前,每一份 PDF 的確是有資料的啊!

原來,我的 PDF 是透過 VS2010 所產生的,報表的產生語法如下:


byte[] tBytes = viewer.LocalReport.Render(pType, null, out tMimeType, out tEncoding, out tExtension, out tStreamids, out tWarnings);


Render() 裡的第二個參數,本應該放 deviceInfo,我原先覺得很像沒什麼好設定的,於是就簡單放了 null。在「PDF Sharp can't handle SQL Server 2008 PDF reports」文章中提到,Reporting Service 2008 之後,開始有了 HumanReadablePDF 這個參數設定,指示是否 PDF 匯出時應該被壓縮,使得檔案更容易閱讀,預設值為 False。因為我把 devideInfo 設為 null,所以 HumanReadablePDF = false。這個致命的關鍵設定,造成讓 Aspose 在合併 PDF 時,無法正確的取得原先 PDF 內容。所以,要手動去定義 HumanReadablePDF,並將它設為 true。

透過下面語法,就可以完成:
string devInfo = @"<DeviceInfo><HumanReadablePDF>True</HumanReadablePDF></DeviceInfo>";
byte[] tBytes = viewer.LocalReport.Render("PDF", devInfo, out tMimeType, out tEncoding, out tExtension, out tStreamids, out tWarnings);




參考:

01:PDF Sharp can't handle SQL Server 2008 PDF reports
02:[SQL Server 2008R2][SSRS] URL Access 報表轉譯格式設定(二)

沒有留言:

張貼留言