怎麼用java語言將word,java語言怎麼編寫

本文目錄一覽:

如何通過java將多個word文檔合成一個wor

國內有個免費的jar(Free Spire.Doc for Java),可用來合併Word文檔,分兩種合併方法:1.合併的內容新起一頁;2.合併的內容承接上文段落。

1.新起一頁合併

import com.spire.doc.Document;

import com.spire.doc.FileFormat;

public class MergeWordDocument {

    public static void main(String[] args){

        //獲取第一個文檔的路徑

        String filePath1 = “merge1.docx”;

        //獲取第二個文檔的路徑

        String filePath2 = “merge2.docx”;

        //加載第一個文檔

        Document document = new Document(filePath1);

        //使用insertTextFromFile方法將第二個文檔的內容插入到第一個文檔

        document.insertTextFromFile(filePath2, FileFormat.Docx_2013);

        //保存文檔

        document.saveToFile(“Output.docx”, FileFormat.Docx_2013);

    }

}

2.承接上文段落合併

import com.spire.doc.Document;

import com.spire.doc.DocumentObject;

import com.spire.doc.FileFormat;

import com.spire.doc.Section;

public class MergeWordDocument {

    public static void main(String[] args){

        //獲取第一個文檔的路徑

        String filePath1 = “merge1.docx”;

        //獲取第二個文檔的路徑

        String filePath2 = “merge2.docx”;

        //加載第一個文檔

        Document document1 = new Document(filePath1);

        //加載第二個文檔

        Document document2 = new Document(filePath2);

        //獲取第一個文檔的最後一個section

        Section lastSection = document1.getLastSection();

        //將第二個文檔的段落作為新的段落添加到第一個文檔的最後一個section

        for (Section section:(Iterable Section)document2.getSections()) {

            for (DocumentObject obj:(Iterable DocumentObject)section.getBody().getChildObjects()

            ) {

                lastSection.getBody().getChildObjects().add(obj.deepClone());

            }

        }

        //保存文檔

        document1.saveToFile(“Output.docx”, FileFormat.Docx_2013);

    }

}

可參考原文。

如何用純java代碼實現word轉pdf?

1:用apache pio 讀取doc文件,然後轉成html文件用Jsoup格式化html文件,最後用itext將html文件轉成pdf。

2:使用jdoctopdf來實現,這是一個封裝好的包,可以把doc轉換成pdf,html,xml等格式,調用很方便。

3:地址

需要注意中文字體的寫入問題。

4:使用jodconverter來調用openOffice的服務來轉換,openOffice有個各個平台的版本,所以這種方法跟方法1一樣都是跨平台的。

jodconverter的下載地址:

首先要安裝openOffice,下載地址:office.org/download/index.html” target=”_blank”

5:安裝完後要啟動openOffice的服務,具體啟動方法請自行google。

6:效果最好的一種方法,但是需要window環境,而且速度是最慢的需要安裝msofficeWord以及SaveAsPDFandXPS.exe(word的一個插件,用來把word轉化為pdf)

7:Office版本是2007,因為SaveAsPDFandXPS是微軟為office2007及以上版本開發的插件。

8:SaveAsPDFandXPS下載地址:microsoft.com/zh-cn/download/details.aspx?id=7″ target=”_blank”。

9:需要轉換的工具 ,看你是linux還是word 。word還好不需要安裝。linux就麻煩了。

爪哇是一種可以撰寫跨平台應用軟件的面向對象的程序設計語言,是由Sun Microsystems公司於1995年5月推出的Java程序設計語言和Java平台(即JavaEE, JavaME, JavaSE)的總稱。Java自面世後就非常流行,發展迅速,對C++語言形成了有力衝擊。Java技術具有卓越的通用性、高效性、平台移植性和安全性,廣泛應用於個人PC、數據中心、遊戲控制台、科學超級計算機、流動電話和互聯網,同時擁有全球最大的開發者專業社群。在全球雲計算和移動互聯網的產業環境下,Java更具備了顯著優勢和廣闊前景。

如何在java中讀取word文件

java讀取word文檔,獲取文本內容,保留基本的換行格式。

java用POI對word進行解析。所需jar包,用maven引入

dependency

groupIdorg.apache.poi/groupId

artifactIdpoi-scratchpad/artifactId

version3.2-FINAL/version

/dependency

前端用webuploader上傳控件,限制上傳文件類型僅支持text和word.

