Объединение двух или более отчетов Crystal в один PDF

У меня есть список флажков. Если я выберу два или более значений, то CheckBoxList SelectedValues будет передаваться как параметр один за другим, и я хочу создать отчет Crystal для каждого SelectedValue в формате PDF, и я хочу объединить весь формат PDF отчета Crystal в один формат PDF. Как этого достичь? До сих пор я создал только один кристаллический отчет в формате PDF. Ниже я дал код о том, как я сгенерировал отчет Crystal в формате PDF Формат.

CrystalDecisions.CrystalReports.Engine.ReportDocument rpt =
    new CrystalDecisions.CrystalReports.Engine.ReportDocument();

string conn = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
string[] str = conn.Split(';');
string server = str[0].Substring(str[0].IndexOf(" = ") + 3);
string database = str[1].Substring(str[1].IndexOf(" = ") + 3);
string userid = str[2].Substring(str[2].IndexOf(" = ") + 3);
string password = "Welc0me";//str[3].Substring(str[3].IndexOf(" = ") + 3);

rpt.Load(Server.MapPath(RepPath));

for (int i = 0; i < rpt.DataSourceConnections.Count; i++)
{
   rpt.DataSourceConnections[i].SetConnection(server, database, userid, password);
}
// Here ReleaseID will be replaced by the CheckBoxList's SelectedValue
rpt.SetParameterValue(0, ReleaseID);  
rpt.SetParameterValue(1, false);                         
rpt.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat,
    HttpContext.Current.Response, true, "Docs Report");

но приведенный выше код предназначен только для создания одного отчета pdf за раз. Но я хочу передать каждый CheckBoxList selectedvalue в качестве параметра. Например, если я выбрал три значения, то отчет Crystal должен содержать все три отчета Crystal для соответствующего SelectedValue по одному. Как объединить весь отчет PDF Crystal в Единый кристаллический отчет. Я должен решить эту проблему. Пожалуйста, помогите мне.

4 ответов


Crystal Reports являются означает для создания одной страницы на запись. Вам просто нужно установить источник данных с несколькими строками данных, установить этот источник данных для вашего отчета и экспортировать его в pdf напрямую (уже "объединенный").

прежде всего, вы должны создать источник данных с вашими данными. Например, можно создать набор данных с помощью конструктора Visual Studio. Подробнее здесь.

затем вы должны задать источник данных для отчета Crystal. Вы можете сделать это с помощью Crystal designer.

затем во время выполнения вам просто нужно заполнить rpt данными, связанными со всеми выбранными флажками, и экспортировать его в pdf. Внутри .файл rpt создайте группу в определенном столбце, связанном с флажками с параметром "разрыв страницы после", установленным в группе. Это создаст один Pdf-файл, содержащий все ваши записи, по 1 на страницу.

вот пример кода:

            using (var reportDocument = new ReportDocument())
        {
            var datasource = new Datasource { EnforceConstraints = false };

            var adapter = new adoTableAdapter { Connection = ConfigurationManager.ConnectionStrings["ConnectionString"]) };
            adapter.Fill(datasource.ado);

            reportDocument.Load(RptPath);
            reportDocument.SetDataSource(datasource);

            PageMargins myMargins = reportDocument.PrintOptions.PageMargins;
            myMargins.topMargin = Settings.Default.DefaultTopMargin;
            myMargins.leftMargin = Settings.Default.DefaultLeftMargin;
            reportDocument.PrintOptions.ApplyPageMargins(myMargins);
            reportDocument.PrintOptions.PaperSize = PaperSize.PaperA5;
            reportDocument.PrintOptions.PaperOrientation = PaperOrientation.Landscape;

            reportDocument.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
            reportDocument.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
            reportDocument.ExportOptions.DestinationOptions = new DiskFileDestinationOptions { DiskFileName = PdfFilename };
            reportDocument.ExportOptions.FormatOptions = new PdfRtfWordFormatOptions();

            reportDocument.Export();
        }

в этом коде dsEtiqueta является ADO datasource, RptPath путь к *.файл отчета rpt и имя файла pdf генерируются с помощью timeSpan. Это то, что мне нужно в моем проекте, но не стесняйтесь, чтобы адаптировать его к вашим потребностям.

Edit: сделано с CR для VS 2010.


плохие новости: ни .Net, ни Crystal не поддерживают слияние PDF-файлов.

Хорошие Новости: Использовать ExportToStream вместо ExportToHttpResponse для записи каждого отчета в собственный поток памяти. Затем используйте стороннюю библиотеку, чтобы объединить два PDF-файла в один.

вот некоторые библиотеки с открытым исходным кодом:http://csharp-source.net/open-source/pdf-libraries. Существует также много коммерческих библиотек, одна из которых DynamicPDF


Кристалла не может этого сделать. Однако вы можете экспортировать Crystal в поток памяти, а затем использовать этот сайт, чтобы узнать, как их объединить:http://www.codeproject.com/KB/files/SimplePdfMerger.aspx


вы можете сделать это с помощью Atalasoft dotImage (отказ от ответственности - я работаю на Atalasoft и написал большинство инструментов PDF, включая этот). На самом деле, это буквально однострочный:

PdfDocument.Combine(outputFile, intputFile1, intputFile2, ...);  // the signature uses params string[]

есть ароматизаторы, которые работают с потоками или путями, и вы можете зашифровать вывод, если вам нужно.