2017-07-25 64 views
1

我使用一個dll創建方法生成我的邏輯基礎上所傳遞的參數來創建一個段落:OpenXML的怪異行爲與字體大小

例如在我的C#代碼,我有這樣的:

// document permission title 
    DocRun accessTypeTitle = new DocRun(); 
    Run permissionTitle = accessTypeTitle.createParagraph("DOCUMENT ACCESS", PARAGRAPHCOLOR,FONTSIZETEXT,DEFAULTFONT); 

我有我對我的DLL方法,做邏輯:

public class DocRun 
    { 
     public Run createParagraph(String text, String colorVal, String fontSize,String font) 
     { 
      Run run = new Run() { RsidRunProperties = "00C53974" }; 

      RunProperties runProperties = new RunProperties(); 
      RunFonts runFonts = new RunFonts() { Ascii = font, HighAnsi = font, EastAsia = "Segoe UI", ComplexScript = font }; 
      Color color = new Color() { Val = colorVal }; 
      //Kern kern = new Kern() { Val = (UInt32Value)24U }; 
      FontSize fontSize11 = new FontSize() { Val = fontSize }; 
      FontSizeComplexScript fontSizeComplexScript11 = new FontSizeComplexScript() { Val = fontSize }; 

      runProperties.Append(runFonts); 
      runProperties.Append(color); 
      //runProperties.Append(kern); 
      runProperties.Append(fontSize11); 
      runProperties.Append(fontSizeComplexScript11); 
      Text t = new Text(text) 
      { 
       Text = text, 
       Space = SpaceProcessingModeValues.Preserve 
      }; 

      run.Append(runProperties); 
      run.Append(t); 

      return run; 

     } 

    } 
} 

後,我返回跑,我可以做同樣的圖像ND其他段落,只是把它們添加到文檔像這樣:

var stream = new MemoryStream(); 
    using (WordprocessingDocument doc = WordprocessingDocument.Create(stream, WordprocessingDocumentType.Document, true)) 
    { 
     MainDocumentPart mainPart = doc.AddMainDocumentPart(); 

     // Logo company construction 
     DocImage companyLogo = new DocImage(); 
     Run imageLogo = companyLogo.imageCreator(mainPart,COMPANYLOGOPATH,COMPANYIMAGENAME,COMPANYLOGOWIDTH,COMPANYLOGOHEIGHT,COMPANYIMAGEALING); 

     DocImage titleShape = new DocImage(); 
     Run imageShape = titleShape.imageCreator(mainPart, SHAPEIMAGEPATH, TITLESHAPEIMAGENAME, TITLESHAPEWIDTH, TITLESHAPEHEIGHT,SHAPEIMAGEALING); 

     DocImage clientImage = new DocImage(); 
     Run clientLogo = titleShape.imageCreatorUrl(mainPart, SHAPEIMAGEPATH, TITLESHAPEIMAGENAME, TITLESHAPEWIDTHCLIENTLOGO, TITLESHAPEHEIGHTCLIENTLOGO, CLIENTIMAGEALIGN,clientLogoPath); 

     new Document(new Body()).Save(mainPart); 

     Body body = mainPart.Document.Body; 

     body.Append(new Paragraph(
       new Run(imageLogo))); 

     body.Append(new Paragraph(
       new Run(imageShape))); 

     body.Append(new Paragraph(
       new Run(projectNameTxt))); 

     body.Append(new Paragraph(
       new Run(clientLogo))); 

     body.Append(new Paragraph(
       new Run(dateTxt))); 

     body.Append(new Paragraph(
       new Run(permissionTitle))); 

     body.Append(new Paragraph(
       new Run(permission))); 

     body.Append(new Paragraph(
       new Run(disclaimerTitleTxt))); 

     body.Append(new Paragraph(
       new Run(disclaimerDescriptionTxt))); 

     mainPart.Document.Save(); 



    } 
    stream.Seek(0, SeekOrigin.Begin); 
    Directory.CreateDirectory(HostingEnvironment.MapPath(DOCUMENTSLOCATION)); 
    System.IO.File.WriteAllBytes(HostingEnvironment.MapPath("~/Files/test5.docx"), stream.ToArray()); 

} 

我的問題是,生成的字體大小的文件總是我定義的實際大小的一半我創建的openXML dll。

我debed fontSize,我通過作爲參數和dll上收到的字體大小是正確的,是怎麼回事?

謝謝你們,

回答

0

FontSize用其測量半分的值規定。因此,如果您需要11點字體,則需要指定值爲22.

這也記錄在電子書"Open XML Explained" by Wouter Van Vugt的第13頁。

+0

謝謝,Taterhead我可以問你別的嗎? –

+0

@FilipeCosta我在這裏做了一個聊天室:https://chat.stackoverflow.com/rooms/150362/openxml-discussion您可以在那裏提出有關Open XML的問題。 – Taterhead

+0

沒有聲望說話:/,我們可以在別的地方說話嗎?需要問你的東西:) –