2011-05-31 64 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。但这不是最好的做法。