http://community.csdn.net/Expert/topic/3673/3673099.xml?temp=.2826197

解决方案 »

  1.   

    用iText或jacrob,建议用iText纯java方式进行,但缺点就是不能读。
    iText本身提供有很好的例子。详细信息:http://www.lowagie.com/iText/
      

  2.   

    GJA106(中文字符) 能说的具体点吗 你那里有没有比较复杂的例子呢
      

  3.   

    看一下iText自带的例子够用了(iText_examples\src\com\lowagie\examples\rtf),基本满足要求,更复杂的我也没有处理过。
      

  4.   

    我现在想用jacob处理word ,iText 我没有用 好像不适合我做的这个 ,有谁用jacob处理过word文档的吗,分不够在加 最好能给我个比较复杂的例子 谢谢哦
      

  5.   

    个有感觉iTex使用起来比jacob方便:)jacob例子:import com.jacob.activeX.*;
    import com.jacob.com.*;
    import java.io.File;public class testJab {
        public testJab() {
        }    public static void testAddOK() {
            String strModulNo = "00001\n";
            String strModulSecret = "秘密等级★\n";
            String strModulLimited = "年限\n";
            String strModulTitle = "关于XXXXX的通知\n";
            String strModulFGFuBegin = "-----------------------------------------------------\n";
            String strModulContents ="建议:增加本系统与XX系统的接口。。实现(请蒙、肖负责提炼)";
            String strModulFGFuEnd = "-----------------------------------------------------\n";
            String strModulEndFormat = "抄送:xxxx xxx单位 yyy单位\nzzz集团";        ActiveXComponent objWord = null;
            Object objDocument = null;
            Object objContent = null;
            boolean tVisible = true;
            boolean tSaveOnExit = false;
            try {
                objWord = new ActiveXComponent("Word.Application"); //Application type
                objWord.setProperty("Visible", new Variant(tVisible)); //窗口可视化标志
                Object objDOC = objWord.getProperty("Documents").toDispatch();
                objContent = Dispatch.call(objDOC, "Add", "").toDispatch(); //创建新文档
                Object oSelection = Dispatch.get(objWord, "Selection").toDispatch();
                Object doc=Dispatch.get(objWord,"ActiveDocument").toDispatch();
             //   Object moSpace=Dispatch.get(doc,"ModelSpace").toDispatch();
                //Text Format
                Object font = Dispatch.get(oSelection, "Font").toDispatch();
                Object alignment = Dispatch.get(oSelection, "ParagraphFormat").toDispatch();            Object image = Dispatch.get(oSelection, "InLineShapes").toDispatch();//只能进行加图片功能,没有画线功能            /////////////////////////////写入文件号/////////////////////////////
                Dispatch.call(oSelection, "MoveDown"); //MoveDonw没有起到回车的作用,只是移到下一个位置
                Dispatch.put(oSelection, "Text", strModulNo); //内容中必需带有回车符
                Object oFont = Dispatch.get(oSelection, "Font").toDispatch();
                Object oAlign = Dispatch.get(oSelection, "ParagraphFormat").toDispatch();
                Dispatch.put(oAlign, "Alignment", "3"); //文件件呈号,居左            //////////////////////////////写秘密等级及保存年限/////////////////////////////
                Dispatch.call(oSelection, "MoveDown");
                Dispatch.put(oSelection, "Text", strModulSecret);
                oFont = Dispatch.get(oSelection, "Font").toDispatch();
                Dispatch.put(oFont, "Name", "黑体"); //选择字体
                Dispatch.put(oFont, "Bold", "1");
                Dispatch.put(oFont, "Italic", "0");
                Dispatch.put(oFont, "Underline", "0");
                Dispatch.put(oFont, "Size", "20");
                Dispatch.put(oFont, "Color", "1,0,0,0");
                oAlign = Dispatch.get(oSelection, "ParagraphFormat").toDispatch();
                Dispatch.put(oAlign, "Alignment", "2"); //秘密等级居右            Dispatch.call(oSelection, "MoveDown");
                Dispatch.put(oSelection, "Text", strModulLimited);
                //Dispatch.put(oFont, "Name","黑体"); //选择字体
                oFont = Dispatch.get(oSelection, "Font").toDispatch();
                Dispatch.put(oFont, "Bold", "1");
                Dispatch.put(oFont, "Italic", "0");
                Dispatch.put(oFont, "Underline", "0");
                Dispatch.put(oFont, "Size", "20");
                Dispatch.put(oFont, "Color", "1,0,0,0");
                oAlign = Dispatch.get(oSelection, "ParagraphFormat").toDispatch();
                Dispatch.put(oAlign, "Alignment", "2"); //保存年限居右            //////////////////////////////写文件标题/////////////////////////////
                Dispatch.call(oSelection, "MoveDown");
                Dispatch.put(oSelection, "Text", strModulTitle);
                oFont = Dispatch.get(oSelection, "Font").toDispatch();
                Dispatch.put(oFont, "Name", "黑体"); //选择字体
                Dispatch.put(oFont, "Bold", "1");
                Dispatch.put(oFont, "Italic", "0");
                Dispatch.put(oFont, "Underline", "0");
                Dispatch.put(oFont, "Size", "20");
                Dispatch.put(oFont, "Color", "1,0,0,0");
                oAlign = Dispatch.get(oSelection, "ParagraphFormat").toDispatch();
                Dispatch.put(oAlign, "Alignment", "1"); //文件标题居中            //////////////////////////////画线/////////////////////////////
                Dispatch.call(oSelection, "MoveDown");
                //Object objAddLine = objWord.invoke(objDOC,"AddLine",Dispatch.Method,new Object[]{},new int [1]).toDispatch();
                //Dispatch.put(oSelection,Dispatch.DISPID_FILLSTYLE, "Shape");
                //Dispatch.put(doc,"Range", "100, 100, 60, 20");
                //Dispatch.put(doc,"AddLine", "1, 0, 0, 0");
                //Dispatch.put(oSelection, "AddLine", "100, 100, 60, 20");
                Object shape = Dispatch.get(oSelection, "ShapeRange").toDispatch();
                double[] point1 = {0.0, 0.0, 0.0};
                double[] point2 = {10.0, 10.0, 0.0};
                //Create SafeArrays
                SafeArray sap1 = new SafeArray(Variant.VariantDouble, 3);
                SafeArray sap2 = new SafeArray(Variant.VariantDouble, 3);
                //populate them
                sap1.fromDoubleArray(point1);
                sap2.fromDoubleArray(point2);
                //wrap them in Variant. Is this correct?
                Variant vt1 = new Variant();
                Variant vt2 = new Variant();
                vt1.putSafeArray(sap1);
                vt1.putSafeArray(sap2);            //This next line throws an exception
                Dispatch.call(oSelection, "AddLine");
                Object acadLine = Dispatch.invoke
                    (oSelection, "AddLine", Dispatch.Method, new Object[] {vt1, vt2}
                     , new int[1]).toDispatch();            //Dispatch.put(oSelection,"Shadow","true");
                //Dispatch.put(shape,"AddLine","100, 100, 60, 20");
               //Dispatch.call(oSelection, "ShapeRange");
                //Dispatch.call(image, "AddLine", "100, 100, 60, 20");
                oAlign = Dispatch.get(oSelection, "ParagraphFormat").toDispatch();
                Dispatch.put(oAlign, "Alignment", "1"); //文件标题居中            //////////////////////////////写文件隔符-开始/////////////////////////////
                Dispatch.call(oSelection, "MoveDown");
                Dispatch.put(oSelection, "Text", strModulFGFuBegin);
                oFont = Dispatch.get(oSelection, "Font").toDispatch();
                Dispatch.put(oFont, "Name", "黑体"); //选择字体
                Dispatch.put(oFont, "Bold", "1");
                Dispatch.put(oFont, "Italic", "0");
                Dispatch.put(oFont, "Underline", "0");
                Dispatch.put(oFont, "Size", "20");
                Dispatch.put(oFont, "Color", "1,0,0,0");
                oAlign = Dispatch.get(oSelection, "ParagraphFormat").toDispatch();
                Dispatch.put(oAlign, "Alignment", "1"); //写文件隔符居中            //////////////////////////////写文件内容/////////////////////////////
                Dispatch.call(oSelection, "MoveDown");
                Dispatch.put(oSelection, "Text", strModulContents);
                oFont = Dispatch.get(oSelection, "Font").toDispatch();
                Dispatch.put(oFont, "Bold", "0");
                Dispatch.put(oFont, "Italic", "0");
                Dispatch.put(oFont, "Underline", "0");
                Dispatch.put(oFont, "Size", "12");
                Dispatch.put(oFont, "Color", "0,0,0,0");
                oAlign = Dispatch.get(oSelection, "ParagraphFormat").toDispatch();
                Dispatch.put(oAlign, "Alignment", "3"); //文件内容居左
      

  6.   

    //////////////////////////////写文件隔符-结束/////////////////////////////
                Dispatch.call(oSelection, "MoveDown");
                Dispatch.put(oSelection, "Text", strModulFGFuEnd);
                oFont = Dispatch.get(oSelection, "Font").toDispatch();
                Dispatch.put(oFont, "Bold", "1");
                Dispatch.put(oFont, "Italic", "0");
                Dispatch.put(oFont, "Underline", "0");
                Dispatch.put(oFont, "Size", "20");
                Dispatch.put(oFont, "Color", "1,0,0,0");
                oAlign = Dispatch.get(oSelection, "ParagraphFormat").toDispatch();
                Dispatch.put(oAlign, "Alignment", "1"); //写文件隔符居中            //////////////////////////////写文件结束符///////////////strModulEndFormat
                Dispatch.call(oSelection, "MoveDown");
                Dispatch.put(oSelection, "Text", strModulEndFormat);
                oFont = Dispatch.get(oSelection, "Font").toDispatch();
                Dispatch.put(oFont, "Bold", "1");
                Dispatch.put(oFont, "Italic", "0");
                Dispatch.put(oFont, "Underline", "0");
                Dispatch.put(oFont, "Size", "20");
                Dispatch.put(oFont, "Color", "1,0,0,0");
                oAlign = Dispatch.get(oSelection, "ParagraphFormat").toDispatch();
                Dispatch.put(oAlign, "Alignment", "3"); //写文件隔符居左            Dispatch.call(oSelection, "MoveDown");
                Dispatch.put(oSelection, "Text", "\nSo we got the next line including BR.\n");            //////////////////////////////////////////////////////////////////////
                oFont = Dispatch.get(oSelection, "Font").toDispatch();
                Dispatch.put(oFont, "Bold", "1");
                Dispatch.put(oFont, "Italic", "1");
                Dispatch.put(oFont, "Underline", "0");
                Dispatch.put(oFont, "Size", "20");
                Dispatch.put(oFont, "Color", "1,0,0,0");
                //Dispatch.put(oFont, "centre", "1");
                //Dispatch.put(oFont, "block", "1");
                //Object range=Dispatch.get(oSelection,"Range").toDispatch();
                // Dispatch.put(range, "Color", "1,0,0,0");            //
                Dispatch.call(image, "AddPicture", "c:/jsplife.png");
                Dispatch.call(oSelection, "TypeParagraph");
                Dispatch.put(alignment, "Alignment", "3");            //////////////////////////////////////////////////////////////////////
                oAlign = Dispatch.get(oSelection, "ParagraphFormat").toDispatch();
                Dispatch.put(oAlign, "Alignment", "1");
                Dispatch.call(oSelection, "TypeParagraph");            //To jump page
                Dispatch.call(oSelection, "InsertBreak");
            }
            finally {
                Dispatch.call(objContent, "SaveAs", "c:/test.doc"); //Save the document
                objWord.invoke("Quit", new Variant[] {}); //Quit the application
            }
        }    
        public static void testFindReplace() {
            try {
                String sInputDoc = "E:\\work\\testWord\\file_in.doc";
                String sOutputDoc = "E:\\work\\testWord\\file_out.doc";
                String sOldText = "[label:import:1]";
                String sNewText = "I am some horribly long sentence, so long that [insert bullshit here]";
                boolean tVisible = true;
                boolean tSaveOnExit = false;
                /////////////////////////////////////////////////////////////
                ActiveXComponent oWord = new ActiveXComponent("Word.Application");
                oWord.setProperty("Visible", new Variant(tVisible));
                Object oDocuments = oWord.getProperty("Documents").toDispatch();
                Object oDocument = Dispatch.call(oDocuments, "Open", sInputDoc).toDispatch();
                Object oSelection = oWord.getProperty("Selection").toDispatch();
                Object oFind = oWord.call(oSelection, "Find").toDispatch();            //////////////////////////////////////////////////////////////////////
                Dispatch.put(oFind, "Text", sOldText);
                Dispatch.call(oFind, "Execute");
                Dispatch.put(oSelection, "Text", sNewText);            //////////////////////////////////////////////////////////////////////
                Dispatch.call(oSelection, "MoveDown");
                Dispatch.put(oSelection, "Text", "\nSo we got the next line including BR.\n");            //////////////////////////////////////////////////////////////////////
                Object oFont = Dispatch.get(oSelection, "Font").toDispatch();
                Dispatch.put(oFont, "Bold", "1");
                Dispatch.put(oFont, "Italic", "1");
                Dispatch.put(oFont, "Underline", "0");
                Dispatch.put(oFont, "Size", "20");
                Dispatch.put(oFont, "Color", "1,0,0,0");
                //////////////////////////////////////////////////////////////////////
                Object oAlign = Dispatch.get(oSelection, "ParagraphFormat").toDispatch();
                Dispatch.put(oAlign, "Alignment", "1");
                // Dispatch.put(oAlign, "Color", "1");
                //////////////////////////////////////////////////////////////////////
                Object oWordBasic = Dispatch.call(oWord, "WordBasic").getDispatch();
                Dispatch.call(oWord, "SaveAs", sInputDoc);
                //Dispatch.call(oWordBasic, "FileSave", sInputDoc);
                Dispatch.call(oDocument, "Close", new Variant(tSaveOnExit));
                oWord.invoke("Quit", new Variant[0]);            //////////////////////////////////////////////////////////////////////
                /* String sImgFile = "e:\\jsplife.png";
                 Dispatch.call(oSelection, "MoveDown");
                 Object oImage = Dispatch.get(oSelection, "InLineShapes").toDispatch();
                 Dispatch.call(oImage, "AddPicture", sImgFile);
                 Dispatch.call(oDocument, "Close", new Variant(tSaveOnExit));
                 //////////////////////////////////////////////////////////////////////*/
                 //////////////////////////////////////////////////////////////////////        }
            catch (Exception eEe) {
                eEe.printStackTrace();
            }
        }    public static void main(String[] args) {
            testJab.testFindReplace();
            //testJab.testAdd();
            //testJab.testAddOK();
            testJab.testAddLine();
        }   
    }
      

  7.   

    这个例子成功了的吗 我现在写了一个  只能向word里面加一行文字 ,我怎么改也不能加2行文字进去,怎么办啊
      

  8.   

    这个例子中的testAddLine()在哪里定义了?
      

  9.   

    这个例子中的testAddLine()在哪里定义了?