1. 程式人生 > >itext 中文替換內容

itext 中文替換內容

現在有一個這樣的需求。

需要將pdf模版內的文字替換成指定的文字。


但是涉及到中文的話就有點麻煩了。

在網上搜了半天也沒找到解決方案。

於是自己寫了一個。

也許會有bug 但是滿足了我的需求。

之前遇到了顯示中文的問題,

	BaseFont bfChinese = BaseFont.createFont("STSong-Light",
				"UniGB-UTF16-H", BaseFont.NOT_EMBEDDED);

用了 utf16的編碼。 到替換的時候官網的demo就不好用了,java又沒有 支援  UniGB-UTF16-H。 只能自己寫一個Charset 放到jar包裡來支援這種編碼。我覺得太麻煩了(其實是不會)。 所以手動替換一下吧。

下邊的函式實現了 將指定的byte陣列內的字串替換。

不過因為是pdf裡邊,只適用於替換utf16的。

public byte[] replace(byte[] data, String from, String to) {
		try {
			byte[] fromArr = from.getBytes("utf16");
			List<Byte> fromList = new LinkedList<Byte>();
			for (int i = 2; i < fromArr.length; i++) {
				fromList.add(fromArr[i]);
			}

			byte[] toArr = to.getBytes("utf16");
			List<Byte> toList = new LinkedList<Byte>();
			for (int i = 2; i < toArr.length; i++) {
				toList.add(toArr[i]);
			}

			List<Byte> dataList = new LinkedList<Byte>();
			for (int i = 0; i < data.length; i++) {
				dataList.add(data[i]);
			}
			// 可能有bug 只替換 ${}
			int countSub = 0;
			for (int i = 35; i < dataList.size(); i++) {
				if (dataList.get(i).equals(fromList.get(0))) {
					boolean isSub = true;
					for (int j = 0; j < fromList.size(); j++) {
						if ((i + j) < dataList.size()) {
							if (!dataList.get(i + j).equals(fromList.get(j))) {
								isSub = false;
							}
						} else {
							isSub = false;
						}
					}
					if (isSub) {
						countSub++;
						for (int j = 0; j < fromList.size(); j++) {
							dataList.remove(i);
						}
						dataList.addAll(i, toList);

					}
				}
			}
			byte[] replaceData = new byte[dataList.size()];
			for (int i = 0; i < replaceData.length; i++) {
				replaceData[i] = dataList.get(i);
			}
			return replaceData;
		} catch (UnsupportedEncodingException e) {

			e.printStackTrace();
		}
		return null;
	}

之前遇到了顯示中文的問題

相關推薦

itext 中文替換內容

現在有一個這樣的需求。 需要將pdf模版內的文字替換成指定的文字。 但是涉及到中文的話就有點麻煩了。 在網上搜了半天也沒找到解決方案。 於是自己寫了一個。 也許會有bug 但是滿足了我的需求。 之前遇到了顯示中文的問題, BaseFont bfChinese =

http替換內容中文的解決方案

最近在破解一個網路程式的授權,一抓包http,通過返回的文字判斷授權,簡單!用burpSuite做代理,抓包替換,不行!原來返回的文字是中文,編碼格式UTF-8,burpSuite是java寫的,預設是Unicode編碼的,匹配不上。這裡有兩種解決辦法。1. 還是用BurpS

Jquery替換內容

min con 愛的 repl html doc interval tex blog <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-

Linux多檔案批量替換內容

sed -i "s/原字串/新字串/g" `grep 原字串 -rl 所在目錄` # 將'/usr/local/cwz'目錄下的所有檔案中包含'11.23.456.78'字串的替換為'cc.cv.bb' sed -i "s/11.23.456.78/cc.cv.bb/g" `gre

微信小程式如何讓導航隨著滾動替換內容

nav.xml ------------------------------------------------------------------------------------------------------------- <!--pages/nav/nav.wxml-

Jsoup中文api內容簡單整理

Jsoup1.解析一個文件:文件由多個Elements和TextNodes組成 (以及其它輔助nodes)java.lang.Objectorg.jsoup.nodes. (implements java.lang., java.util.<K,V>)or

