java操作word書籤,word怎樣定義書籤

本文目錄一覽:

Java中對Word的操作(修改書籤的值),除了用jacob外,還有什麼?

報什麼異常?

先去了解一下STA、MTA的概念,如果使用了STA,就不能用線程B來訪問線程A創建的COM組件。

並發度不高的話,可以使用一個服務線程,服務線程初始化COM組件,所有使用者向此服務線程提交Word操作請求,由此線程進行處理。

每創建一個COM組件實例,就會有一個Word進程出現,用不了多少個服務器就翹了。

現在新版本jacob-1.16-M1,裏面有com.jacob.com.DispatchProxy 可能對你有幫助,看看文檔吧。

至於其他方法,我所了解的基本都是「java操作com組件」這種方式,如javatoword、jcom,純Java的實現有POI,但是操作word價值不大。

java 操作word 幾種方式

使用Java操作word的方法有幾個,我一一列出來:IText,Apache的POI包,tm-extractors包,jacob包,java2word包。

IText包比較大,但是功能比較全。而且比較成熟,用的人也多。

POI包是Apache的一個項目,不過現在已經停止更新了,而且我看了裏面的Example,感覺調用起來很麻煩。用過之後再也不想用了。

tm-extractors包的API比較簡單,調用起來很方便,代碼量也少。

jacob包我覺得是最強大的,可以操作word,excel。因為調用的是微軟底層的dll文件,需要在system32目錄下放置

jacob.dll,然後在classpath裏面添加jacob.jar文件。推薦使用1.9版本,之前1.8版本調用起來就算你的代碼沒有寫錯也會出

現一些莫名其妙的異常。

java2word也是調用微軟的底層dll文件,有安裝包,也有解壓包,安裝包會將jacob.dll文件裝在system32目錄下。之後將

java2word.jar加到classpath就可以使用了。感覺如果只是操作word文檔的話,比jacob用起來要簡單和舒服。代碼量也少,很清

晰。

另外,使用jacob和java2word的話,會在調用WINWORD進程,如果多人並發訪問服務器的word文件的話,會造成內存不足。我的是office2003,打開一個WINWORD進程需要22M。

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();

}

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ZHZHZ的頭像ZHZHZ
上一篇 2024-10-03 23:24
下一篇 2024-10-03 23:24

相關推薦

  • Java JsonPath 效率優化指南

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

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

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

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

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

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

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

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

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

    編程 2025-04-29
  • Python棧操作用法介紹

    如果你是一位Python開發工程師,那麼你必須掌握Python中的棧操作。在Python中,棧是一個容器,提供後進先出(LIFO)的原則。這篇文章將通過多個方面詳細地闡述Pytho…

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

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

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

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

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

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

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

    編程 2025-04-29

發表回復

登錄後才能評論