Crystal报表-导出为横向和横向PDF格式;肖像

本文关键字:横向 PDF 肖像 格式 报表 Crystal | 更新日期: 2023-09-27 18:19:33

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

Crystal报表-导出为横向和横向PDF格式;肖像

  1. 将第一页导出为Portrait中的PDF
  2. 在横向中将第二页导出为PDF
  3. 使用第三方库组合两个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");
}

没有必要按照这个简单的步骤执行任何单行代码步骤:

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