You can use OLE (Object Linking and Embedding) to include content from other programs, such as another Word document, an Excel or PowerPoint document to an existing Word document. This article demonstrates how to insert and extract embedded OLE objects in a Word document in Java by using Free Spire.Doc for Java API.
First of all, you need to add needed dependencies for including Free Spire.Doc for Java into your Java project. There are two ways to do that.
If you use maven, you need to add the following code to your project’s pom.xml file.
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>http://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.doc.free</artifactId>
<version>2.7.3</version>
</dependency>
</dependencies>
For non-maven projects, download Free Spire.Doc for Java pack from this website and add Spire.Doc.jar in the lib folder into your project as a dependency.
Insert OLE objects
Free Spire.Doc for Java API supports embedding multiple types of objects to a Word document, in the following example, you will see how to embedding an Excel file to a Word document by using this API.
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.Section;
import com.spire.doc.documents.OleObjectType;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.fields.DocOleObject;
import com.spire.doc.fields.DocPicture;
public class OleObjects {
public static void main(String[] args) throws Exception {
//Create a Document instance
Document doc = new Document();
//Add a section
Section sec = doc.addSection();
//Add a paragraph
Paragraph par = sec.addParagraph();
//Load an image
DocPicture picture = new DocPicture(doc);
picture.loadImage("excel.png");
//Insert the OLE
DocOleObject obj = par.appendOleObject("Sample.xlsx", picture, OleObjectType.Excel_Worksheet);
//Save to file
doc.saveToFile("insertOLE.docx", FileFormat.Docx_2013);
}
}
Output:
Extract OLE objects
import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.*;
import java.io.*;
public class OleObjects {
public
static void main(String[]
args) throws Exception {
//Load the Word document
Document
doc = new Document();
doc.loadFromFile("insertOLE.docx");
//Traverse
through all sections of the word document
for (int
s = 0; s < doc.getSections().getCount();
s++) {
Section
section = doc.getSections().get(s);
//Traverse
through all Child Objects in the body of each section
for (int
i = 0; i < section.getBody().getChildObjects().getCount();
i++) {
DocumentObject
obj = section.getBody().getChildObjects().get(i);
//Find
paragraph objects
if
(obj instanceof Paragraph)
{
Paragraph par =
(Paragraph) obj;
for
(int j = 0;
j < par.getChildObjects().getCount(); j++) {
DocumentObject
o = par.getChildObjects().get(j);
//Check
whether the object is OLE
if (o.getDocumentObjectType()
== DocumentObjectType.Ole_Object)
{
DocOleObject
ole = (DocOleObject) o;
String
type = ole.getObjectType();
//Check
whether the object type is "Acrobat.Document.11"
if
("AcroExch.Document.DC".equals(type))
{
//Write
the data of OLE into file
byteArrayToFile(ole.getNativeData(),
"extractOLE.pdf");
}
//Check
whether the object type is "Excel.Sheet.12"
else
if ("Excel.Sheet.8".equals(type))
{
byteArrayToFile(ole.getNativeData(),
"extractOLE.xlsx");
}
//Check
whether the object type is "PowerPoint.Show.12"
else
if ("PowerPoint.Show.12".equals(type))
{
byteArrayToFile(ole.getNativeData(),
"extractOLE.pptx");
}
}
}
}
}
}
}
public
static void byteArrayToFile(byte[]
datas, String destPath) {
File dest
= new File(destPath);
try (InputStream
is = new ByteArrayInputStream(datas);
OutputStream
os = new BufferedOutputStream(new
FileOutputStream(dest, false));)
{
byte[]
flush = new byte[1024];
int len
= -1;
while ((len
= is.read(flush))
!= -1) {
os.write(flush,
0, len);
}
os.flush();
} catch (IOException
e) {
e.printStackTrace();
}
}
}
Comments
Post a Comment