2011-02-09 117 views

Respuesta

2

¿Qué formato es el archivo de palabras que desea modificar? (OLE2, WordML, docx?)

En general, la biblioteca más utilizada para la modificación de archivos de MSOffice es Apache POI.

También this tutorial probablemente sea útil en su caso actual.

2

Sólo una idea:

Al principio tendrá que descargar el WordAPI, que se puede descargar la derecha here. Para crear documentos de Word con JAVA, hay una clase que hace todo lo que necesita. La clase se llama WordProcessing.

Aquí hay un pequeño avance de los métodos implementados en esa clase:

  • createNewDocumentFromTemplate (String nombre_plantilla)
  • createNewDocumentFromTemplateToSelectByUser()
  • setNoteNotMatchingBookmarks (noteNotMatchingBookmarks booleanos)
  • typeTextAtBookmark (String marcador, Cadena textToType)
  • typeTextAtBookmark (String bookmark, String [] linesToType)
  • changeDocumentDirectory (String DocumentDirectory)
  • saveDocumentAs (cadena DocumentName)
  • saveDocumentAsAndClose (String DocumentName)
  • CloseDocument()
  • printAndForget()
  • printToPrinterToSelectByUserAndForget()
  • printAndForget (String NombreImpresora)
  • executeMacro (String macroName) < ---- Interesante para usted
  • quitApplication()
  • exec()

Como se puede ver hay una gran cantidad de funciones útiles para crear el documento.

Ahora puede insertar una imagen llamando a la función executeMacro.

La macro podría tener este aspecto:

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 
+0

Es el argumento macroname, debe contener el código de macro, si no, ¿cómo podemos pasarlo? –

1

Suponiendo docx está bien, podría utilizar docx4j. La muestra incluye AddImage:

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

hay necesidad de ser candidato a la Palabra docx4j para trabajar.

ps Dado que su pregunta está etiquetada como "swing", es posible que desee buscar en Google "docx4all" para obtener un procesador de textos docx implementado con Swing, que muestra imágenes.

+0

intenté esto, pero no he tenido éxito con esto. ¿Para qué sirve el archivo AddImage.java? Revisé el código, pero no tengo una idea clara. ¿Podrían explicarme el uso de este código? – jcrshankar

Cuestiones relacionadas