SnowNLP:處理中文文字內容

這是一個比yaha更加強大的中文分詞工具。yaha簡單來說只是使用最短路徑演算法(Dijstra)實現了中文分詞,而SnowNLP則實現了詞性標標準,情感分析,文字分類,轉換成拼音,繁體轉簡體,文字關鍵詞提取,文字摘要提取,tf,idf,Tokenization(分割成句子

讀取檔案內容替換內容後生成新檔案

/** * 讀取檔案並替換其中的路徑,然後儲存檔案 * @param filePath 讀取檔案路徑 * @param savePath 儲存檔案路徑 */ private void changeContent(S

字元流讀取中文檔案內容,防止亂碼

public void CountOfSurname() throws IOException{         File f=new File("D:/name.txt");         FileReader fre=new FileReader(f);       

Itext中文處理pdf(轉)(改)

//註釋:多謝這篇文章給我的啟示,讓我找到了輸出中文的字型改好看的辦法。將我在之前文章中談到的PdfViewSupportAsian中的  smallFont = FontFactory.getFont( "STSongStd-Light" ,  "UniGB-UCS2-H" , false);改為sma

python fileinput 模塊替換文件全局內容

python fileinputnginx.conf 文件有如下內容: server { ..................................................................... server 192.

替換文本內容

一個 nbsp print path 處理 lines ace abs 內容 一個簡單的例子,查看當前文件路徑中的文件,查找有‘bye’字符的行,並修改為‘bye’。 註: else: file_out.write(line) 這兩行代碼不能少,保

Linux變量內容的刪除、代替與替換

方法 class 5% == lin 名稱 popu ber 想要 變量內容的刪除與代替 範例一:先讓小寫的 path 自己定義變量配置的與 PATH 內容同樣 [[email protected]/* */ ~]# path=${

HTML使用post方式提交中文內容出現亂碼的錯誤解決方式

form 輸出 itl title com println orm doctype ctype 今天在做一個例子的時候,使用post方式提交表單,如果有中文的話,在另一個頁面顯示出來的時候,總是會出現亂碼; 但是將提交方式改為get的時候,就不會出現這種錯誤。 詳細錯誤

[ SHELL編程 ] 文件內容大小寫替換

nbsp size 適用場景 大小 upper 提高 大小寫 tolower pri shell編程經常會碰到字符串、文件內容大小寫的轉換,在不同的場景下選擇合適的命令可以提高編程效率。 適用場景 需大小寫轉換的文件內容或字符串 字符串大小寫替換 小寫替換大寫

php替換文件指定行的內容

元素 nbsp () 一個 指針 current col 前行 imp 1 //第一種 利用file 函數 讀取文件,每一行都是一個數組元素 2 $arr = file($file); 3 $arr[$line] = "hello"; 4 file_put_co

flying-saucer + iText + Freemarker實現pdf的導出, 支持中文、css以及圖片

pri 操作系統 列表 依賴 hide 屬性 css data writer 前言 項目中有個需求,需要將合同內容導出成pdf。上網查閱到了 iText , iText 是一個生成PDF文檔的開源Java庫,能夠動態的從XML或者數據庫生成PDF,同時還可以對文

Redis中中文內容顯示十六進制字符串處理

redis Redis的在使用的過程中有中文的內容都是以十六進制的形式存儲的,所以在使用redis-cli客戶端連接時如果是內容中有中文的部分都會以十六進制的形式顯示,因此查詢redis中的數據內容時就有點不太方便,其實在Unix系統下可以把查到的十六進制內容用echo中的“-e“參數用來轉換所查詢到的十

js替換iframe的內容

code 方法 logs div cati location ati ++ sch 使用如下方法可以替換頁面中iframe裏面的內容: for (var i=0; i<window.parent.frames.length; i++) { //window.

shell腳本批量替換文件名和文件的內容

sed rename 方法1: 這兩天在做camera bringup的時候,需要添加chromatic文件,由於有需要太多的文件裏面的內容進行替換,手工一個個改文件配置有點不太實際,所以google了一下,找到批量替換文件內容的好方法,命令結構如下:grep "被替換的字符串" * -R | awk