Преобразование данных изображения RTF в простой текст (SQL Server и Dephi BDS 2006) - PullRequest
0 голосов
/ 14 марта 2011

Некоторое время боролся с этим. У нас есть старая таблица (SQL Server) с данными типа изображения. Я хочу получить текст.

Пока это то, что я сделал.

  • Попробуйте преобразовать или разыграть его (не разрешено)
  • Попробуйте перенести данные в delphi, вызвав SP (я дошел до того, что данные были назначены для варианта)
  • Заглянул в функцию RTF to text (нашел что-то здесь на SO, если бы я мог просто получить данные изображения в строку).

Это код, который у меня есть. На данный момент он привязан к нажатию кнопки (будет запущен в службе). Я думаю, что назначение отчета var не правильно, и SetString может быть не прав. Я даже не уверен, правильно ли я поступлю.

var
report: array of byte;
s: string;

begin
  ADOStoredProc1.Parameters.ParamByName('@EncounterID').Value := '7';

  ADOStoredProc1.Open;
  while not ADOStoredProc1.EOF do
  begin
    report := ADOStoredProc1.FieldByName('Report').Value;
    SetString(s, PAnsiChar(@report[0]), length(report));
    Memo1.Lines.Add(s);

    ADOStoredProc1.Next;
  end;

1 Ответ

1 голос
/ 14 марта 2011

Меня немного смущает "изображение RTF". Вы имеете в виду текст RTF? Или изображение (картинка)? Из кода я подозреваю, что бывший ...

Я не уверен, почему вы используете массив байтов, а затем немедленно помещаете его в строку.

Это должно работать так же хорошо (на самом деле, лучше, потому что он не использует Value (который является преобразованием Variant) и избегает вызова функции SetString):

while not ADOStoredProc.Eof do
begin
  Memo1.Lines.Add(ADOStoredProc1.FieldByName('Report').AsString;
  ADOStoredProc1.Next;
end;

Вы, вероятно, таким образом получите формат RTF в записке. Если вы пытаетесь удалить форматирование, вам нужно вместо этого использовать TRichEdit и использовать сообщение EM_STREAMIN для добавления содержимого, а затем использовать свойство TRichEdit.PlainText. Вот пример того, как это сделать здесь .

...