2015-04-28 78 views
0

美好的一天,Crystal報告徽標圖像並未全部顯示在報告中

我有一個控制檯應用程序,它有一個包含圖像的水晶報告。我將使用exporttostream運行報告並將導出的報告存儲在sqlserver 2012中的varbinary字段中。然後,我將選擇這些報告的批處理,並使用itextsharp將它們連接成1個pdf文件。報告上的徽標顯示在一些頁面上並非全部。任何想法,爲什麼這可能會發生。運行此應用程序時,我也使用並行處理(Parallel.For)。 任何想法,爲什麼這可能會發生?或者在報告中嵌入此圖像以便始終顯示的最佳方式是什麼? 我試着運行相同的代碼,但只有1個並行進程(即將按順序執行),並且所有圖像都出現在pdf中。爲什麼並列處理不能正確渲染圖像? 在此先感謝

******編輯****** 代碼的PDF文件拼接

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'實例之前關閉'Document' *。現在我們可以看到你的代碼,但我們仍然不知道什麼是錯的。你在談論的標誌在哪裏?由於iText之外的某些原因,它們可能不在任何地方。有沒有辦法可以提供[SSCCE](http://sscce.org)? –

回答

0

感謝所有的答覆。該徽標以某種方式添加爲OLE對象。我將該徽標添加爲圖片,並將jpg徽標文件放置在項目的圖像文件夾中,並運行該過程,現在似乎可以工作。感謝您的協助