我有一个有两页的水晶报告;一个是纵向的,第二个是横向的。在报告中看起来不错,但是当我将其导出为 PDF 时,两个页面都以纵向格式导出,丢失了一些数据。谁能解决我的问题?提前谢谢了。
问问题
3703 次
2 回答
4
- 以纵向 PDF 格式导出第一页
- 在横向中将第二页导出为 PDF
- 使用第三方库合并两个 PDF
这有点棘手,如果您使用的是 ExportToStream 因为主要的公共是
report.ExportToStream(ExportFormatType formatType)
它忽略了 FormatOptions。相反,您将需要使用
report.FormatEngine.ExportToStream(ExportRequestContext reqContext)
这段代码应该做你想做的(使用 PdfSharp 结合):
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
...
using (var report = new ReportClass { FileName = Server.MapPath("/Crystal/Reports/DosBatches.rpt") })
{
report.Load();
/* set data source connections */
/* set parameters */
// export the first page
report.PrintOptions.PaperOrientation = PaperOrientation.Portrait;
var exportOptions1 = new ExportOptions
{
ExportFormatType = ExportFormatType.PortableDocFormat,
FormatOptions = new PdfFormatOptions { UsePageRange = true, FirstPageNumber = 1, LastPageNumber = 1 }
};
exportRequestContext.ExportInfo = exportOptions1;
var stream1 = report.FormatEngine.ExportToStream(exportRequestContext);
stream1.Seek(0, SeekOrigin.Begin);
// export the second page
report.PrintOptions.PaperOrientation = PaperOrientation.Landscape;
var exportOptions2 = new ExportOptions
{
ExportFormatType = ExportFormatType.PortableDocFormat,
FormatOptions = new PdfFormatOptions { UsePageRange = true, FirstPageNumber = 2, LastPageNumber = 2 }
};
exportRequestContext.ExportInfo = exportOptions2;
var stream2 = report.FormatEngine.ExportToStream(exportRequestContext);
stream2.Seek(0, SeekOrigin.Begin);
// merge the two PDF streams
var combinedPdf = new PdfDocument();
foreach (PdfPage page in PdfReader.Open(stream1, PdfDocumentOpenMode.Import).Pages)
combinedPdf.AddPage(page);
foreach (PdfPage page in PdfReader.Open(stream2, PdfDocumentOpenMode.Import).Pages)
combinedPdf.AddPage(page);
// probably not the most efficient, but works
var output = new MemoryStream();
combinedPdf.Save(output, false);
return new FileStreamResult(output, "application/pdf");
}
于 2012-06-29T21:29:14.727 回答
1
无需按照这个简单的步骤执行任何单行代码:
- 以纵向格式创建第一个水晶报表,这是报表的默认格式。
- 在横向创建第二个水晶报表。为此,您应该在第二个水晶报表设计->页面设置->方向->选择横向
- 创建第三个水晶报表,即最终报表,在其中添加详细部分第一和第二个报表作为子报表。只需右键单击插入->子报告
- 在最终报告中,只需右键单击第二个报告的详细信息部分的部分导出,选择部分专家->分页->景观,您的工作就完成了。
- 然后在您的代码中将该最终报告导出为 PDF。
于 2015-06-19T06:47:31.470 回答