Crystal Report - экспорт в PDF в альбомной и книжной ориентации - PullRequest
1 голос
/ 06 января 2012

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

Ответы [ 2 ]

4 голосов
/ 30 июня 2012
  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");
}
1 голос
/ 19 июня 2015

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

  1. Создайте первый отчет Crystal в формате Portrait, и это формат отчета по умолчанию.
  2. Создание второго отчета о кристалле в альбомной ориентации.Чтобы сделать это, вы должны прямо во втором отчете о кристаллах Дизайн-> Настройка страницы-> Ориентация-> Выбрать ландшафт
  3. Создать третий отчет о кристаллах, который является окончательным отчетом, в котором подробно описан раздел первого и второго отчета.как подотчет.Просто щелкните правой кнопкой мыши на вставке-> подотчет
  4. В итоговом отчете просто щелкните правой кнопкой мыши на разделе экспорта в подробном разделе второго отчета, выберите раздел expert-> paging-> landscape ваша работа выполнена.
  5. Затем экспортируйте этот окончательный отчет в PDF в своем коде.
...