package
com.test.word;
import
com.aspose.words.Body;
import
com.aspose.words.Bookmark;
import
com.aspose.words.BookmarkCollection;
import
com.aspose.words.CompositeNode;
import
com.aspose.words.Document;
import
com.aspose.words.DocumentBuilder;
import
com.aspose.words.ImportFormatMode;
import
com.aspose.words.Node;
import
com.aspose.words.NodeImporter;
import
com.aspose.words.Orientation;
import
com.aspose.words.PaperSize;
import
com.aspose.words.Section;
public
class
Test1
{
public
static
void
main(String[] args)
{
try
{
Document mainDocument =
new
Document(
"F:\\test\\main.docx"
);
Document addDocument =
new
Document(
"F:\\test\\add.docx"
);
appendDocument(mainDocument, addDocument,
true
,
"shuqian1"
);
System.out.println(
"成功!"
);
mainDocument.save(
"F:\\test\\result.docx"
);
}
catch
(Exception e)
{
e.printStackTrace();
}
}
/**
* @Description 文档拼接
* @param mainDoc 主文档
* @param addDoc 要拼接的文档
* @param isPortrait 是否横向拼接
* @param bookmark 书签名称,将add文档拼接到主文档哪个位置
*/
public
static
void
appendDocument(Document mainDoc, Document addDoc,
boolean
isPortrait, String bookmark)
{
DocumentBuilder builder =
null
;
try
{
builder =
new
DocumentBuilder(mainDoc);
BookmarkCollection bms = mainDoc.getRange().getBookmarks();
Bookmark bm = bms.get(bookmark);
if
(bm !=
null
)
{
builder.moveToBookmark(bookmark,
true
,
false
);
builder.writeln();
builder.getPageSetup().setPaperSize(PaperSize.A4);
if
(isPortrait)
{
builder.getPageSetup().setOrientation(Orientation.PORTRAIT);
}
else
{
builder.getPageSetup().setOrientation(Orientation.LANDSCAPE);
}
Node insertAfterNode = builder.getCurrentParagraph().getPreviousSibling();
insertDocumentAfterNode(insertAfterNode, mainDoc, addDoc);
}
}
catch
(Exception e)
{
e.printStackTrace();
}
}
/**
* @Description
* @param insertAfterNode 插入的位置
* @param mainDoc 主文档
* @param srcDoc 要拼接进去的文档
* @Return void
*/
@SuppressWarnings
(
"rawtypes"
)
private
static
void
insertDocumentAfterNode(Node insertAfterNode, Document mainDoc, Document srcDoc)
throws
Exception
{
if
(insertAfterNode.getNodeType() !=
8
&& insertAfterNode.getNodeType() !=
5
)
{
throw
new
Exception(
"The destination node should be either a paragraph or table."
);
}
else
{
CompositeNode dstStory = insertAfterNode.getParentNode();
Body body = srcDoc.getLastSection().getBody();
while
(
null
!= body.getLastParagraph() && !body.getLastParagraph().hasChildNodes())
{
srcDoc.getLastSection().getBody().getLastParagraph().remove();
}
NodeImporter importer =
new
NodeImporter(srcDoc, mainDoc, ImportFormatMode.KEEP_SOURCE_FORMATTING);
int
sectCount = srcDoc.getSections().getCount();
for
(
int
sectIndex =
0
; sectIndex < sectCount; ++sectIndex)
{
Section srcSection = srcDoc.getSections().get(sectIndex);
int
nodeCount = srcSection.getBody().getChildNodes().getCount();
for
(
int
nodeIndex =
0
; nodeIndex < nodeCount; ++nodeIndex)
{
Node srcNode = srcSection.getBody().getChildNodes().get(nodeIndex);
Node newNode = importer.importNode(srcNode,
true
);
dstStory.insertAfter(newNode, insertAfterNode);
insertAfterNode = newNode;
}
}
}
}
}