後台MultipartFile接收文件,根據ContentType區分文件類型,區分解析獲取文件內容。

word解析:

txt為word的文本內容

如何使用java操作word 文檔

如果沒有特殊需求,可以直接使用jacob_*.zip中提供的jacob.jar和jacob.dll。把jacob.dll文件放在系統可以找得到的

路徑上,一般放c:/windows/system32下就行了,注意你用的jacob.dll文件和你的jacob.jar包要匹配,否則會報錯哦! 

如果想自己編譯也很簡單,把jacob_*_src.zip解開,建個工程,在build.xml中稍作配置即可: 

property name=”JDK” value=”D:\Java\j2sdk1.4.2_13″/  

property name=”MSDEVDIR” value=”D:\Microsoft Visual Studio\VC98″/  

property name=”version” value=”1.12″/

看出來了嗎,你的機器上需要有JDK和VC環境,VC是用來生成jacob.dll文件的,如果編譯時說找不到MSPDB60.DLL,那就在你的

Microsoft Visual Studio目錄下搜索一下,拷貝到D:\Microsoft Visual

Studio\VC98\Bin下就行了。

如果需要對jacob里的jar包改名,(雖然通常不會發生這種情況,但如果你需要兩個版本的jacob同時使用,改名可能是一種選擇),這時你的工作就多一些:

(1)package改名是必須的了,比如我們把src下的com.jacob.activeX改為com.test.jacob.activeX,把

com.jacob.com改為com.test.jacob.com,打包時只有這兩個包是有用的,所以只改它們就夠了。

(2)然後修改build.xml中src.java.jacob.mainpackage的value為com.test.jacob,修改java.class.main的value為com.test.jacob.com.Jacob。

(3)別忘了javaJarBin中打包的源碼路徑也要改,include name=”com/**/*.class” /改為include name=”com/test/**/*.class” /。

(4)build.xml中對生成的dll和jar包也要改個名,比如我們把這兩個文件改為jacob_test.dll和

jacob_test.jar。修改build.xml中的enerated.filename.dll和generated.filename.jar

的value為你新改的名字。

(5)com.test.jacob.com.LibraryLoader中,System.loadLibrary(“jacob”);改成

System.loadLibrary(“jacob_test”);

(6)另外,很重要的,在jni中*.cpp和*.h中com_jacob_com統一改為com_test_jacob_com,com/jacob

/com統一改為com/test/jacob/com。

(7)ant編譯,編譯好的文件在release目錄下。

(8)最後把編譯好的jacob_test.dll文件放在windows/system32下就大功告成了。

現在該用到jacob.jar了,如果你自己修改過jar包的名字,用新改的jar包,如jacob_test.jar,這裡統一稱為jacob.jar。

首先在classpath中引入jacob.jar包,如果是web應用,WEB-INF的lib中也要加入jacob.jar包。

下面給一個例子:

類ReplaceWord.java

import com.jacob.com.*;

import com.jacob.activeX.*;

public class ReplaceWord {

public static void main(String[] args) {

ActiveXComponent app = new ActiveXComponent(“Word.Application”); //啟動word

String inFile = “C:\\test.doc”; //要替換的word文件

try {

app.setProperty(“Visible”, new Variant(false)); //設置word不可見  

Dispatch docs = app.getProperty(“Documents”).toDispatch();

Dispatch doc = Dispatch.invoke(docs,”Open”,Dispatch.Method,new

Object[] { inFile, new Variant(false),new Variant(false) }, new

int[1]).toDispatch();

//打開word文件,注意這裡第三個參數要設為false,這個參數表示是否以只讀方式打開,因為我們要保存原文件,所以以可寫方式打開。

Dispatch

selection=app.getProperty(“Selection”).toDispatch();//獲得對Selection組件

Dispatch.call(selection, “HomeKey”, new Variant(6));//移到開頭

Dispatch find = Dispatch.call(selection, “Find”).toDispatch();//獲得Find組件

Dispatch.put(find, “Text”, “name”); //查找字符串”name”

Dispatch.call(find, “Execute”); //執行查詢

Dispatch.put(selection, “Text”, “張三”); //替換為”張三”

Dispatch.call(doc, “Save”); //保存

Dispatch.call(doc, “Close”, new Variant(false));

} catch (Exception e) {

e.printStackTrace();

} finally {

app.invoke(“Quit”, new Variant[] {});

app.safeRelease();

}

}

}

