2012-07-20 2 views
0

저는 템플릿 렌더링을위한 기존의 단어 자동화 기반 시스템을 대체하기 위해 프로토 타입을 연구 중이며 현재 OpenXML SDK를 평가하고 있습니다. 템플릿 라이브러리는 상당히 광범위하며 (비 기술적 리소스로 유지되는 150-200 개의 템플릿), 1997-2003 단어 형식에서 업그레이드하는 것 외에 템플릿 변경을 피하기를 희망합니다.API 및 텍스트 조작을 통해 OpenXML Word 문서 수정

현재 삽입 된 태그는 때때로 텍스트로 교체해야하며 경우에 따라 이미지/차트/etc ...로 교체해야합니다 (삽입하기 전에 모든 차트를 이미지로 렌더링한다고 가정).

this MSDN article에 설명 된 것과 유사한 기술을 사용하여 스트레이트 텍스트를 바꿀 수 있습니다. 내 시나리오는 조금 더 복잡하지만,이 같은 외모 : 나는 기본 문서가 그래서 정상적인 API를 통해 이미지를 추가 할 수 최신 상태로 유지하기를 원하기 때문에

public void ReplaceFirstOccurrenceWithText(string tagBody, string replacement) 
    { 
     var modifiedText = GetCurrentText(); 
     modifiedText = modifiedText.ReplaceFirst(tagBody, XmlEncoder.Encode(replacement)); 
     using (var sw = new StreamWriter(document.MainDocumentPart.GetStream(FileMode.Create))) 
     { 
      sw.Write(modifiedText); 
     } 
    } 

    public string GetCurrentText() 
    { 
     using(var reader = new StreamReader(document.MainDocumentPart.GetStream())) 
     { 
      return reader.ReadToEnd(); 
     } 
    } 

내가 문자열을 저장하지 않는 이유입니다. ImageInserter가 그 기사 (나는 이러한 추상화를 실현에 그대로 코드의 복사/붙여 넣기입니다

public void ReplaceFirstOccurrenceWithImage(string tagBody, byte[] replacement) 
    { 
     ReplaceFirstOccurrenceWithText(tagBody, "IMAGE TAG WAS HERE!"); 
     var main = document.MainDocumentPart; 
     var imagePart = main.AddImagePart(ImagePartType.Gif);//sniff this by loading bytes into a bitmap 
     using(var imageStream = new MemoryStream(replacement)) 
     { 
      imagePart.FeedData(imageStream); 
     } 

     ImageInserter.AddImageToBody(document, main.GetIdOfPart(imagePart)); 
    } 

이 최고 아니지만 난 그냥이에서 일을 아무것도를 얻으려고

: another MSDN article에 설명 된 기술을 사용하여 포인트).

이제는 털이 나기 시작합니다. 문서가 동기화 상태를 유지하고 있습니다. 이미지는 문서의 맨 아래에 이미지를 추가하는 것처럼 교체 된 첫 번째 태그이며 태그의 텍스트 대체가 작동합니다. 내 문제는 이후의 텍스트 대체가이 시점 이후에 전혀 작동하지 않는 것 같습니다. 다른 모든 태그는 문서에 남아 있습니다. 그러나 텍스트 바꾸기 함수에서 중단 점을 설정하면 .GetCurrentText()를 호출 할 때마다 올바른 결과 (해당 점까지 태그가 대체 된 텍스트)가 반환됩니다. 그러나 문서를 저장하면 첫 번째 대체 작업 만 수행되어 저장됩니다.

누구나 이런 사람이 있습니까? 다음 단계는 단계적 접근 방식을 시도하는 것입니다 (모든 태그를 해결하고 먼저 텍스트를 대체하고 모든 이미지를 대체합니다).하지만 현재 주문에 관계없이 문제가 남아있는 것처럼 느껴집니다. 내가 어디 내가

http://docx.codeplex.com

로 보일 것이다 경우

답변

3

의 더 정직하고 일반 물건 .. 어쩌면 당신은 더 복잡한 일을하는 많은 다음 라이브러리는 처리 할 수 ​​있지만 데프 걸릴 것 그것을 봐라.

+0

감사합니다. 더 복잡한 시나리오를 처리하지 못할 수도 있습니다. (아직 문서의 올바른 위치에 그림을 삽입하지 못했지만) 확실히 조사 할 가치가 있습니다. 적어도 OpenXML API에서 내 머리를 두드리는 순간부터 나에게 휴식을 줄 것입니다. – AlexCuse

+0

OpenXML API는 짐승입니다. –

+0

예, 읽었을 때 텍스트 교체 작업을 DocX에서 사용할 수있었습니다. * 이미지 작업에 대한 확인 지원을 받으려면 손가락이 엇갈 려져 작동합니다. QA 문제로 인해 나는 여전히 aspose를 선호하고있다. (시간이 지남에 따라 템플릿을 업그레이드 할 수있게 해줄 것이다.) 그러나 이것과 같은 괜찮은 래퍼가있어서 기쁩니다! – AlexCuse