@ssvel
Please use the following code example to get the desired output. Hope this helps you.
Document doc = new Document(MyDir + "Revised_Manuscript.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
UseCase3(doc, builder);
ExtractImages(doc, "uc1");
UseCase4(doc, builder);
ExtractImages(doc, "uc2");
public static void UseCase3(Document doc, DocumentBuilder builder) throws Exception
{
int bookmark = 1;
int i = 1;
NodeCollection paragraphs = doc.getChildNodes(NodeType.PARAGRAPH, true);
for (Paragraph paragraph : (Iterable<Paragraph>) paragraphs)
{
if(paragraph.toString(SaveFormat.TEXT).trim().startsWith("Fig"))
{
Boolean bln = false;
Node PreviousPara = paragraph.getPreviousSibling();
while (PreviousPara != null && PreviousPara.getNodeType() == NodeType.PARAGRAPH
&& PreviousPara.toString(SaveFormat.TEXT).trim().length() == 0
&& ((Paragraph)PreviousPara).getChildNodes(NodeType.SHAPE, true).getCount() > 0)
{
PreviousPara = PreviousPara.getPreviousSibling();
bln = true;
}
if(!bln)
continue;
if(PreviousPara == null)
{
builder.moveToDocumentStart();
builder.insertParagraph();
builder.startBookmark("Bookmark" + bookmark);
builder.moveToParagraph(paragraphs.indexOf(paragraph), 0);
builder.endBookmark("Bookmark" + bookmark);
bookmark++;
}
else if(PreviousPara.getNodeType() == NodeType.PARAGRAPH)
{
Node node = ((Paragraph)PreviousPara).getParentNode().insertBefore(new Paragraph(doc), PreviousPara);
builder.moveTo(node);
builder.startBookmark("BookmarkUC1" + bookmark);
builder.moveTo(paragraph);
builder.endBookmark("BookmarkUC1" + bookmark);
bookmark++;
}
}
}
}
public static void UseCase4(Document doc, DocumentBuilder builder) throws Exception
{
int bookmark = 1;
int i = 1;
NodeCollection paragraphs = doc.getChildNodes(NodeType.PARAGRAPH, true);
for (Paragraph paragraph : (Iterable<Paragraph>) paragraphs)
{
if(paragraph.toString(SaveFormat.TEXT).trim().startsWith("Fig"))
{
Boolean bln = false;
Node PreviousPara = paragraph.getPreviousSibling();
while (PreviousPara != null && PreviousPara.getNodeType() == NodeType.PARAGRAPH &&
(PreviousPara.toString(SaveFormat.TEXT).trim().length() == 0 ||
(
PreviousPara.toString(SaveFormat.TEXT).trim().contains("(a)") ||
PreviousPara.toString(SaveFormat.TEXT).trim().contains("(b)") ||
PreviousPara.toString(SaveFormat.TEXT).trim().contains("(b)") ||
PreviousPara.toString(SaveFormat.TEXT).trim().contains("(d)"))
)
)
{
if(PreviousPara.toString(SaveFormat.TEXT).trim().contains("Fig") == true)
break;
System.out.println(PreviousPara.getText());
PreviousPara = PreviousPara.getPreviousSibling();
bln = true;
}
if(!bln)
continue;
if(PreviousPara == null)
{
builder.moveToDocumentStart();
builder.insertParagraph();
builder.startBookmark("Bookmark" + bookmark);
//builder.moveToParagraph(paragraphs.indexOf(paragraph), 0);
System.out.println(paragraph.getText());
builder.moveTo(paragraph);
builder.writeln(">>>");
builder.endBookmark("Bookmark" + bookmark);
bookmark++;
}
else
if(PreviousPara.getNodeType() == NodeType.PARAGRAPH)
{
Node node = ((Paragraph)PreviousPara).getParentNode().insertBefore(new Paragraph(doc), PreviousPara);
builder.moveTo(node);
builder.startBookmark("BookmarkUC1" + bookmark);
builder.moveTo(paragraph);
builder.endBookmark("BookmarkUC1" + bookmark);
bookmark++;
}
}
}
}
public static void ExtractImages(Document doc, String uc) throws Exception
{
int i = 1;
for (Bookmark bm : doc.getRange().getBookmarks())
{
if(bm.getName().startsWith("Bookmark"))
{
ArrayList nodes = ExtractContents.extractContent(bm.getBookmarkStart(), bm.getBookmarkEnd(), true);
Document dstDoc = ExtractContents.generateDocument(doc, nodes);
PageSetup sourcePageSetup = ((Paragraph)bm.getBookmarkStart().getParentNode()).getParentSection().getPageSetup();
dstDoc.getFirstSection().getPageSetup().setPaperSize(sourcePageSetup.getPaperSize());
dstDoc.getFirstSection().getPageSetup().setLeftMargin(sourcePageSetup.getLeftMargin());
dstDoc.getFirstSection().getPageSetup().setRightMargin(sourcePageSetup.getRightMargin());
dstDoc.updatePageLayout();
if(dstDoc.getLastSection().getBody().getLastParagraph().toString(SaveFormat.TEXT).trim().startsWith("Fig"))
dstDoc.getLastSection().getBody().getLastParagraph().remove();
dstDoc.updatePageLayout();
while(dstDoc.getFirstSection().getBody().getFirstParagraph()!= null && dstDoc.getFirstSection().getBody().getFirstParagraph().getChildNodes(NodeType.SHAPE, true).getCount() == 0)
dstDoc.getFirstSection().getBody().getFirstParagraph().remove();
dstDoc.updatePageLayout();
if(dstDoc.getFirstSection().getBody().getFirstParagraph().getChildNodes(NodeType.SHAPE, true).getCount() > 0)
{
String filename = bm.getBookmarkEnd().getParentNode().toString(SaveFormat.TEXT);
if(filename.trim().length() > 0)
dstDoc.save(MyDir + filename.substring(0, 7) + "_out.docx");
i++;
}
}
}
for (Bookmark bm : doc.getRange().getBookmarks()) {
if (bm.getName().startsWith("Bookmark")) {
bm.getBookmarkEnd().getParentNode().insertBefore(new BookmarkEnd(doc, bm.getName()), bm.getBookmarkEnd().getParentNode().getFirstChild());
}
}
doc.updatePageLayout();
for (Bookmark bm : doc.getRange().getBookmarks()) {
if (bm.getName().startsWith("Bookmark")) {
bm.getBookmarkEnd().getParentNode().insertBefore(new BookmarkEnd(doc, bm.getName()), bm.getBookmarkEnd().getParentNode().getFirstChild());
String figText = bm.getBookmarkEnd().getParentNode().toString(SaveFormat.TEXT);
if(figText.trim().length() > 0)
bm.setText("<Fig>"+figText.trim().substring(0, 7)+"</Fig>" + ControlChar.PARAGRAPH_BREAK);
}
}
}