也許你會問,我怎麼知道要調用哪個方法傳哪些參數來進行操作?別忘了,word還有宏呢!自己錄製一個宏,編輯這個宏就可以看到代碼了!用哪個對象的哪個方法就看你的了。

我總結了一下:

document下的組件都用Dispatch selection=app.getProperty(“Selection”).toDispatch()這種方法獲得;

再往下的組件就需要調用selection的方法來獲取,如 Dispatch find = Dispatch.call(selection, “Find”).toDispatch();

如果某個方法需要參數,Dispatch doc =

Dispatch.invoke(docs,”Open”,Dispatch.Method,new Object[] { inFile, new

Variant(false),new Variant(false) }, new

int[1]).toDispatch()是一個例子,這是調用docs的Open方法,Object[]數組裡就是它需要的參數了;

如果要修改某個組件的屬性呢,用Dispatch.put(find, “Text”, “name”)這種形式,”Text”是屬性名,”name”是值。

怎麼用java導出word

java導出word代碼如下:

package com.bank.util;

import java.awt.Color;

import java.io.FileOutputStream;

import java.io.IOException;

import com.lowagie.text.Cell;

import com.lowagie.text.Document;

import com.lowagie.text.DocumentException;

import com.lowagie.text.Element;

import com.lowagie.text.Font;

import com.lowagie.text.FontFactory;

import com.lowagie.text.Image;

import com.lowagie.text.PageSize;

import com.lowagie.text.Paragraph;

import com.lowagie.text.Phrase;

import com.lowagie.text.Table;

import com.lowagie.text.pdf.BaseFont;

import com.lowagie.text.rtf.RtfWriter2;

