OfficeIMO icon indicating copy to clipboard operation
OfficeIMO copied to clipboard

Setting font size for list symbol

Open tmpmachine opened this issue 1 year ago • 7 comments

Related PR : https://github.com/EvotecIT/OfficeIMO/pull/196

This PR adds option to set font size on list symbol by appending NumberingSymbolRunProperties on each Level. The issue is that this font size affect all lists with the same WordListStyle.

Here I have two list with Headings111Shifted style :

 var ListItems1 = new List<string>() { "sample " }; 
 var ListItems2 = new List<string>() { "gogo " }; 

 {
     int listFontSize = 13;
     int listSymbolFontSize = 24; // applied to all
     var wordList2 = doc.AddList(WordListStyle.Headings111Shifted, false, listSymbolFontSize);
     foreach (var point in ListItems1) {
         wordList2.AddItem($"{point}", 0)
             .SetFontSize(listFontSize);
     }
 }
 {
     int listFontSize = 22;
     int listSymbolFontSize = 55; // not applied
     var wordList2 = doc.AddList(WordListStyle.Headings111Shifted, false, listSymbolFontSize);
     foreach (var point in ListItems2 ) {
         wordList2.AddItem($"{point}", 0)
             .SetFontSize(listFontSize);
     }
 }

image

Findings so far

Both list correctly reference it's own NumberingInstance with it's own NumberingSymbolRunProperties. What could be missing?

image

image

image

image

tmpmachine avatar Feb 05 '24 09:02 tmpmachine

Lists are complicated beasts. I'll take a look. For now I'll link to old PR maybe it will give you something:

  • https://github.com/EvotecIT/OfficeIMO/pull/110

PrzemyslawKlys avatar Feb 05 '24 09:02 PrzemyslawKlys

So when I look at how Word deals with font size it seems to be applying it to ParagraphProperties

image

And not to AbstractNum. Is there a reason you want it done that way?

PrzemyslawKlys avatar Feb 05 '24 10:02 PrzemyslawKlys

I found a reason why it doesn't work. It's related to Nsid.

image

In the original code each list has different Nsid, but only if the list is different. If the list is the same it uses same Nsid (as it's hardcoded).

For this to work, it needs to be fixed so that Nsid is randomized or have proper numbering like NumberingInstance/AbstractNum.

I did quick hack and it works...

PrzemyslawKlys avatar Feb 05 '24 10:02 PrzemyslawKlys

It looks like randomizing nsid causing the continueNumbering to fail. Created a quick test in db169830e223ce975b5e5fb0ccf717fa5653c094.

Need more investigation, will check later.

[Fact]
public void Test_CreatingWordDocumentWithLists3() {
    
    var filePath = Path.Combine(_directoryWithFiles, "CreatedDocumentWithLists2.docx");
    using (var doc = WordDocument.Create(filePath)) {


        doc.AddParagraph("Capybaras:");
        { 
            WordList wl = doc.AddList(WordListStyle.HeadingIA1);
            wl.AddItem("Pablo");
        }
        {
            WordList wl = doc.AddList(WordListStyle.HeadingIA1, true);
            wl.AddItem("Ponyo");
        }

        doc.Save(true);
    }

}

image

tmpmachine avatar Feb 12 '24 10:02 tmpmachine

I guess when we want to continuenumbering we will now need to refer to the original AbstractNum, instead of adding a new one...

SO when user uses WordListStyle.headingIA1, find it on the list if it's there already and if it's continueNumbering, attach to it - my guess.

PrzemyslawKlys avatar Feb 12 '24 10:02 PrzemyslawKlys

So when I look at how Word deals with font size it seems to be applying it to ParagraphProperties

And not to AbstractNum. Is there a reason you want it done that way?

Not really, at that time I went straight to abstractnum instead of checking on a higher level (paragraph).

tmpmachine avatar Feb 13 '24 08:02 tmpmachine

I've now removed restart numbering/continue numbering as it makes no sense:

  • https://github.com/EvotecIT/OfficeIMO/issues/204

If you feel this is somehow wrong please let me know.

PrzemyslawKlys avatar Feb 18 '24 17:02 PrzemyslawKlys