Index: src/main/java/org/artofsolving/jodconverter/AbstractConversionTask.java
===================================================================
--- src/main/java/org/artofsolving/jodconverter/AbstractConversionTask.java	(revision 201)
+++ src/main/java/org/artofsolving/jodconverter/AbstractConversionTask.java	(working copy)
@@ -31,13 +31,19 @@
 import org.artofsolving.jodconverter.office.OfficeException;
 import org.artofsolving.jodconverter.office.OfficeTask;
 
-
+import com.sun.star.awt.Size;
+import com.sun.star.beans.PropertyValue;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.container.XIndexAccess;
 import com.sun.star.frame.XComponentLoader;
 import com.sun.star.frame.XStorable;
+import com.sun.star.graphic.XGraphicProvider;
 import com.sun.star.io.IOException;
 import com.sun.star.lang.IllegalArgumentException;
 import com.sun.star.lang.XComponent;
+import com.sun.star.lang.XServiceInfo;
 import com.sun.star.task.ErrorCodeIOException;
+import com.sun.star.text.XTextGraphicObjectsSupplier;
 import com.sun.star.util.CloseVetoException;
 import com.sun.star.util.XCloseable;
 import com.sun.star.util.XRefreshable;
@@ -60,6 +66,7 @@
         XComponent document = null;
         try {
             document = loadDocument(context, inputFile);
+            processDocument(document, context);
             storeDocument(document, outputFile);
         } catch (OfficeException officeException) {
             throw officeException;
@@ -107,6 +114,59 @@
         return document;
     }
 
+    private void processDocument(XComponent document, OfficeContext context) {
+        if (cast(XServiceInfo.class, document).supportsService("com.sun.star.text.GenericTextDocument")) {
+            embedWriterImages(document, context);
+        }
+    }
+
+    private void embedWriterImages(XComponent document, OfficeContext context) {
+        XIndexAccess indexAccess =
+            cast(XIndexAccess.class, cast(XTextGraphicObjectsSupplier.class, document).getGraphicObjects());
+        XGraphicProvider graphicProvider =
+            cast(XGraphicProvider.class, context.getService("com.sun.star.graphic.GraphicProvider"));
+        PropertyValue[] queryProperties = new PropertyValue[] {new PropertyValue()};
+        queryProperties[0].Name = "URL";
+        for (int i = 0; i < indexAccess.getCount(); i++) {
+            try {
+                XPropertySet graphicProperties = cast(XPropertySet.class, indexAccess.getByIndex(i));
+                String graphicURL = (String) graphicProperties.getPropertyValue("GraphicURL");
+                if (!graphicURL.contains("vnd.sun.star.GraphicObject")) {
+                    queryProperties[0].Value = graphicURL;
+                    // Before embedding the image, the "ActualSize" property holds the image size specified in the
+                    // document content. If the width or height are not specified then their actual values will be 0.
+                    Size specifiedSize = cast(Size.class, graphicProperties.getPropertyValue("ActualSize"));
+                    graphicProperties.setPropertyValue("Graphic", graphicProvider.queryGraphic(queryProperties));
+                    // Images are embedded as characters (see TextContentAnchorType.AS_CHARACTER) and their size is
+                    // messed up if it's not explicitly specified (e.g. if the image height is not specified then it
+                    // takes the line height).
+                    adjustImageSize(graphicProperties, specifiedSize);
+                }
+            } catch (Exception e) {
+                // Skip this graphic.
+            }
+        }
+    }
+
+    private void adjustImageSize(XPropertySet graphicProperties, Size specifiedSize) {
+        try {
+            // After embedding the image, the "ActualSize" property holds the actual image size.
+            Size size = cast(Size.class, graphicProperties.getPropertyValue("ActualSize"));
+            // Compute the width and height if not specified, preserving aspect ratio.
+            if (specifiedSize.Width == 0 && specifiedSize.Height == 0) {
+                specifiedSize.Width = size.Width;
+                specifiedSize.Height = size.Height;
+            } else if (specifiedSize.Width == 0) {
+                specifiedSize.Width = specifiedSize.Height * size.Width / size.Height;
+            } else if (specifiedSize.Height == 0) {
+                specifiedSize.Height = specifiedSize.Width * size.Height / size.Width;
+            }
+            graphicProperties.setPropertyValue("Size", specifiedSize);
+        } catch (Exception e) {
+            // Ignore this image.
+        }
+    }
+
     private void storeDocument(XComponent document, File outputFile) throws OfficeException {
         Map<String,?> storeProperties = getStoreProperties(outputFile, document);
         if (storeProperties == null) {
