2015-04-28 2 views
0

Good Day,Crystal report logo image не отображается все время в отчете

У меня есть консольное приложение, в котором есть хрустальный отчет с изображением. Я запустил отчет с использованием exporttostream и сохранил экспортированный отчет в поле varbinary в sqlserver 2012. Затем я выберу партии этих отчетов и объединим их в 1 файл pdf, используя itextsharp. Логотип на отчете показывает на некоторых страницах не все. Любые идеи, почему это может произойти. Я также использую параллельную обработку (Parallel.For) при запуске этого приложения. Любые идеи, почему это может произойти? или какой лучший способ заставить это изображение, встроенное в отчет, всегда показывать? Я попытался запустить тот же код, но только с одним процессом parrallel (т. Е. Будет выполняться последовательно), и все изображения появятся в pdf. Почему обработка паралелей не обеспечивает правильное отображение изображений? Заранее спасибо

****** ****** редактировать код для конкатенации PDFs

Document document = null; 

for (int i=1; i <= numbatches;i++) 
{ 

    String printer_file_prefix = dll.Print.getPrinterFilePrefix(connectionString, bill_type_id.ToString()); 
    batchnumberpadded = i.ToString(); 
    batchnumberpadded = batchnumberpadded.PadLeft(3, '0'); 

    printerfilename = printer_file_prefix + oneup_number + batch_id + batchnumberpadded;//eg D_G123456CUST001 

    BatchPrintFilePath = Globals.printer_filelocation_prefix + printerfilename + ".pdf"; 

    document = new Document(PageSize.A4); 
    PdfCopy copy = new PdfCopy(document, new FileStream(BatchPrintFilePath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)); 
    document.Open(); 

    using (SqlConnection sconn = new SqlConnection(connectionString)) 
    { 

     using (SqlCommand cmd = new SqlCommand("spGetPrinterFiles", sconn)) 
     { 

      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@batch_num", i); 
      cmd.Parameters.AddWithValue("@maximumRows",Globals.print_batch); 
      cmd.Parameters.AddWithValue("@archive_process_instance_no", archive_process_instance_no); 
      cmd.Parameters.AddWithValue("@batch_id", @batch_id); 

      sconn.Open(); 
      using (SqlDataReader dr = cmd.ExecuteReader(System.Data.CommandBehavior.Default)) 
      { 

       while (dr.Read()) 
       { 
        copy.AddDocument(new PdfReader((byte[])dr.GetValue(0))); 
       } 

       dr.Close(); 
       sconn.Close(); 
      } 
      sconn.Close(); 
     } 
    } 

    if (copy != null) 
     copy.Close(); 
    if (document.IsOpen()) 
     document.Close(); 


}//end for 
+0

Просьба пояснить: как вы объединяете файлы? Есть много * очень плохих * примеров, которые используют 'Document' и' PdfWriter' (что, очевидно, неверно) вместо использования 'PdfCopy' или' PdfSmartCopy' (это правильный путь). Этот вопрос невозможен, если вы не предоставляете больше данных. –

+0

Извините, что я отредактировал мой вопрос. Я не знал, что может вызвать проблему, поэтому не знал, какие части кода помогут – CoDeGiRl

+0

Начните с удаления 'copy.Close()'. Если вы хотите сохранить эту строку, закройте «Документ» перед закрытием экземпляра «PdfCopy». Теперь мы можем видеть ваш код, но мы все еще не знаем, что случилось. Где находятся логотипы, о которых вы говорите? Может быть, их нет нигде по какой-то причине вне iText. Есть ли способ предоставить [SSCCE] (http://sscce.org)? –

ответ

0

Спасибо за все ответы. Логотип был как-то добавлен как объект OLE. Я добавил логотип в качестве изображения и разместил файл логотипа jpg в папке с изображениями в проекте и выполнил этот процесс, и теперь он работает. Благодарим за помощь.

Смежные вопросы