Crystal Report - 在Landscape&amp ;;中导出为PDF肖像

时间:2012-01-06 14:20:13

标签: c# asp.net crystal-reports export-to-pdf

我有一份有两页的水晶报告;一个在肖像中,另一个在横向格式中。在报告中它看起来很好但是当我将它导出为PDF时,两个页面都以纵向格式导出而丢失了一些数据。谁能解决我的问题?非常感谢提前。

2 个答案:

答案 0 :(得分:4)

  1. 以纵向导出第一页为PDF
  2. 在横向
  3. 中将第二页导出为PDF
  4. 使用第三方库合并两个PDF
  5. 如果您使用的是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");
    }
    

答案 1 :(得分:1)

按照这个简单的步骤,不需要执行任何单行代码 步骤:

  1. 以纵向格式创建第一个水晶报告,这是报告的默认格式。
  2. 在横向创建第二个水晶报告。要做到这一点,你应该在第二个水晶报告设计 - >页面设置 - > orientation->选择风景
  3. 创建第三个水晶报告,作为最终报告,在第一和第二个报告中添加详细信息作为子报告。只需右键单击insert-> sub report
  4. 即可
  5. 在最终报告中,只需右键点击第二个报告的详细信息部分导出选择部分专家 - >分页 - >横向完成您的工作。
  6. 然后在您的代码中将最终报告导出为PDF。