Crystal Report — экспорт в PDF как в альбомной, так и в портретной ориентации

У меня есть кристальный отчет, состоящий из двух страниц; один в портретном, а второй в альбомном формате. В отчете все выглядит нормально, но когда я экспортирую его в PDF, обе страницы экспортируются в портретный формат, теряя часть данных. Кто-нибудь может решить мою проблему? Спасибо заранее.


person ASr..    schedule 06.01.2012    source источник


Ответы (2)


Нет необходимости выполнять какую-либо одну строку кода, следуя этому простому шагу:

  1. Создайте первый кристаллический отчет в портретном формате, и это формат отчета по умолчанию.
  2. Создайте второй кристаллический отчет в альбомной ориентации. Для этого вам нужно прямо во втором кристаллическом отчете Дизайн->Настройка страницы->ориентация->выбрать альбомную ориентацию
  3. Создайте третий кристаллический отчет, который является окончательным отчетом, в этом первом разделе подробностей и втором отчете добавьте в качестве подотчета. Просто щелкните правой кнопкой мыши вставить-> подчиненный отчет
  4. В итоговом отчете просто щелкните правой кнопкой мыши раздел «Экспорт» в разделе подробностей второго отчета, выберите раздел «Эксперт» -> «Пейджинг» -> «Пейджинг». Ваша работа выполнена.
  5. Затем экспортируйте этот окончательный отчет в PDF в своем коде.
person Rahul Salgar    schedule 19.06.2015

  1. Экспорт первой страницы в формате 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");
}
person arserbin3    schedule 29.06.2012