Lost textbox after bookmark text replacement

Hi Aspose team,
we have issues with document creation using Aspose.Words .NET 10.8. In some scenarios textboxes are lost when bookmark texts are replaced.
For testing purposes i’ve created a Word 2007 document and added a text and a textbox (standard template “Austere Sidebar”). Afterwards i’ve added a bookmark onto the text.
When i open this document with Aspose.Words, replace the text of the bookmark and save the document afterwards, the bookmark is lost.
The code used:

MemoryStream memoryStream = new MemoryStream(File.ReadAllBytes(filename));
Document document = new Document(memoryStream);
foreach(Bookmark bm in document.Range.Bookmarks)
{
    bm.Text = "Replacement";
}
document.Save("myfile.docx", SaveFormat.Docx);

I also attach the source document and the result document. Can you please confirm this to be an Aspose issue and estimate the time until time of fix ?
Thanks and kind regards,
Oliver

Hi
Oliver,

Thanks for your inquiry.

First of all, please note that DocumentExplorer is a very useful tool which easily enables us to see the entire document structure. You can find DocumentExplorer in the folder where you installed Aspose.Words e.g. C:\Program Files (x86)\Aspose\Aspose.Words for .NET\Demos\CSharp\DocumentExplorer\bin\DocumentExplorer.exe. Below is the DOM structure of your source document as viewed with DocumentExplorer:

``

In this case, the whole content enclosed in Bookmark will be replaced when you set the bookmark Text property. Also, to get better understanding, I would like to suggest you please try using the following code snippet:

Document doc = new Document(@"C:\test</font>document_source.docx");
Run run = new Run(doc);
run.Text = "New run of text in textbox";
Bookmark bm = doc.Range.Bookmarks[0];
Shape textBox = bm.BookmarkStart.NextSibling.NextSibling as Shape;
textBox.FirstParagraph.Runs.Add(run);
doc.Save(@"C:\test</font>document_result.docx");

Please let us know if you need more information, we are always glad to help you.

Best Regards,

Hi Awais,
thanks for the quick response. Ok, i see what you’re saying. The textbox is part of the bookmark, ok. That corresponds to the Word behaviour. When i open the bookmark dialog and double click onto the bookmark, the textbox is also getting selected. So a deletion would delete it too. So ok for that file.
Yet i have another document which i attach. When you select the bookmark in it, the textbox is not selected and hence not deleted when the bookmark is getting deleted. The document explorer still shows the shape within the bookmark though.
So what i see and whats inside the docx is not as expected to me. The issue seems to be the order of creation within Word. When i create the bookmark before the textbox was inserted it works. But when i do the same after the textbox exist, the textbox shape is part of the bookmark. It also seems to be only an issue if the bookmark and the textbox anchor are within the same paragraph.
But i dont think that you can create a bookmark in Word that contain main text and a textbox as both are part of another Interop range. If that is correct, then a bookmark can not contain a textbox. Can you confirm this ?
Kind regards,
Oliver

Hi
Oliver,

Thanks for your inquiry. Please note that, by Aspose.Words design, bookmark’s nodes (BookmarkStart and BookmarksEnd) are inline. This means that BookmarkStart and BookmarkEnd can be children of paragraphs only. So, when it comes to creating Bookmarks by using Aspose.Words, you can enclose any type of nodes (e.g. Runs, Shapes etc) within BookmarkStart and BookmarkEnd in a hierarchy. Also, Aspose.Words always keeps its DOM (document object model) in a hierarchical format.

Please let me know if I can be of any further assistance.

Best Regards,

Hi Awais,
we are using Aspose.Words to open and adjust documents created with Word. We don’t create documents only with Aspose. So could this behaviour be an issue resulting from the different interpretation of bookmarks ? When Word does not support to have textbox shapes within bookmarks, why is Aspose interpret the paragraph as one and put “all” into the bookmaks, even the textbox shape. That’s what happening here, right ?!
Best regards,
Oliver

Hi Oliver,

