Объединение двух или более отчетов 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[]
есть ароматизаторы, которые работают с потоками или путями, и вы можете зашифровать вывод, если вам нужно.