2011-05-31 65 views
0

我有文本塊從PDF文檔閱讀,使用iTextSharp的庫(方法:GetResultantText())C#StringBuilder的:堅持一個StringBuilder對象轉換爲VARCHAR列 - SQL服務器

考慮文本概述/格式化段:

* 「第一個

第二款 ...

段落ñ 。」 *

有沒有辦法使用C#StringBuilder對象,或者可能的替代方法來存儲文本,同時保留fomatting ?:包含回車和段落等,並將值存儲在SQL Server 08中的一個varchar字段中

最終,我打算將文本存儲到varchar字段中,並希望保留換行符,回車[basic fomatting metadata],否則提取的文本是一個單獨的文本塊,它在呈現時不可讀。

我認爲調用StringBulder對象上的toString()方法會刪除文本中的所有中間格式化字符,而不是終止[newlinecharacter]。

SimpleTextExtractionStrategy strategy; 
      //StreamWriter writer = new StreamWriter("c:\\pdfOutput.txt"); 

      for (int i = 1; i <= reader.NumberOfPages; i++) 
      { 
       try 
       { 
        strategy = parser.ProcessContent(i, new SimpleTextExtractionStrategy()); 
        buffer.AppendLine(strategy.GetResultantText()); 
        //writer.WriteLine(strategy.GetResultantText()); 
       } 
       catch (IndexOutOfRangeException e) { } 
      } 

      pdfText = buffer.ToString(); 
      Console.WriteLine("* End: Text Extraction Process ..."); 
      return pdfText = buffer.ToString(); 

如果我取消註釋並輸出到文本文件,則會保留該格式。 但是如果我保存生成的文本和實體定義爲:我得到的是一個單獨的文字塊:

[System.Data.Linq.Mapping.Table(Name = "ReportsText")] 
    public class ReportsText 
    { 
     [Column (IsDbGenerated = true, AutoSync=AutoSync.OnInsert)] 
     public int ID { get; set; } 

     [Column(IsPrimaryKey = true, AutoSync = AutoSync.OnInsert)] 
     public String image { get; set; } 

     [Column] public String announcement { get; set; } 
    } 

所以pdfText是inteded被存儲到annouuncement領域。乾杯。

+0

我不認爲格式化會消失... – soandos 2011-05-31 05:06:46

回答

2

我不認爲它應該刪除格式,如果它這樣做在每個段落之後使用「\r\n」並存儲它。

+0

事實證明格式化「\ r \ n」確實通過從表中獲取值並調用Console.writeline()來保持驗證狀態。最初我是從SQL Server Management Studio複製價值directoy並粘貼到文本文件中 - 這不是正確的驗證方式。謝謝。 – Terman 2011-06-01 04:43:41

1

您正確地說,使用StringBuilder本身會刪除格式並僅保留換行符。如果你真的想將一個帶有格式化信息的字符串存儲到數據庫中,我建議把它存儲爲一個預定義的格式 - 比如XML,RTF或者甚至HTML,然後以相同的方式檢索它以便被送到iTextSharp。

我能想到的另一種方式是直接生成PDF,然後將二進制流存儲爲數據庫,如nText或clob。但這不是最好的做法。