public class WordTools {

public void createDocContext(String file) throws DocumentException,

IOException {

// 設置紙張大小

Document document = new Document(PageSize.A4);

// 建立一個書寫器(Writer)與document對象關聯,通過書寫器(Writer)可以將文檔寫入到磁盤中

RtfWriter2.getInstance(document, new FileOutputStream(file));

document.open();

// 設置中文字體

BaseFont bfChinese = BaseFont.createFont(“STSongStd-Light”,

“UniGB-UCS2-H”, BaseFont.NOT_EMBEDDED);

// 標題字體風格

Font titleFont = new Font(bfChinese, 12, Font.BOLD);

// 正文字體風格

Font contextFont = new Font(bfChinese, 10, Font.NORMAL);

Paragraph title = new Paragraph(“標題”);

// 設置標題格式對齊方式

title.setAlignment(Element.ALIGN_CENTER);

title.setFont(titleFont);

document.add(title);

String contextString = “iText是一個能夠快速產生PDF文件的java類庫。”

+ ” \n”// 換行

+ “iText的java類對於那些要產生包含文本,”

+ “表格,圖形的只讀文檔是很有用的。它的類庫尤其與java Servlet有很好的給合。”

+ “使用iText與PDF能夠使你正確的控制Servlet的輸出。”;

Paragraph context = new Paragraph(contextString);

// 正文格式左對齊

context.setAlignment(Element.ALIGN_LEFT);

context.setFont(contextFont);

// 離上一段落(標題)空的行數

context.setSpacingBefore(5);

// 設置第一行空的列數

context.setFirstLineIndent(20);

document.add(context);

//利用類FontFactory結合Font和Color可以設置各種各樣字體樣式

/**

* Font.UNDERLINE 下劃線,Font.BOLD 粗體

*/

Paragraph underline = new Paragraph(“下劃線的實現”, FontFactory.getFont(

FontFactory.HELVETICA_BOLDOBLIQUE, 18, Font.UNDERLINE,

new Color(0, 0, 255)));

document.add(underline);

// 設置 Table 表格

Table aTable = new Table(3);

int width[] = {25,25,50};

aTable.setWidths(width);//設置每列所佔比例

aTable.setWidth(90); // 占頁面寬度 90%

aTable.setAlignment(Element.ALIGN_CENTER);//居中顯示

aTable.setAlignment(Element.ALIGN_MIDDLE);//縱向居中顯示

aTable.setAutoFillEmptyCells(true); //自動填滿

aTable.setBorderWidth(1); //邊框寬度

aTable.setBorderColor(new Color(0, 125, 255)); //邊框顏色

aTable.setPadding(0);//襯距,看效果就知道什麼意思了

aTable.setSpacing(0);//即單元格之間的間距

aTable.setBorder(2);//邊框

//設置表頭

/**

* cell.setHeader(true);是將該單元格作為表頭信息顯示;

* cell.setColspan(3);指定了該單元格佔3列;

* 為表格添加表頭信息時,要注意的是一旦表頭信息添加完了之後, \

* 必須調用 endHeaders()方法,否則當表格跨頁後,表頭信息不會再顯示

*/

Cell haderCell = new Cell(“表格表頭”);

haderCell.setHeader(true);

haderCell.setColspan(3);

aTable.addCell(haderCell);

aTable.endHeaders();

Font fontChinese = new Font(bfChinese, 12, Font.NORMAL, Color.GREEN);

Cell cell = new Cell(new Phrase(“這是一個測試的 3*3 Table 數據”, fontChinese ));

cell.setVerticalAlignment(Element.ALIGN_TOP);

cell.setBorderColor(new Color(255, 0, 0));

cell.setRowspan(2);

aTable.addCell(cell);

aTable.addCell(new Cell(“#1”));

aTable.addCell(new Cell(“#2”));

aTable.addCell(new Cell(“#3”));

aTable.addCell(new Cell(“#4”));

Cell cell3 = new Cell(new Phrase(“一行三列數據”, fontChinese ));

cell3.setColspan(3);

cell3.setVerticalAlignment(Element.ALIGN_CENTER);

aTable.addCell(cell3);

document.add(aTable);

document.add(new Paragraph(“\n”));

//添加圖片

// Image img=Image.getInstance(“”);

// img.setAbsolutePosition(0, 0);

// img.setAlignment(Image.RIGHT);//設置圖片顯示位置

// img.scaleAbsolute(12,35);//直接設定顯示尺寸

// img.scalePercent(50);//表示顯示的大小為原尺寸的50%

// img.scalePercent(25, 12);//圖像高寬的顯示比例

// img.setRotation(30);//圖像旋轉一定角度

// document.add(img);

document.close();

}

public static void main(String[] args){

WordTools b=new WordTools();

try {

b.createDocContext(“d:/demo.doc”);

} catch (DocumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

java操作word 的有哪幾種方式

java讀取word文檔時,雖然網上介紹了很多插件poi、java2Word、jacob、itext等等,poi無法讀取格式(新的API估

計行好像還在處於研發階段,不太穩定,做項目不太敢用);java2Word、jacob容易報錯找不到註冊,比較詭異,我曾經在不同的機器上試過,操作

方法完全一致,有的機器不報錯,有的報錯,去他們論壇找高人解決也說不出原因,項目部署用它有點玄;itxt好像寫很方便但是我查了好久資料沒有見到過關

於讀的好辦法。經過一番選擇還是折中點採用rtf最好,畢竟rtf是開源格式,不需要藉助任何插件,只需基本IO操作外加編碼轉換即可。rtf格式文件表

面看來和doc沒啥區別,都可以用word打開,各種格式都可以設定。

—– 實現的功能:讀取rtf模板內容(格式和文本內容),替換變化部分,形成新的rtf文檔。

—– 實現思路:模板中固定部分手動輸入,變化的部分用$info$表示,只需替換$info$即可。

1、採用位元組的形式讀取rtf模板內容

2、將可變的內容字符串轉為rtf編碼

3、替換原文中的可變部分,形成新的rtf文檔

主要程序如下:

public String bin2hex(String bin) {

char[] digital = “0123456789ABCDEF”.toCharArray();

StringBuffer sb = new StringBuffer(“”);

byte[] bs = bin.getBytes();

int bit;

for (int i = 0; i bs.length;i++) {

bit = (bs[i] 0x0f0)

4;

sb.append(“\\'”);

sb.append(digital[bit]);

bit = bs[i] 0x0f;

sb.append(digital[bit]);

}

return sb.toString();

}

public String readByteRtf(InputStream ins, String path){

String sourcecontent =

“”;

try{

ins = new

FileInputStream(path);

byte[] b

= new byte[1024];

if (ins == null) {

System.out.println(“源模板文件不存在”);

}

int bytesRead = 0;

while (true) {

bytesRead = ins.read(b, 0, 1024); // return final read bytes

counts

if(bytesRead == -1) {// end of InputStream

System.out.println(“讀取模板文件結束”);

break;

}

sourcecontent += new String(b, 0, bytesRead); // convert to string

using bytes

}

}catch(Exception e){

e.printStackTrace();

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/194679.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-02 14:40
下一篇 2024-12-02 14:40

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29

發表回復

登錄後才能評論