2012-06-06 2 views
1

Dataset을 통해 루프를 만들고 Aspose.Words Mail-Merge 기능을 사용하여 항목 당 페이지를 만듭니다. 아래 코드는 Dataset을 통해 루핑하고 일부 값을 Mail-Merge Execute 함수에 전달합니다.Aspose.Words - MailMerge images

var blankDocument = new Document(); 
var pageDocument = new Document(sFilename); 
... 
foreach (DataRow row in ds.Tables[0].Rows){ 
    var sBarCode = row["BarCode"].ToString(); 
    var imageFilePath = HttpContext.Current.Server.MapPath("\\_temp\\") + sBarCode + ".png"; 

    var tempDoc = (Document)pageDocument.Clone(true); 

    var fieldNames = new string[] { "Test", "Barcode" }; 
    var fieldData = new object[] { imageFilePath, imageFilePath }; 

    tempDoc.MailMerge.Execute(fieldNames, fieldData); 

    blankDocument.AppendDocument(tempDoc, ImportFormatMode.KeepSourceFormatting); 
} 
var stream = new MemoryStream(); 
blankDocument.Save(stream, SaveFormat.Docx); 
// I then output this stream using headers, 
// to cause the browser to download the document. 

편지 병합 항목 { MERGEFIELD Test }Dataset에서 올바른 데이터를 가져옵니다. 그러나 사용하는 모든 페이지에 실제 이미지 표시 1 페이지의 이미지 : 텍스트에 c:\img1.png를 표시

c:\img1.png 
c:\img2.png 
c:\img3.png 

페이지이 문서 중 하나를

{ INCLUDEPICTURE "{MERGEFIELD Barcode }" \* MERGEFORMAT \d } 

이는 "바코드"필드에 내 데이터를 말해봐 "Test"필드. 그리고 보여지는 이미지는 img1.png입니다.

그러나 페이지 2는 c:\img2.png을 텍스트로 표시하지만 img1.png을 실제 이미지로 표시합니다.

누구에게도 통찰력이 있습니까?

편집 : 이것은 Word 문제가 더 많은 것처럼 보입니다. Word 내에서 Alt + F9 모드 사이를 전환하면 이미지에 실제로 c:\img1.png이 소스로 표시됩니다. 이것이 모든 페이지에 표시되는 이유입니다.

나는 그것을 단순화했습니다 :

{ INCLUDEPICTURE "{MERGEFIELD Barcode }" \d } 

는 또한, Word의 우편물 수신자 목록 내부의이 분야에 대한 테스트 데이터를 추가했다. 미리 볼 때 데이터를 가져 와서 이미지를 변경하지 않습니다. 그래서 이것은 근본적인 문제입니다.

답변

2

출력을 수행하는 Word 인 경우 (Aspose가 확실하지 않은 경우) 여기서 두 가지 문제가 발생할 수 있습니다.

  1. INCLUDEPICTURE은 역 슬래시가 두 배 증가 할 것으로 예상합니다. "c\\img2.png"이거나 슬래시를 사용하는 (다소 신뢰성이 떨어집니다) 또는 Mac ":" 구분 기호를 해당 플랫폼에서 사용하십시오. 데이터가 필드 결과를 통해 들어 오면 괜찮을 수도 있습니다.

  2. INCLUDEPICTURE Microsoft는 약 10 년 전에 보안상의 이유로 많은 필드 동작을 수정했기 때문에 "설계 상"자동으로 업데이트되지 않았습니다. 당신이 출력 문서에 병합하는 경우, 당신은 아마 다음과 같은 중첩 된 필드를 사용하여 해결할 수 있습니다,

    { INCLUDEPICTURE { IF TRUE "{ MERGEFIELD Barcode }" } } 
    

    또는 결과 문서에서 필드를 제거하기를

    { IF { INCLUDEPICTURE { IF TRUE "{ MERGEFIELD Barcode }" } } { 
    INCLUDEPICTURE { IF TRUE "{ MERGEFIELD Barcode }" } } } 
    

모든 { }은 보통 방법으로 Ctrl + F9으로 삽입해야합니다.
("TRUE"사용이 문서화 된 곳에서 묻지 마십시오. 알고있는 한 알 수는 없습니다.)