Thank you for the additional information.

First of all, I would like to confirm here that the actions that can be performed with bookmarks using Aspose.Words are the same as the ones you can perform using Microsoft Word. You can insert a new bookmark, delete, move to a bookmark, get or set a bookmark name, get or set text enclosed in it etc.

Secondly, I think, you should confirm if MS Word supports to have textbox shapes within bookmarks by contacting Microsoft support, maybe they will be able to help to resolve this problem.

If we can help you with anything else, please feel free to ask.

Best Regards,

Hi Oliver,
Thank you for additional information. Actually, behavior of Aspose.Words is correct. Dark red textbox is within a bookmark. You can make sure by looking into the raw XML of your document. See XML below, green highlighted are bookmark start and end, yellow highlighted is your textbox. So as you can see textbox is enclosed into the bookmark:

<w:p w:rsidR="006729E9" w:rsidRPr="00430DA7" w:rsidRDefault="00E96CA6" w:rsidP="007F2D31">
	<w:pPr>
		<w:pStyle w:val="Heading1" />
		<w:rPr>
			<w:highlight w:val="yellow" />
			<w:lang w:val="en-GB" />
		</w:rPr>
	</w:pPr>
	<w:bookmarkStart w:id="0" w:name="C0982FrT000000000000383" />
	<w:r w:rsidRPr="00E96CA6">
		<w:rPr>
			<w:noProof />
			<w:highlight w:val="yellow" />
			<w:lang w:eastAsia="de-DE" />
		</w:rPr>
		<w:pict>
			<v:rect id="Rectangle 393" o:spid="_x0000_s1032" style="position:absolute;margin-left:1422.4pt;margin-top:0;width:244.8pt;height:243.45pt;z-index:251660288;visibility:visible;mso-width-percent:400;mso-position-horizontal:right;mso-position-horizontal-relative:page;mso-position-vertical:top;mso-position-vertical-relative:page;mso-width-percent:400;mso-height-relative:margin" o:gfxdata="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 AABYBgAAAAA= " o:allowincell="f" fillcolor="#943634" stroked="f">
				<v:shadow type="perspective" opacity=".5" origin=",.5" offset="17pt,-52pt" matrix=",,,-1" />
				<v:textbox style="mso-fit-shape-to-text:t" inset=",1in,1in,7.2pt">
					<w:txbxContent>
						<w:p w:rsidR="006729E9" w:rsidRPr="00430DA7" w:rsidRDefault="006729E9">
							<w:pPr>
								<w:spacing w:after="0" />
								<w:rPr>
									<w:caps />
									<w:color w:val="9BBB59" w:themeColor="accent3" />
									<w:sz w:val="40" />
									<w:szCs w:val="40" />
									<w:lang w:val="en-US" />
								</w:rPr>
							</w:pPr>
						</w:p>
					</w:txbxContent>
				</v:textbox>
				<w10:wrap type="square" anchorx="page" anchory="page" />
			</v:rect>
		</w:pict>
	</w:r>
	<w:smartTag w:uri="http://www.accenture.com/AQDB" w:element="PlaceholderSmartTag">
		<w:r w:rsidR="006729E9" w:rsidRPr="00430DA7">
			<w:rPr>
				<w:highlight w:val="yellow" />
				<w:lang w:val="en-GB" />
			</w:rPr>
			<w:t>
				<Letter Date="">
			</w:t>
		</w:r>
	</w:smartTag>
	<w:bookmarkEnd w:id="0" />
</w:p>

Best regards,

Hi,
thanks for the further analysis. I also ran some checks with Interop and i can confirm the behaviour when replacing the bookmark is the same as in Aspose. So in the end this “issue” is more an issue of understanding from a user perspective. Because its strange to the user that the deletion of bookmarks in the first paragraph is not working like the deletion of one in the second paragraph when textbox is part of the first. But thats more a logical problem - technically its reasonable.
So i’d close the issue as works as designed.
Thanks for your support,
Oliver