Take advantage of the Jsoup (Jsoup.parse (String html)) method that the HTML code will get. Then use Filewiter to write this HTML content to the local Template.doc file, if the article contains pictures, Template.doc will rely on your local image file path, if you change a name or change the path, and then open the Template.doc, The picture will not show up (a fork appears). To resolve this problem, use the Jsoup component to iterate through the contents of the HTML document, replace the IMG element with the identity of the ${image_, remove the SRC attribute from the IMG element, and then store it as a key-value pair, for example:
At this point your HTML content becomes the following format: (for example)
After saving to the local file, use the Msofficegeneratorutils class (see below, based on open source component Jacob) to open the template.doc you saved, call Replacetext2image, Replace the picture ID of the above code with a picture, which eliminates the problem of the local picture path. Then call the Copy method, copy the entire document, close the Template.doc file, create a new doc file (createdocument), invoke the Paste method to paste the contents of the Template.doc you just copied, and save it. It's basically OK.
There is also an implicit problem with the contents of the entire Word document copy. When the content is too much to copy, when you close the Word program, talk about a dialog box asking if you want to apply the copied data to another program. The solution to this problem is simple, you can create a new document, enter a line of words, and then call the copy method before calling quit (quit the Word program method), and it will not prompt you when you close the Word program when you have less data copied. See the following code
Copy a *.doc document with less content to prevent the word program from being prompted with a large amount of copy content in memory, and whether it should be applied to another Program dialog box.
Msofficeutils.createnewdocument ();
Msofficeutils.inserttext ("test message");
Msofficeutils.copy ();
Msofficeutils.close ();
Msofficeutils.quit ();
Jacob's link on the SourceForge
Jsoup official website
Msofficegeneratorutils
Package com.topstar.test;
Import Java.io.File;
Import java.io.IOException;
Import java.util.List;
Import com.jacob.activeX.ActiveXComponent;
Import Com.jacob.com.ComThread;
Import Com.jacob.com.Dispatch;
Import com.jacob.com.Variant;
/**
* Use Jacob to do the related work for Microsoft Office Word
*
* @author Xiaowu
* @category Topstar
* @version 1.0
* @since 2011-12-5
*/
public class Msofficegeneratorutils {
/**
* Microsoft Office Word Program objects
*/
Private activexcomponent word = null;
/**
* Word Active Document Object
*/
Private Dispatch document = NULL;
/**
* All Word Document objects
*/
Private Dispatch documents = NULL;
/**
* Selection represents the selection in the currently active document window. If nothing is selected in the document, this object represents the insertion point (that is, the position of the cursor). <br/>
* Only one Selection object can exist in each document window, and only one active Selection object can exist throughout the application
*/
Private Dispatch selection = null;
/**
* The Range object represents a contiguous area of the document. Each Range object is defined by a starting character position and ending character position. <br/>
* The Range object is independent of the selection. You can define and process a range without changing the selection. You can also define multiple scopes in your document. But there is only one selection in each document
*/
Private Dispatch range = null;
/**
* PageSetup object contains settings properties for all pages of the document (such as paper size, left margin, bottom margin)
*/
Private Dispatch pageSetup = null;
/**
* All table objects in the document
*/
Private Dispatch tables = null;
/** Single Table Object * *
Private Dispatch table = null;
/** all row objects in the table * *
Private Dispatch rows = null;
/** all Column objects in the table * *
Private Dispatch cols = null;
/** Table Specify Line Object
Private Dispatch row = null;
/** table Specify Column object
Private Dispatch col = null;
/** the specified cell in the table * *
Private Dispatch cell = null;
/** Font * *
Private Dispatch font = NULL;
/** Alignment Method * *
Private Dispatch alignment = NULL;
/**
* Construction Method
*
* @param visible
* Set whether the program is visible when you build a Word document
*/
Public Msofficegeneratorutils (Boolean visible) {
if (This.word = = null) {
Initializing Microsoft Office Word instances
This.word = new Activexcomponent ("Word.Application");
This.word.setProperty ("Visible", New Variant (Visible));
Disable macros
This.word.setProperty ("AutomationSecurity", New Variant (3));
}
if (this.documents = null)
This.documents = Word.getproperty ("Documents"). Todispatch ();
}
/**
* Set page orientation and margins
*
* @param orientation
* Page orientation
* <ul>
* <li>0 Transverse </li>
* <li>1 longitudinal </li>
* </ul>
* @param leftMargin
* Left margin
* @param rightMargin
* Right Margin
* @param topMargin
* Top Margin
* @param buttommargin
* Bottom Margin
*/
public void Setpagesetup (int orientation, int leftMargin, int rightMargin,
int topMargin, int buttommargin) {
if (This.pagesetup = null)
This.getpagesetup ();
Dispatch.put (PageSetup, "orientation", orientation);
Dispatch.put (PageSetup, "LeftMargin", LeftMargin);
Dispatch.put (PageSetup, "RightMargin", RightMargin);
Dispatch.put (PageSetup, "TopMargin", TopMargin);
Dispatch.put (PageSetup, "BottomMargin", Buttommargin);
}
/**
* Open Word Document
*
* @param Docpath
* Word Document Path
* @return Open Document Object
*/
Public Dispatch OpenDocument (String docpath) {
This.document = Dispatch.call (documents, "Open", Docpath). Todispatch ();
This.getselection ();
This.getrange ();
This.getalignment ();
This.getfont ();
This.getpagesetup ();
return this.document;
}
/**
* Create a new document
*
* @return Document Object
*/
Public Dispatch CreateNewDocument () {
This.document = Dispatch.call (documents, "ADD"). Todispatch ();
This.getselection ();
This.getrange ();
This.getpagesetup ();
This.getalignment ();
This.getfont ();
return this.document;
}
/**
* Get the selected content or insertion point
*
* @return Selection
*/
Public Dispatch getselection () {
This.selection = Word.getproperty ("Selection"). Todispatch ();
return this.selection;
}
/**
* Gets the part of the current document that can be modified, provided that the selection is required
*
* @return Range
*/
Public Dispatch GetRange () {
This.range = Dispatch.get (this.selection, Range). Todispatch ();
return this.range;
}
/**
* Get the page properties of the current document
*/
Public Dispatch Getpagesetup () {
if (this.document = null)
return this.pagesetup;
This.pagesetup = Dispatch.get (this.document, "PageSetup"). Todispatch ();
return this.pagesetup;
}
/**
* Move the selection or insertion point up
*
* @param count
* Move the distance
*/
public void moveUp (int count) {
for (int i = 0; i < count; i++)
Dispatch.call (this.selection, "MoveUp");
}
/**
* Move the selection or insertion point down
*
* @param count
* Move the distance
*/
public void MoveDown (int count) {
for (int i = 0; i < count; i++)
Dispatch.call (this.selection, "MoveDown");
}
/**
* Move the selection or insertion point to the left
*
* @param count
* Move the distance
*/
public void MoveLeft (int count) {
for (int i = 0; i < count; i++)
Dispatch.call (this.selection, "MoveLeft");
}
/**
* Move the selection or insertion point to the right
*
* @param count
* Move the distance
*/
public void MoveRight (int count) {
for (int i = 0; i < count; i++)
Dispatch.call (this.selection, "moveright");
}
/**
* Perform a hard wrap (enter)
*
* @param count
* Line of Change
*/
public void Enterdown (int count) {
for (int i = 0; i < count; i++)
Dispatch.call (this.selection, "typeparagraph");
}
/**
* Move the insertion point to the first position of the file
*/
public void MoveStart () {
Dispatch.call (this.selection, "HomeKey", New Variant (6));
}
/**
* Move the insertion point to the end of the file
*/
public void MoveEnd () {
Dispatch.call (Selection, "EndKey", New Variant (6));
}
/**
* Find text from selection or insertion point
*
* @param tofindtext
* What to look for
* @return The contents of the query and select
*/
public boolean find (String tofindtext) {
Start Query from selection location
Dispatch find = Dispatch.call (this.selection, "find"). Todispatch ();
Set the hot? br/> Dispatch.put (Find, "Text", Tofindtext);
Look forward
Dispatch.put (Find, "Forward", "True");
Set format
Dispatch.put (Find, "Format", "True");
Case matching
Dispatch.put (Find, "matchcase", "True");
Whole Word match
Dispatch.put (Find, "MatchWholeWord", "True");
Find and select
Return Dispatch.call (Find, "Execute"). Getboolean ();
}
/**
* Replace the selected content
*
* @param NewText
* What to replace
*/
public void replace (String newtext) {
Set alternate text
Dispatch.put (this.selection, "Text", NewText);
}
/**
* Global Substitution
*
* @param oldtext
* What to replace
* @param replaceobj
* Replaced content
*/
public void ReplaceAll (String oldtext, Object replaceobj) {
Move the insertion point to the beginning of the file
MoveStart ();
Table Replacement method
String NewText = (string) replaceobj;
How to replace pictures
if (Oldtext.indexof ("image")!=-1 | | | newtext.lastindexof (". bmp")!=-1 | | newtext.lastindexof (". jpg")!=-1 | | newtext.la Stindexof (". gif")!=-1) {
while (find (OldText)) {
Insertimage (NewText);
Dispatch.call (this.selection, "moveright");
}
Text mode
} else {
while (find (OldText)) {
Replace (NewText);
Dispatch.call (this.selection, "moveright");
}
}
}
/**
* Replace the specified content with a picture
* @param content specified by ReplaceText
* @param imgpath Picture path
*/
public void Replacetext2image (String replacetext,string imgpath) {
MoveStart ();
while (find (ReplaceText)) {
Insertimage (Imgpath);
MoveEnd ();
Enterdown (1);
}
}
/**
* Replace the picture with the current insertion point
*
* @param ImagePath
* The path of the picture
*/
public void Insertimage (String imagepath) {
Dispatch.call (Dispatch.get (Selection, "InlineShapes"). Todispatch (), "AddPicture", ImagePath);
}
/**
* Merge Cells
*
* @param tableindex
* Form subscript, starting from 1
* @param fstcellrowidx
* Start line
* @param fstcellcolidx
* Start column
* @param seccellrowidx
* End Line
* @param seccellcolidx
* End Column
*/
public void Mergecell (int tableindex, int fstcellrowidx, int fstcellcolidx,
int seccellrowidx, int seccellcolidx) {
GetTable (Tableindex);
Dispatch Fstcell = dispatch.call (table, "Cell",
New Variant (FSTCELLROWIDX), new variant (FSTCELLCOLIDX)
. Todispatch ();
Dispatch Seccell = dispatch.call (table, "Cell",
New Variant (SECCELLROWIDX), new variant (SECCELLCOLIDX)
. Todispatch ();
Dispatch.call (Fstcell, "Merge", Seccell);
}
/**
* Split the current cell
*
* @param numrows
* Split number of lines, if you do not want to split the branch, please specify 1
* @param numcolumns
* Split number of columns, if you do not want to split the column, specify 1
*/
public void Splitcell (int numrows, int numcolumns) {
Dispatch.call (This.cell, "Split", new Variant (NumRows), new variant (
NumColumns));
}
/**
* Write content to the table
*
* @param list
* What to write <br/>
* Note: the list.size () should be consistent with table rows, and the length property of the string array should be consistent with the table's columns
*/
public void inserttotable (list<string[]> List) {
if (list = = NULL | | list.size () <= 0)
Return
if (this.table = null)
Return
for (int i = 0; i < list.size (); i++) {
string[] STRs = List.get (i);
for (int j = 0; J < Strs.length; J + +) {
Iterate through each of the tables. Cell, how many times do you want to fill in the hot 菔? Ken joyriding br/> Dispatch cell = This.getcell (i + 1, j + 1);
Select this cell
Dispatch.call (Cell, "select");
Write hot 莸 sauce say ピ? piecemeal br/> dispatch.put (this.selection, "Text", strs[j));
Move the insertion point to the next one?? Position
}
This.movedown (1);
}
Line Wrap
This.enterdown (1);
}
/**
* Insert text content to the current insertion point
*
* @param list
* The content to insert, List.size () represents the number of rows
*/
public void Inserttodocument (list<string> List) {
if (list = = NULL | | list.size () <= 0)
Return
if (this.document = null)
Return
for (String str:list) {
Dispatch.put (this.selection, "Text", str);
This.movedown (1);
This.enterdown (1);
}
}
/**
* Inserts text at the current insertion point
*
* @param inserttext
* Text to insert
*/
public void Inserttotext (String inserttext) {
Dispatch.put (this.selection, "Text", inserttext);
}
/**
* Inserts a string at the current insertion point, and when you insert a line of text by using this method, Word selects it by default, and if you call this method, it overwrites the original content, so after calling this method, remember to call moveright and move the offset one position to the right.
* @param newtext The new string to insert
*/
public void InsertText (String newtext) {
Dispatch.put (Selection, "Text", NewText);
}
/**
* Create a new table
*
* @param rowcount
* Line
* @param colcount
* Column
* @param width
* Table Border
* <ul>
* <li>0 No Border </li>
* <li>1 has a border </li>
* </ul>
* @return Table objects
*/
Public Dispatch createnewtable (int rowcount, int colcount, int width) {
if (this.tables = null)
This.gettables ();
This.getrange ();
if (RowCount > 0 && colcount > 0)
this.table = Dispatch.call (This.tables, "Add", This.range,
New Variant (ROWCOUNT), new variant (ColCount),
New Variant (width)). Todispatch ();
return this.table;
}
/**
* Get all the table objects in the current document object
*
* @return Tables
*/
Public Dispatch Gettables () {
if (this.document = null)
return this.tables;
This.tables = Dispatch.get (this.document, "Tables"). Todispatch ();
return this.tables;
}
/**
* Get the number of all tables in the current document
*
* @return Number of forms
*/
public int Gettablescount () {
if (this.tables = null)
This.gettables ();
return Dispatch.get (Tables, "Count"). GetInt ();
}
/**
* Get Table object from index
*
* @param tableindex
* Index
* @return Table
*/
Public Dispatch gettable (int tableindex) {
if (this.tables = null)
This.gettables ();
if (tableindex >= 0)
this.table = Dispatch.call (This.tables, "Item", New Variant (Tableindex)). Todispatch ();
return this.table;
}
/**
* Fill in the data in the specified cell
*
* @param tableindex
* Table Index
* @param cellrowidx
* Row Index
* @param cellcolidx
* Column Index
* @param txt
* Text
*/
public void Puttxttocell (int tableindex, int cellrowidx, int cellcolidx, String txt) {
GetTable (Tableindex);
Getcell (Cellrowidx, CELLCOLIDX);
Dispatch.call (This.cell, "select");
Dispatch.put (this.selection, "Text", txt);
}
/**
* Copy paragraphs from another document at the end of the current document
*
* @param Anotherdocpath
* Disk path to another document
* @param tableindex
* The ordinal number of the copied paragraph in the other document (starting from 1)
*/
public void Copyparagraphfromanotherdoc (String anotherdocpath, int paragraphindex) {
Dispatch wordcontent = Dispatch.get (this.document, "Content"). Todispatch (); Get the contents of the current document
Dispatch.call (wordcontent, "InsertAfter", "$selection $");//insert special character position insertion point
Copyparagraphfromanotherdoc (Anotherdocpath, Paragraphindex, "$selection $");
}
/**
* Copy the paragraph from another document at the location specified in the current document
*
* @param Anotherdocpath
* Disk path to another document
* @param tableindex
* The ordinal number of the copied paragraph in the other document (starting from 1)
* @param POS
* The location specified in the current document
*/
public void Copyparagraphfromanotherdoc (string anotherdocpath, int paragraphindex, string pos) {
Dispatch doc2 = null;
try {
DOC2 = Dispatch.call (documents, "Open", Anotherdocpath). Todispatch ();
Dispatch paragraphs = dispatch.get (doc2, "paragraphs"). Todispatch ();
Dispatch paragraph = dispatch.call (paragraphs, "Item", New Variant (Paragraphindex)). Todispatch ();
Dispatch range = Dispatch.get (paragraph, Range). Todispatch ();
Dispatch.call (range, "Copy");
if (This.find (POS)) {
GetRange ();
Dispatch.call (This.range, "Paste");
}
catch (Exception e) {
E.printstacktrace ();
finally {
if (doc2!= null) {
Dispatch.call (DOC2, "Close", New Variant (true));
DOC2 = null;
}
}
}
/**
* Copy a table from another document at the location specified in the current document
*
* @param Anotherdocpath
* Disk path to another document
* @param tableindex
* The ordinal number of the copied form in the other document (starting from 1)
* @param POS
* The location specified in the current document
*/
public void Copytablefromanotherdoc (String anotherdocpath, int tableindex,
String POS) {
Dispatch doc2 = null;
try {
DOC2 = Dispatch.call (documents, "Open", Anotherdocpath)
. Todispatch ();
Dispatch tables = Dispatch.get (doc2, "Tables"). Todispatch ();
Dispatch table = Dispatch.call (tables, "Item",
New Variant (Tableindex)). Todispatch ();
Dispatch range = dispatch.get (table, Range). Todispatch ();
Dispatch.call (range, "Copy");
if (This.find (POS)) {
GetRange ();
Dispatch.call (This.range, "Paste");
}
catch (Exception e) {
E.printstacktrace ();
finally {
if (doc2!= null) {
Dispatch.call (DOC2, "Close", New Variant (true));
DOC2 = null;
}
}
}
/**
* Copy pictures from another document at the location specified in the current document
*
* @param Anotherdocpath
* Disk path to another document
* @param shapeindex
* The position of the copied picture in another grid document
* @param POS
* The location specified in the current document
*/
public void Copyimagefromanotherdoc (String anotherdocpath, int shapeindex,
String POS) {
Dispatch doc2 = null;
try {
DOC2 = Dispatch.call (documents, "Open", Anotherdocpath)
. Todispatch ();
Dispatch shapes = dispatch.get (doc2, "InlineShapes"). Todispatch ();
Dispatch shape = dispatch.call (shapes, "Item",
New Variant (Shapeindex)). Todispatch ();
Dispatch Imagerange = Dispatch.get (Shape, Range). Todispatch ();
Dispatch.call (Imagerange, "Copy");
if (This.find (POS)) {
GetRange ();
Dispatch.call (This.range, "Paste");
}
catch (Exception e) {
E.printstacktrace ();
finally {
if (doc2!= null) {
Dispatch.call (DOC2, "Close", New Variant (true));
DOC2 = null;
}
}
}
/**
* Increase the row before the specified line in the specified table
*
* @param tableindex
* The nth table in the Word file (starting from 1)
* @param rowIndex
* Specify the ordinal of the line (starting from 1)
*/
public void Addtablerow (int tableindex, int rowIndex) {
GetTable (Tableindex);
Gettablerows ();
Gettablerow (RowIndex);
Dispatch.call (This.rows, "Add", New Variant (This.row));
}
/**
* Add a line before line 1th
*
* @param tableindex
* The nth table in the Word document (starting from 1)
*/
public void Addfirsttablerow (int tableindex) {
GetTable (Tableindex);
Gettablerows ();
Dispatch row = dispatch.get (rows, "a"). Todispatch ();
Dispatch.call (This.rows, "Add", New Variant (row));
}
/**
* Add one line before the last 1 lines
*
* @param tableindex
* The nth table in the Word document (starting from 1)
*/
public void Addlasttablerow (int tableindex) {
GetTable (Tableindex);
Gettablerows ();
Dispatch row = Dispatch.get (This.rows, "last"). Todispatch ();
Dispatch.call (This.rows, "Add", New Variant (row));
}
/**
* Add one line
*
* @param tableindex
* The nth table in the Word document (starting from 1)
*/
public void addrow (int tableindex) {
GetTable (Tableindex);
Gettablerows ();
Dispatch.call (This.rows, "Add");
}
/**
* Add a column
*
* @param tableindex
* The nth table in the Word document (starting from 1)
*/
public void Addcol (int tableindex) {
GetTable (Tableindex);
Gettablecolumns ();
Dispatch.call (This.cols, "Add"). Todispatch ();
Dispatch.call (This.cols, "AutoFit");
}
/**
* Add columns to the table before the specified column
*
* @param tableindex
* The nth table in the Word document (starting from 1)
* @param colindex
* Specify the ordinal of the column (starting from 1)
*/
public void Addtablecol (int tableindex, int colindex) {
GetTable (Tableindex);
Gettablecolumns ();
Gettablecolumn (Colindex);
Dispatch.call (This.cols, "Add", This.col). Todispatch ();
Dispatch.call (This.cols, "AutoFit");
}
/**
* Add a column before the 1th column
*
* @param tableindex
* The nth table in the Word document (starting from 1)
*/
public void Addfirsttablecol (int tableindex) {
GetTable (Tableindex);
Dispatch cols = Gettablecolumns ();
Dispatch col = dispatch.get (cols, "a"). Todispatch ();
Dispatch.call (cols, "Add", col). Todispatch ();
Dispatch.call (cols, "AutoFit");
}
/**
* Add a column before the last column
*
* @param tableindex
* The nth table in the Word document (starting from 1)
*/
public void Addlasttablecol (int tableindex) {
GetTable (Tableindex);
Dispatch cols = Gettablecolumns ();
Dispatch col = dispatch.get (cols, "last"). Todispatch ();
Dispatch.call (cols, "Add", col). Todispatch ();
Dispatch.call (cols, "AutoFit");
}
/**
* Get the number of columns in the current table
*
* Total @return Columns
*/
public int Gettablecolumnscount () {
if (this.table = null)
return 0;
Return Dispatch.get (This.cols, "Count"). GetInt ();
}
/**
* Get the number of rows in the current table
*
* Total @return Lines
*/
public int Gettablerowscount () {
if (this.table = null)
return 0;
Return Dispatch.get (this.rows, "Count"). GetInt ();
}
/**
* Get all Column objects in the current table
*
* @return cols
*/
Public Dispatch Gettablecolumns () {
if (this.table = null)
return this.cols;
This.cols = Dispatch.get (this.table, "Columns"). Todispatch ();
return this.cols;
}
/**
* Get all row objects of the current table
*
* @return Rows
*/
Public Dispatch gettablerows () {
if (this.table = null)
return this.rows;
This.rows = Dispatch.get (this.table, "Rows"). Todispatch ();
return this.rows;
}
/**
* Get the Column object of the current table based on the index
*
* @param columnindex
* Column Index
* @return Col
*/
Public Dispatch gettablecolumn (int columnindex) {
if (This.cols = null)
This.gettablecolumns ();
if (columnindex >= 0)
This.col = Dispatch.call (This.cols, "Item",
New Variant (ColumnIndex)). Todispatch ();
return this.col;
}
/**
* Get the Row object of the current table based on the index
*
* @param rowIndex
* Row Index
* @return Row
*/
Public Dispatch gettablerow (int rowIndex) {
if (this.rows = null)
This.gettablerows ();
if (rowIndex >= 0)
This.row = Dispatch.call (this.rows, "Item", New Variant (RowIndex))
. Todispatch ();
return this.row;
}
/**
* Automatically adjust all current forms
*/
public void autofittable () {
int count = This.gettablescount ();
for (int i = 0; i < count; i++) {
Dispatch table = Dispatch.call (tables, "Item", new Variant (i + 1))
. Todispatch ();
Dispatch cols = dispatch.get (table, "Columns"). Todispatch ();
Dispatch.call (cols, "AutoFit");
}
}
/**
* Get cells in the current table based on row index and column index
*
* @param cellrowidx
* Row Index
* @param cellcolidx
* Column Index
* @return Cell Object
*/
Public Dispatch Getcell (int cellrowidx, int cellcolidx) {
if (this.table = null)
return This.cell;
if (cellrowidx >= 0 && cellcolidx >= 0)
This.cell = Dispatch.call (this.table, "cell",
New Variant (CELLROWIDX), new variant (CELLCOLIDX)
. Todispatch ();
return This.cell;
}
public void Selectcell (int cellrowidx, int cellcolidx) {
if (this.table = null)
Return
Getcell (Cellrowidx, CELLCOLIDX);
if (cellrowidx >= 0 && cellcolidx >= 0)
Dispatch.call (This.cell, "select");
}
/**
* Set the title of the current document
*
* @param title
* @param alignmenttype Alignment
* @see Setalignment
*/
public void Settitle (String title, int alignmenttype) {
if (title = NULL | | "". Equals (title))
Return
if (this.alignment = null)
This.getalignment ();
if (alignmenttype!= 0 && alignmenttype!= 1 && alignmenttype!= 2)
Alignmenttype = 0;
Dispatch.put (this.alignment, "alignment", alignmenttype);
Dispatch.call (this.selection, "TypeText", title);
}
/**
* Set the thickness of the current table border
*
* @param width
* Range: 1 < W < 13, if 0, on behalf of?] There are boxes <br/>
*/
public void settableborderwidth (int width) {
if (this.table = null)
Return
/*
* Set the table line Thickness 1: Represents the top one line 2: Represents the leftmost line 3: The bottom one line 4: The rightmost line 5: All horizontal lines except the top and bottom
* 6: All except the left and right side of the vertical bar 7: From the upper left to the lower right corner of the slash 8: from the bottom left to the upper right corner of the slash
*/
Dispatch borders = dispatch.get (table, "borders"). Todispatch ();
Dispatch border = null;
for (int i = 1; i < 7; i++) {
border = Dispatch.call (borders, "Item", New Variant (i))
. Todispatch ();
if (width!= 0) {
Dispatch.put (Border, "LineWidth", new Variant (width));
Dispatch.put (Border, "Visible", New Variant (true));
else if (width = = 0) {
Dispatch.put (Border, "Visible", new Variant (false));
}
}
}
/**
* Get the value in the cell specified by the specified table
*
* @param tableindex
* Table index (starting from 1)
* @param rowIndex
* Row index (starting from 1)
* @param colindex
* Column index (starting from 1)
* @return
*/
Public String Gettxtfromcell (int tableindex, int rowIndex, int colindex) {
String value = "";
Set as current table
GetTable (Tableindex);
Getcell (RowIndex, Colindex);
if (cell!= null) {
Dispatch.call (Cell, "select");
Value = Dispatch.get (Selection, "Text"). ToString ();
Value = value.substring (0, Value.length ()-2); Remove the final return character;
}
return value;
}
/**
* Set bullets and lists for the currently selected content
*
* @param tabIndex
* <ul>
* <li>1. Project number </li>
* <li>2. Number </li>
* <li>3. Multilevel numbering </li>
* <li>4. List style </li>
* </ul>
* @param index
* 0 means no, other numbers represent the first item in the tab page
*/
public void ApplyListTemplate (int tabIndex, int index) {
Get a list of ListGalleries objects
Dispatch listgalleries = Dispatch.get (This.word, "ListGalleries")
. Todispatch ();
Get an object in the list
Dispatch listgallery = Dispatch.call (ListGalleries, "Item",
New Variant (TabIndex)). Todispatch ();
Dispatch listtemplates = Dispatch.get (ListGallery, "ListTemplates")
. Todispatch ();
if (This.range = null)
This.getrange ();
Dispatch ListFormat = Dispatch.get (This.range, "ListFormat")
. Todispatch ();
Dispatch.call (ListFormat, "ApplyListTemplate"),
Dispatch.call (ListTemplates, "Item", New Variant (index)),
New Variant (TRUE), new variant (1), new variant (0));
}
/**
* Add Document Directory
*/
public void Addtablesofcontents () {
Get ActiveDocument, TablesOfContents, Range objects
Dispatch ActiveDocument = Word.getproperty ("ActiveDocument")
. Todispatch ();
Dispatch tablesofcontents = Dispatch.get (ActiveDocument,
"TablesOfContents"). Todispatch ();
Dispatch range = Dispatch.get (this.selection, Range). Todispatch ();
Add Directory
Dispatch.call (TablesOfContents, "Add", Range, new Variant (true),
The new Variant (1), the new variant (3), the new variant (TRUE), the new variant (
""), new variant (TRUE), new Variant (TRUE);
}
/**
* Set the current selection alignment
*
* @param alignmenttype
* <ul>
* <li>0 left </li>
* <li>1. Center </li>
* <li>2 Right </li>
* </ul>
*/
public void setalignment (int alignmenttype) {
if (this.alignment = null)
This.getalignment ();
Dispatch.put (this.alignment, "alignment", alignmenttype);
}
/**
* Get the current selection alignment
*
* @return Alignment
*/
Public Dispatch getalignment () {
if (this.selection = null)
This.getselection ();
This.alignment = Dispatch.get (this.selection, "ParagraphFormat")
. Todispatch ();
return this.alignment;
}
/**
* Get the Font object
*
* @return Font
*/
Public Dispatch GetFont () {
if (this.selection = null)
This.getselection ();
This.font = Dispatch.get (this.selection, "Font"). Todispatch ();
return this.font;
}
/**
* Set the current selection font
*
* @param fontname
* Font name, such as "Microsoft Ya Hei"
* @param isbold
* is bold
* @param isitalic
* Whether Italic
* @param isunderline
* Whether to underline
* @param rgbcolor
* Color value "1,1,1,1"
* @param Scale
* Font Spacing
* @param fontsize
* Font Size
*/
@Deprecated
public void Setfontscale (String fontname, Boolean isbold, Boolean isitalic,
Boolean isunderline, String rgbcolor, int Scale, int fontsize) {
Dispatch.put (This.font, "Name", FontName);
Dispatch.put (This.font, "Bold", isbold);
Dispatch.put (This.font, "Italic", isitalic);
Dispatch.put (This.font, "underline", isunderline);
Dispatch.put (This.font, "Color", RGBColor);
Dispatch.put (This.font, "scaling", Scale);
Dispatch.put (This.font, "Size", fontsize);
}
/**
* Set the font for the current selection
* @param whether the IsBold is bold
* @param whether the isitalic is italic
* @param Isunderline is underlined
* @param color RGB font colors For example: Red 255,0,0
* @param size Font 12: Small 416: Third
* @param name font names For example: XXFarEastFont-Arial, XXFarEastFont-Arial, italic, Arial
*/
public void SetFont (Boolean isbold,boolean isitalic,boolean isunderline,string color,string size,string name) {
Dispatch font = Dispatch.get (GetSelection (), "Font"). Todispatch ();
Dispatch.put (font, "name", new Variant (name));
Dispatch.put (font, "Bold", New Variant (IsBold));
Dispatch.put (Font, "Italic", New Variant (Isitalic));
Dispatch.put (font, "underline", new Variant (Isunderline));
if (! "". Equals (color))
Dispatch.put (font, "color", color);
Dispatch.put (font, "size", size);
}
/**
* Save File
*
* @param OutputPath
* Save Path
*/
public void SaveAs (String outputpath) {
if (this.document = null)
Return
if (OutputPath = null | | "". Equals (OutputPath))
Return
Dispatch.call (this.document, "SaveAs", OutputPath);
}
/**
* Save As HTML content
*
* @param htmlfile
* HTML file path
*/
public void saveashtml (String htmlfile) {
Dispatch.invoke (this.document, "SaveAs", Dispatch.method, new object[] {
Htmlfile, New Variant (8)}, new int[1]);
}
/**
* SaveFormat | Member name Description 0 | wdFormatDocument Microsoft Word
* format. 1 | wdFormatTemplate Microsoft Word template format. 2 |
* Wdformattext Microsoft Windows text format. 3 | Wdformattextlinebreaks
* Microsoft Windows text format with line breaks preserved. 4 |
* wdFormatDOSText Microsoft DOS text format. 5 | wdFormatDOSTextLineBreaks
* Microsoft DOS text with line breaks preserved. 6 | wdFormatRTF Rich Text
* Format (RTF). 7 | Wdformatencodedtext encoded text format. 7 |
* Wdformatunicodetext Unicode text format. 8 | wdformathtml Standard HTML
* format. 9 | Wdformatwebarchive WEB archive format. 10 |
* wdformatfilteredhtml filtered HTML format. 11 | Wdformatxml Extensible
* Markup Language (XML) format.
*/
/**
* Close the current Word document
*/
public void Close () {
if (document = = NULL)
Return
Dispatch.call (document, "Close", New Variant (0));
}
/**
* Execute the current document Print command
*/
public void Printfile () {
if (document = = NULL)
Return
Dispatch.call (document, "PrintOut");
}
/**
* Exit Microsoft Office Word Program
*/
public void Quit () {
Word.invoke ("Quit", new variant[0]);
Comthread.release ();
}
/**
* Select entire document
*/
public void Selectallcontent () {
Dispatch.call (this.document, "select");
}
/**
* Copy Entire document
* @param target
*/
public void copy () {
Dispatch.call (this.document, "select");
Dispatch.call (this.selection, "copy");
}
/**
* Paste the selection at the current insertion point position
*/
public void paste () {
Dispatch.call (this.selection, "paste");
}
public static void Main (string[] args) throws IOException {
Msofficegeneratorutils officeutils = new Msofficegeneratorutils (true);
Officeutils.opendocument ("D:\TRS\TRSWCMV65HBTCIS\Tomcat\webapps\wcm\eipv65\briefreport\templates\zhengfa\ Head. doc ");
Officeutils.replaceall ("${briefreport_year}", "2011");
Officeutils.replaceall ("${briefreport_issue}", "3");
File File = File.createtempfile ("Test", ". tmp");
System.out.println (File.getabsolutepath ());
File.delete ();
File File = new file ("C:\docume~1\admini~1\locals~1\temp\test5411720146039914615.tmp");
System.out.println (File.exists ());
Officeutils.createnewdocument ();
Officeutils.createnewtable (1, 1, 1);
Officeutils.inserttext ("Published time: 2011-11-11");
Officeutils.moveright (1);
Officeutils.inserttext ("T");
Officeutils.moveright (1);
Officeutils.inserttext ("Channel: Macro Environment/social environment");
Officeutils.moveright (1);
Officeutils.inserttext ("T");
Officeutils.moveright (1);
Officeutils.inserttext ("article Author: Yang Yemao");
Officeutils.moveright (1);
Officeutils.inserttext ("I ' m Chinese");
Officeutils.moveright (1);
Officeutils.enterdown (1);
Officeutils.inserttext ("I ' m not Chinese");
Officeutils.moveright (1);
/* Doc2 = Dispatch.call (documents, "Open", Anotherdocpath). Todispatch ();
Dispatch paragraphs = dispatch.get (doc2, "paragraphs"). Todispatch ();
Dispatch paragraph = dispatch.call (paragraphs, "Item", New Variant (Paragraphindex)). Todispatch ();
Officeutils.setfontscale ("Microsoft Ya-Black", true, True, true, "1,1,1,1", 100,
18);
Officeutils.setalignment (1);
Officeutils.inserttotext ("This is a Test");
Officeutils.moveend ();
Officeutils.setfontscale ("Microsoft Ya-Black", false, False, False, "1,1,1,1", 100,
18);
Officeutils.insertimage ("d:\11.jpg");
Officeutils.enterdown (1);
Officeutils.inserttotext ("This is my Photo");
Officeutils.enterdown (1);
Officeutils.createnewtable (3, 5, 1);
list<string[]> list = new arraylist<string[]> ();
for (int i = 0; i < 3; i++) {
string[] STRs = new STRING[5];
for (int j = 0; J < 5; J + +) {
STRS[J] = j + i + "";
// }
List.add (STRs);
// }
Officeutils.inserttotable (list);
Officeutils.createnewtable (10, 10, 1);
Officeutils.moveend ();
Officeutils.enterdown (1);
Officeutils.createnewtable (3,2,1);
Officeutils.mergecell (1, 1, 7, 1, 9);
Officeutils.mergecell (1, 2, 2, 3, 7);
Officeutils.mergecell (1, 3, 4, 9, 10);
Officeutils.inserttext ("123");
Officeutils.getcell (1, 2);
Officeutils.splitcell (2, 4);
Officeutils.selectcell (1, 2);
Officeutils.inserttext ("split");
Officeutils.selectcell (1, 5);
Officeutils.inserttext ("Split1");
Officeutils.selectcell (1, 6);
Officeutils.inserttext ("yy");
Officeutils.selectcell (2, 4);
Officeutils.inserttext ("LTG");
Officeutils.saveas ("D:\" + system.currenttimemillis () + ". Doc");
Officeutils.close ();
Officeutils.quit ();
}
}
Testjsoupcomponent
Package com.topstar.test;
Import Java.io.File;
Import Java.io.FileWriter;
Import java.io.IOException;
Import java.util.ArrayList;
Import Java.util.HashMap;
Import java.util.List;
Import Java.util.Map;
Import Java.util.Map.Entry;
Import Java.util.UUID;
Import Org.jsoup.Jsoup;
Import org.jsoup.nodes.Document;
Import org.jsoup.nodes.Element;
Import Org.jsoup.nodes.Node;
Import com.eprobiti.trs.TRSException;
/** * Basic idea: Get HTML content, because nonstandard HTML content, use the Jsoup component to convert the content that reads out to the standard HTML file content,
* Then iterate over each node, find the IMG tag, record its index, and then according to its filename rules stitching out the physical path of the picture, replace it with ${image_index} identity, and then {index, PATH}
* In the form of a key-value pair to the map, such as
* "${image_1,d:lucene.png}" format, then use the Jacob component to open the Template.doc, select the entire document and copy, and then create a new document, paste just copied inside
* Find a picture ID, replace it with a picture
*
* @since 2011-12-09
* @author Xioawu
* @cateogry Topstar
* @version 1.0
*/
public class Testjsoupcomponent {
private static document document;
private static map<string, string> Imgmap = new hashmap<string, string> (); Store picture identifiers and physical paths i.e {"image_1", "D:\lucene.png"};
private static list<string> files = new arraylist<string> (); File name of the local generated article doc
private static Integer Imgindex = 1; Picture ID
public static void Main (string[] args) throws Trsexception, IOException {
Msofficegeneratorutils officeutils = new Msofficegeneratorutils (true); To set the build process to invisible
String html = "<html>.....</html>";//Get body content, fill in HTML content yourself here
String Header = "Test title"; Get the article title
Document = Jsoup.parse (HTML);
System.out.println (document.html ());
For (Element element:document.body (). Select (' Body > * '))
Recursively iterate through all the direct child elements under the body, find the IMG tag, @see Syselementtext method
Syselementtext (Element);
File File = new file ("D:" + file.separator + "Template.doc");
File.createnewfile (); Create template HTML
FileWriter FW = new FileWriter (file);
Fw.write (document.html (), 0, document.html (). Length ());//write file
Fw.flush (); Empty FileWriter Buffer
Fw.close ();
Officeutils.opendocument ("D:\template.doc"); Open Template.doc. template.doc files generated by Dochtmlcon in the Trsserver eipdocument library
Officeutils.copy (); Copy entire document
Officeutils.close ();
Officeutils.createnewdocument ();
Officeutils.paste (); Paste Entire Document
For (entry<string, string> entry:imgMap.entrySet ())//loop to replace the picture ID bit with a picture
Officeutils.replacetext2image (Entry.getkey (), Entry.getvalue ());
Officeutils.movestart (); Move the insertion point to the top of the Word document
Officeutils.setfont (True, False, False, "0,0,0", "20", "Arial"); Set the font, specific parameters, see the API yourself
Officeutils.settitle (header, 1); Set Title
Officeutils.enterdown (1); Set line return
String filename = Uuid.randomuuid (). toString ();
Files.add (filename); Record file name,
Officeutils.saveas ("D:" + file.separator + filename + ". doc"); Generates D:\UUID.doc files, using UUID to prevent the same name
Officeutils.close (); Close documents created by Office Word
Officeutils.quit (); Quit Office Word programs
Msofficegeneratorutils msofficeutils = new Msofficegeneratorutils (false); The consolidation process is set to visible
Msofficeutils.createnewdocument ();
Msofficeutils.saveas ("D:" + file.separator + "Complete.doc");
Msofficeutils.close ();
for (String filename:files) {
Msofficeutils.opendocument ("D:" + file.separator + fileName + ". Doc");
Msofficeutils.copy ();
Msofficeutils.close ();
Msofficeutils.opendocument ("D:" + file.separator + "Complete.doc");
Msofficeutils.moveend ();
Msofficeutils.enterdown (1);
Msofficeutils.paste ();
Msofficeutils.saveas ("D:" + file.separator + "Complete.doc");
Msofficeutils.close ();
}
Copy a *.doc document with less content to prevent the word program from being prompted with a large amount of copy content in memory, and whether it should be applied to another Program dialog box.
Msofficeutils.createnewdocument ();
Msofficeutils.inserttext ("test message");
Msofficeutils.copy ();
Msofficeutils.close ();
Msofficeutils.quit ();
Imgindex = 1;
Imgmap.clear ();
}
public static void Syselementtext (node node) {
if (Node.childnodes (). Size () = 0) {
if (Node.nodename (). Equals ("img")) {//Handling picture path problems
Node.after ("<p>${image_" + Imgindex + "}</p>"); Add a sibling P tag for IMG, Content <P>${image_imgIndexNumber}</P>
String src = node.attr ("src");
Node.remove (); Remove the IMG tag.
StringBuffer Imgurl = new StringBuffer ("D:\TRS\TRSWCMV65HBTCIS\WCMData\webpic\"); To temporarily write the path directly to death, the formal application should be rewritten here as a Webpic configuration item
Imgurl.append (src.substring (0, 8)). Append ("\"). Append (src.subsequence (0)). Append ("\"). Append (SRC);
Node.attr ("src", imgurl.tostring ()); This is not necessary because the IMG tag has been removed
Imgmap.put ("${image_" + imgindex++ + "}", imgurl.tostring ());
}
} else {
For (Node rNode:node.childNodes ()) {
Syselementtext (Rnode);
}
}
}
}