2014-08-28 4 views
1

Я использую функции автоматизации Word для преобразования HTML-файла с изображениями в RTF-файл.Как заставить Word вставлять изображения при преобразовании из HTML в RTF?

Проблема в том, что Word не встраивает изображения в RTF-файл, вместо этого использует INCLUDEPICTURE для ссылки на изображения извне. Эффект постукивания этого заключается в том, что элемент управления Rich Rich Windows игнорирует это ключевое слово и изображения не отображаются.

LPDISPATCH lpd = docs.Open(COleVariant(sHtmlFilename), // FileName 
        varFalse,       // ConfirmConversions 
        varFalse,       // ReadOnly 
        varFalse,       // AddToRecentFiles 
        varNull,       // PasswordDocument 
        varNull,       // PasswordTemplate 
        varTrue,       // Revert 
        varNull,       // WritePasswordDocument 
        varNull,       // WritePasswordTemplate 
        COleVariant(wdOpenFormatWebPages), // Format 
        COleVariant(msoEncodingAutoDetect), // Encoding 
        varFalse,       // Visible 
        varFalse,       // OpenAndRepair 
        varZero,       // DocumentDirection 
        varTrue,       // NoEncodingDialog 
        varNull);       // XMLTransform 


if (lpd == NULL) 
    return FALSE; 

_Document doc(lpd); 

doc.SaveAs(COleVariant(sRtfFilename),    // FileName 
       COleVariant(wdSaveFormatRTF),  // FileFormat 
       varFalse,       // LockComments 
       varNull,       // Password 
       varFalse,       // AddToRecentFiles 
       varNull,       // WritePassword 
       varFalse,       // ReadOnlyRecommended 
       varFalse,       // EmbedTrueTypeFonts 
       varFalse,       // SaveNativePictureFormat 
       varFalse,       // SaveFormsData 
       varFalse,       // SaveAsAOCELetter 
       COleVariant(msoEncodingAutoDetect), // Encoding 
       varFalse,       // InsertLineBreaks 
       varFalse,       // AllowSubstitutions 
       varOne,        // LineEnding 
       varFalse);       // AddBiDiMarks 

Мой вопрос тогда: Есть ли другие признаки в модели автоматизации, которая заставит слово вставлять изображения в формате RTF?

Примечание: В настоящее время я пытаюсь вручную вставлять изображения, после обработки RTF, но это неэлегантное и, возможно, хрупкое решение.

ответ

2

Я недавно столкнулся с той же проблемой и удалось решить это таким образом:

procedure TMWnd.UnlinkImages(ADoc: Variant); 
var 
    fCnt, sCnt, iCnt, i : Cardinal; 
    field, shape, ishape : Variant; 
begin 
    fCnt := ADoc.Fields.Count; 
    for i:=1 to fCnt do begin 
     field := ADoc.Fields.Item(i); 
     if VarIsClear(field)or VarIsClear(field.LinkFormat) then 
      Continue; 
     if field.Type <> wdFieldIncludePicture then 
      Continue; 
     field.LinkFormat.SavePictureWithDocument := True; 
     field.LinkFormat.BreakLink; 
    end; 


    sCnt := ADoc.Shapes.Count; 
    for i:=1 to sCnt do begin 
     shape := ADoc.Shapes.Item(i); 
     if VarIsNull(shape)or VarIsClear(shape.LinkFormat) then 
      continue; 
     shape.LinkFormat.SavePictureWithDocument := True; 
     shape.LinkFormat.BreakLink; 
    end; 

    iCnt := ADoc.InlineShapes.Count; 
    for i:=1 to iCnt do begin 
     ishape := ADoc.InlineShapes.Item(i); 
     if VarIsClear(ishape)or VarIsClear(ishape.LinkFormat) then 
      Continue; 
     ishape.LinkFormat.SavePictureWithDocument := True; 
     ishape.LinkFormat.BreakLink; 
    end; 
end; 

Это Delphi код, но он может быть легко адаптирована к любому языку, так как это просто вызовы методов OLE Automation.

+0

Высокий. Благодарю. Я уже много часов работал в Google. –

0

Мне нужно было перевести его на VBscript. Может быть, это кому-то будет полезно.

const wdFormatRTF=6 
Set Word = CreateObject("Word.Application") 
Word.Documents.Open("fullpathtomyfile.htm") 
set ADoc=Word.ActiveDocument 

fCnt = ADoc.Fields.Count 
for Each field In ADoc.Fields 
    field.LinkFormat.SavePictureWithDocument = True 
    field.LinkFormat.BreakLink 
next 


For Each shape In ADoc.Shapes 
    shape.LinkFormat.SavePictureWithDocument = True 
    shape.LinkFormat.BreakLink 
next 

For Each iShape In ADoc.InlineShapes 
    ishape.LinkFormat.SavePictureWithDocument = True 
    ishape.LinkFormat.BreakLink 
Next 

Word.ActiveDocument.SaveAs2 "fullpathtomyfile.rtf", wdFormatRTF 
Word.Documents.Close 
Word.Quit 

С наилучшими пожеланиями, Михал