Insert an image into a word document in Java

与世无争的帅哥 提交于 2020-01-02 03:11:54

问题


Can someone point me in the right direction on how to insert an image into a word document in Java?


回答1:


Just an idea:

At first you will need to download the WordAPI, which can be downloaded right here. To create word documents with JAVA, there's a class doing everything you need. The class is called WordProcessing.

Here's a short preview of the methods implemented in that class:

  • createNewDocumentFromTemplate(String templateName)
  • createNewDocumentFromTemplateToSelectByUser()
  • setNoteNotMatchingBookmarks(boolean noteNotMatchingBookmarks)
  • typeTextAtBookmark(String bookmark, String textToType)
  • typeTextAtBookmark(String bookmark, String[] linesToType)
  • changeDocumentDirectory(String documentDirectory)
  • saveDocumentAs(String documentName)
  • saveDocumentAsAndClose(String documentName)
  • closeDocument()
  • printAndForget()
  • printToPrinterToSelectByUserAndForget()
  • printAndForget(String printerName)
  • executeMacro(String macroName) <---- Interesting for you
  • quitApplication()
  • exec()

As you can see there are a lot of helpful functions to create your document.

Now you can insert an image by calling the executeMacro function.

The Macro could look like this:

Option Explicit

Sub InsertPicture()

   Dim sPath As String
   Dim sBildPfad As String
   Dim lRes As Long

   'The path of your picture
   sBildPfad = "C:\temp"

   'remember the current path of the picture
   sPath = Options.DefaultFilePath(Path:=wdPicturesPath)

   'changing the path
   Options.DefaultFilePath(Path:=wdPicturesPath) = sBildPfad

   'open dialog
   lRes = Application.Dialogs(wdDialogInsertPicture).Show

   'reset path
   Options.DefaultFilePath(Path:=wdPicturesPath) = sPath

   If lRes <> 0 And ActiveDocument.InlineShapes.Count > 0 Then
      'if inserted, changing the size
      Call PicSize(ActiveDocument.InlineShapes(ActiveDocument.InlineShapes.Count))
   End If

End Sub

Sub PicSize(oPic As InlineShape)
   Dim iScale As Single
   Dim iWidth As Single

   iWidth = 200 ' (pixel)

   oPic.LockAspectRatio = msoTrue
   ' scaling
   iScale = (iWidth / oPic.Width) * 100
   oPic.ScaleWidth = iScale
   oPic.ScaleHeight = iScale
End Sub 



回答2:


What format is the word file you want to modify ? (OLE2, WordML, docx ?)

Generally the most widely used library for MSOffice file modification is Apache POI.

Also this tutorial will probably be helpful in your current case.




回答3:


Assuming docx is OK, you could use docx4j. The AddImage sample includes:

org.docx4j.wml.P p = newImage( wordMLPackage, bytes, 
            filenameHint, altText, 
            id1, id2 );
// Now add our p to the document
wordMLPackage.getMainDocumentPart().addObject(p);

No need to be running Word for docx4j to work.

ps Since your question is tagged "swing", you may wish to Google "docx4all" for a docx word processor implemented using Swing, which displays images.



来源:https://stackoverflow.com/questions/4941744/insert-an-image-into-a-word-document-in-java

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!