java從服務器下載word到web端,修改word,將修改得word檔案重新上傳到服務器,替換掉之前得檔案,求大神教該怎么寫!!!
我現在得代碼是修改完保存到本地,并不想保存到本地呀!
現在是根據word檔案中得書簽位置插入圖片
//eapFileUrl是服務器下載檔案得網址,路徑,gongyi為查詢到得檔案id
URL url = new URL(服務器下載檔案得網址+ "download/?ID=" +檔案id);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 設定超時間為3秒
conn.setConnectTimeout(3 * 1000);
// 防止屏蔽程式抓取而回傳403錯誤
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
// 得到輸入流
InputStream inputStream = conn.getInputStream();
//獲取資料檔案
WordprocessingMLPackage wPackage = WordprocessingMLPackage.load(inputStream);
// 提取正文
MainDocumentPart mainDocumentPart = wPackage.getMainDocumentPart();
Document wmlDoc = (Document) mainDocumentPart.getJaxbElement();
Body body = wmlDoc.getBody();
// 提取正文中所有段落
List<Object> paragraphs = body.getContent();
// 提取書簽并創建書簽的游標
RangeFinder rt = new RangeFinder("CTBookmark", "CTMarkupRange");
new TraversalUtil(paragraphs, rt);
for (CTBookmark bm : rt.getStarts()) {
// 這兒可以對單個書簽進行操作,也可以用一個map對所有的書簽進行處理
for(String sq : bookmart){
if (bm.getName().equals(sq)) {
// 讀入圖片并轉化為位元組陣列,因為docx4j只能位元組陣列的方式插入圖片
InputStream is = new FileInputStream("D:\\33.png");
byte[] bytes = IOUtils.toByteArray(is);
// 創建一個行內圖片
BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wPackage, bytes);
// createImageInline函式的前四個引數我都沒有找到具體啥意思
// 最有一個是限制圖片的寬度,縮放的依據
Inline inline = imagePart.createImageInline(null, null, 0, 1, false, 1000);
// 獲取該書簽的父級段落
P p = (P) (bm.getParent());
ObjectFactory factory = new ObjectFactory();
// R物件是匿名的復雜型別,然而我并不知道具體啥意思,估計這個要好好去看看ooxml才知道
R run = factory.createR();
// drawing理解為畫布
Drawing drawing = factory.createDrawing();
drawing.getAnchorOrInline().add(inline);
run.getContent().add(drawing);
p.getContent().add(run);
}
}
}
wPackage.save(new FileOutputStream("E:\\e.docx"));
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/200269.html
標籤:Web 開發
上一篇:Java
