色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

POI操作Word指定位置插入圖片:占位符與游標(biāo)定位實(shí)戰(zhàn)

POI操作Word指定位置插入圖片:占位符與游標(biāo)定位實(shí)戰(zhàn) 做過(guò)Word模板導(dǎo)出功能開(kāi)發(fā)的人多半都被“插入圖片”這件事卡過(guò)??蛻舻拿枋鲇肋h(yuǎn)很具體報(bào)告生成到第三頁(yè)這一段下面必須放質(zhì)檢照片或者一個(gè)大表格里某些單元格要貼圖。你翻遍POI的文檔找到addPicture這個(gè)方法調(diào)完之后圖片確實(shí)進(jìn)來(lái)了位置卻是文檔末尾。今天這篇就專(zhuān)門(mén)聊聊“用POI操作Word在指定位置插入圖片”的完整思路、代碼實(shí)現(xiàn)和踩坑記錄適合正在做報(bào)表導(dǎo)出、合同生成、批量證書(shū)打印或者任何用POI碰過(guò)Word模板填充的開(kāi)發(fā)者。1. 別上來(lái)就寫(xiě)代碼先搞清楚圖片在docx里到底存在哪第一次用POI往Word里插圖片的人基本都會(huì)走這么一條彎路先new XWPFDocument()然后doc.addPicture(...)圖片確實(shí)進(jìn)去了但永遠(yuǎn)在文檔末尾。這不是bug也不是POI故意坑你而是因?yàn)閐ocx的物理結(jié)構(gòu)和我們?nèi)粘?xiě)Word時(shí)的直覺(jué)完全不一樣。一個(gè).docx文件本質(zhì)上是一堆XML打包在一起。正文內(nèi)容放在word/document.xml里結(jié)構(gòu)大致是文檔Document下面是一個(gè)BodyBody下面是一排塊級(jí)元素最主要的兩種塊是段落w:p和表格w:tbl。每個(gè)段落內(nèi)部又有若干Runw:rRun才是真正承載文本的最小單位。一張圖片在XML里不是一個(gè)獨(dú)立的塊它是掛在某個(gè)Run下面的一串Drawing元素。這就是關(guān)鍵點(diǎn)POI里段落XWPFParagraph沒(méi)有addPicture方法能插圖片的只有XWPFRun也就是段落里某個(gè)Run。所以“指定位置插入圖片”這句話拆開(kāi)看其實(shí)是兩步定位到目標(biāo)位置對(duì)應(yīng)的段落或Run再調(diào)用那個(gè)Run上的addPicture。理解了這一層再看XWPFDocument.addPicture為什么沒(méi)用就清楚了——它確實(shí)也能把圖片加進(jìn)文檔但它只能新建一個(gè)段落并把圖片放進(jìn)去這個(gè)段落被追加在Body最后面。它不是“文檔級(jí)”該有的操作更像是一個(gè)方便追加的快捷方法。想要往文檔中間、模板某個(gè)位置插圖必須自己控制游標(biāo)和段落。還有一個(gè)容易忽略的細(xì)節(jié)Word中的Run是一段格式相同的文本。比如你寫(xiě)“第一段加粗第二段普通”這兩段里就有不同的標(biāo)簽。圖片掛在某個(gè)Run下意味著圖片會(huì)和這個(gè)Run擁有相同的段落格式、字體設(shè)置。這也是為什么插入圖片后它的縮進(jìn)、行距、對(duì)齊方式經(jīng)常要額外單獨(dú)設(shè)置——因?yàn)閳D片事實(shí)上繼承或者部分繼承了Run所在的段落樣式。搞清楚對(duì)象模型之后下一個(gè)問(wèn)題自然就來(lái)了怎么定位標(biāo)題里的“指定位置”到底怎么表達(dá)給POI2. 定位方案對(duì)比索引、文本錨點(diǎn)、書(shū)簽到底選哪個(gè)“指定位置”說(shuō)起來(lái)簡(jiǎn)單但實(shí)現(xiàn)時(shí)定位方式有幾種選錯(cuò)后面全是坑。我把常見(jiàn)方案整理了一下按實(shí)際體驗(yàn)排序。定位方式實(shí)現(xiàn)難度抗模板改動(dòng)能力模板可讀性實(shí)測(cè)推薦度段落索引定位低差模板多一個(gè)段落就全錯(cuò)位差靠猜不推薦文本錨點(diǎn)定位中好只要錨點(diǎn)文字不被刪就行好模板里一眼能看出標(biāo)記強(qiáng)推書(shū)簽定位中高好但POI對(duì)書(shū)簽的封裝比較繞一般Word里才看得見(jiàn)可以用但不優(yōu)先表格行/單元格定位中取決于具體場(chǎng)景一般特定場(chǎng)景用索引定位是我最早試的方法。寫(xiě)起來(lái)最省事doc.getParagraphs().get(index)拿到段落就往前面插。但壞處非常致命模板只要被編輯過(guò)一次哪怕是多空了一行索引全部位移。而且批量插入時(shí)前一次插入會(huì)改變后續(xù)段落的索引位置得從后往前倒著插調(diào)試起來(lái)非常消耗耐心。這個(gè)方法只適合那種完全用代碼動(dòng)態(tài)生成的、結(jié)構(gòu)永遠(yuǎn)不變化的文檔不適合模板填充。書(shū)簽定位理論上很優(yōu)雅。Word里CtrlShiftF2加個(gè)書(shū)簽POI里也有XWPFBookmark、getBookmarks()之類(lèi)的東西。實(shí)際試下來(lái)書(shū)簽要綁定到段落或者Run的XML節(jié)點(diǎn)上定位之后進(jìn)行操作還得自己轉(zhuǎn)游標(biāo)代碼繞模板使用者還未必會(huì)加書(shū)簽。不是不行是性?xún)r(jià)比低。我最后穩(wěn)定使用的是文本錨點(diǎn)定位。做法很簡(jiǎn)單在Word模板里寫(xiě)一行占位符比如{{IMG}}或者更具體的{{IMG_QUALITY}}、{{IMG_SIGNATURE}}代碼先遍歷所有段落包括表格里的段落找到包含這個(gè)標(biāo)記的段落然后在它前面或后面插入一個(gè)帶圖片的新段落。好處是模板長(zhǎng)什么樣不影響定位編輯過(guò)也最多是標(biāo)記文字被改視覺(jué)上占位符本身對(duì)排版影響也小。占位符設(shè)計(jì)有兩個(gè)小經(jīng)驗(yàn)。第一標(biāo)記盡量加雙花括號(hào)比如{{IMG}}這和渲染模板的語(yǔ)法一致不容易和正文文字沖突第二每個(gè)插入位置用不同的標(biāo)記名稱(chēng)而不是復(fù)用同一個(gè){{IMG}}這樣批量插入時(shí)不會(huì)出現(xiàn)“每次找到的都是第一個(gè)標(biāo)記”的問(wèn)題。選定文本錨點(diǎn)方案之后剩下的核心就是游標(biāo)操作了。這也是POI插入圖片最繞、最容易出問(wèn)題的地方。3. 游標(biāo)定位法完整實(shí)現(xiàn)從依賴(lài)到代碼一步步來(lái)先說(shuō)環(huán)境。我用的是Maven工程最常用的POI版本是5.2.3用4.x也差不多但5.x的API更干凈推薦以5.x為準(zhǔn)。dependency groupIdorg.apache.poi/groupId artifactIdpoi-ooxml/artifactId version5.2.3/version /dependencypoi-ooxml這個(gè)包會(huì)把poi、xmlbeans、poi-ooxml-lite等依賴(lài)一并帶進(jìn)來(lái)做Word段落、Run、圖片操作已經(jīng)足夠不需要額外引入poi-scratchpad。3.1 先在模板里埋好占位符打開(kāi)Word模板在需要插入圖片的位置輸入{{IMG_LOGO}}比如公司技術(shù)認(rèn)證報(bào)告 {{IMG_LOGO}} 申請(qǐng)人信息如下……這里的{{IMG_LOGO}}會(huì)在運(yùn)行時(shí)被圖片替換掉。模板里這一行可以單獨(dú)占一個(gè)段落也可以和其他文字混在一起。為了排版省心我建議單獨(dú)占一行。3.2 查找錨點(diǎn)段落的核心代碼查找錨點(diǎn)有兩個(gè)層面要處理文檔正文段落和表格內(nèi)段落。很多人只寫(xiě)了doc.getParagraphs()結(jié)果表格里的占位符永遠(yuǎn)定位不到這是最常見(jiàn)的坑之一。import org.apache.poi.xwpf.usermodel.*; public class AnchorFinder { /** * 在文檔所有段落含表格單元格中的段落中查找包含指定占位符的段落。 */ public static XWPFParagraph findAnchor(XWPFDocument doc, String placeholder) { // 1. 正文區(qū)段落 for (XWPFParagraph p : doc.getParagraphs()) { if (p.getText() ! null p.getText().contains(placeholder)) { return p; } } // 2. 表格內(nèi)單元格的段落 for (XWPFTable table : doc.getTables()) { for (XWPFTableRow row : table.getRows()) { for (XWPFTableCell cell : row.getTableCells()) { for (XWPFParagraph p : cell.getParagraphs()) { if (p.getText() ! null p.getText().contains(placeholder)) { return p; } } } } } return null; } }這里注意cell.getParagraphs()在POI 5.x返回的是ListXWPFParagraph和正文段落一樣操作沒(méi)區(qū)別。3.3 在錨點(diǎn)段落之前插入帶圖片的新段落定位到錨點(diǎn)段落之后最常用的需求是把圖片插到占位符所在位置。以“圖片插在錨點(diǎn)段落之前”為例完整代碼如下import org.apache.poi.util.Units; import org.apache.poi.xwpf.usermodel.*; import org.apache.xmlbeans.XmlCursor; import java.io.FileInputStream; import java.io.InputStream; public class WordImageInserter { /** * 在錨點(diǎn)段落之前插入一個(gè)包含圖片的新段落。 */ public static void insertImageBefore(XWPFParagraph anchor, String imagePath, int widthPx, int heightPx) throws Exception { // 關(guān)鍵拿到錨點(diǎn)段落的底層X(jué)ML游標(biāo) XmlCursor cursor anchor.getCTP().newCursor(); // 在游標(biāo)當(dāng)前位置插入新段落。游標(biāo)正好指向錨點(diǎn)段落的開(kāi)始 // 所以新段落會(huì)落在錨點(diǎn)段落之前。 XWPFParagraph imgParagraph anchor.getDocument().insertNewParagraph(cursor); // 讓圖片段落居中視覺(jué)效果最穩(wěn) imgParagraph.setAlignment(ParagraphAlignment.CENTER); // 新建Run圖片掛在Run上 XWPFRun run imgParagraph.createRun(); // 根據(jù)文件擴(kuò)展名判斷圖片類(lèi)型 int picType getPictureType(imagePath); // addPicture的寬高單位是EMU不是像素這里用Units轉(zhuǎn)換 try (InputStream is new FileInputStream(imagePath)) { run.addPicture(is, picType, imagePath, Units.toEMU(widthPx), Units.toEMU(heightPx)); } // 插入完成之后把占位符從錨點(diǎn)段落里清掉 clearPlaceholder(anchor, {{IMG_LOGO}}); } private static int getPictureType(String imagePath) { String lower imagePath.toLowerCase(); if (lower.endsWith(.png)) return XWPFDocument.PICTURE_TYPE_PNG; if (lower.endsWith(.jpg) || lower.endsWith(.jpeg)) return XWPFDocument.PICTURE_TYPE_JPEG; if (lower.endsWith(.emf)) return XWPFDocument.PICTURE_TYPE_EMF; if (lower.endsWith(.wmf)) return XWPFDocument.PICTURE_TYPE_WMF; if (lower.endsWith(.dib)) return XWPFDocument.PICTURE_TYPE_DIB; throw new IllegalArgumentException(不支持的圖片格式: imagePath); } private static void clearPlaceholder(XWPFParagraph paragraph, String placeholder) { StringBuilder sb new StringBuilder(); for (XWPFRun run : paragraph.getRuns()) { sb.append(run.getText(0) null ? : run.getText(0)); } if (sb.indexOf(placeholder) 0) { String newText sb.toString().replace(placeholder, ); ListXWPFRun runs paragraph.getRuns(); if (!runs.isEmpty()) { // 把清理后的文本放到第一個(gè)Run其他Run清空 runs.get(0).setText(newText, 0); for (int i 1; i runs.size(); i) { runs.get(i).setText(, 0); } } } } }這段代碼看起來(lái)不長(zhǎng)但幾個(gè)關(guān)鍵點(diǎn)不解釋清楚換一個(gè)場(chǎng)景就抓瞎。XmlCursor是Apache XMLBeans提供的游標(biāo)它可以直接在底層X(jué)ML節(jié)點(diǎn)上做前后移動(dòng)和插入操作。anchor.getCTP().newCursor()返回的游標(biāo)位置我實(shí)測(cè)下來(lái)是在錨點(diǎn)段落w:p的開(kāi)始標(biāo)簽處。doc.insertNewParagraph(cursor)這個(gè)方法是XWPFDocument提供的專(zhuān)門(mén)用來(lái)在指定XML位置創(chuàng)建段落它和普通的createParagraph()不同后者只會(huì)追加到Body尾部前者才是真正的“指哪打哪”。寬高參數(shù)是另一個(gè)容易翻車(chē)的地方。addPicture方法簽名里的最后兩個(gè)參數(shù)是EMUEnglish Metric Unit不是像素。Word內(nèi)部繪圖單位是EMU1英寸等于914400 EMU1像素大概是9525 EMU。如果直接拿像素?cái)?shù)字傳進(jìn)去圖片會(huì)小得幾乎看不見(jiàn)或者大得離譜。Units.toEMU()就是干這個(gè)換算的沒(méi)這個(gè)工具類(lèi)只能自己乘9525。clearPlaceholder做的事是把占位符文本從錨點(diǎn)段落里抹掉。為什么要單獨(dú)做這一步因?yàn)檎嘉环粼谀0謇锏谝淮芜\(yùn)行時(shí)被圖片替換了但如果不清掉第二次生成時(shí)同一個(gè)模板還會(huì)再匹配到它就會(huì)出現(xiàn)重復(fù)插入。3.4 想插到錨點(diǎn)段落之后怎么辦很多需求是“在某某段落后邊加一張圖”比如“以上為申請(qǐng)信息下方為簽字照片”。這種場(chǎng)景下圖片要插在錨點(diǎn)段落后面做法是先把游標(biāo)往后移動(dòng)到錨點(diǎn)段落的結(jié)束標(biāo)簽位置XmlCursor cursor anchor.getCTP().newCursor(); cursor.toEndToken(); XWPFParagraph imgParagraph anchor.getDocument().insertNewParagraph(cursor); // 后續(xù)邏輯同上創(chuàng)建Run、addPicture、清占位符toEndToken()把游標(biāo)移動(dòng)到當(dāng)前元素結(jié)束標(biāo)簽的位置此時(shí)調(diào)用insertNewParagraph新段落會(huì)落在錨點(diǎn)段落之后。這個(gè)和插入到前面剛好對(duì)稱(chēng)。不過(guò)要提醒一句不同版本XMLBeans對(duì)游標(biāo)位置“在結(jié)束標(biāo)簽上”和“在結(jié)束標(biāo)簽后”的語(yǔ)義行為略有差異萬(wàn)一插出來(lái)位置不對(duì)在toEndToken()之后補(bǔ)一行cursor.toNextToken()再插入通常就能糾正。如果你的場(chǎng)景比較復(fù)雜圖既要插在錨點(diǎn)前又要插在錨點(diǎn)后或者一時(shí)拿不準(zhǔn)方向最穩(wěn)妥的做法是模板里放一對(duì)占位符比如{{IMG_START}}和{{IMG_END}}圖片先插到{{IMG_END}}之前再把兩個(gè)占位符都清掉。這樣無(wú)論版本怎么變位置始終可控。4. 圖片大小、對(duì)齊和樣式繼承插進(jìn)去不難插得好看才難圖片能插進(jìn)去了不代表完事了。我見(jiàn)過(guò)很多初學(xué)者把圖插進(jìn)去之后一打開(kāi)Word圖片要么大得超出頁(yè)面要么歪在頁(yè)面邊上要么和周?chē)淖謹(jǐn)D在一起版式完全沒(méi)法看。這一節(jié)把排版相關(guān)的細(xì)節(jié)一次說(shuō)透。4.1 按比例縮放圖片而不是寫(xiě)死寬高最樸素的寫(xiě)法是直接傳固定像素值比如Units.toEMU(300)、Units.toEMU(200)。問(wèn)題在于原圖可能是4000x3000的大圖傳300x200會(huì)變形原圖是800x600傳300x200又會(huì)模糊。正確做法是先讀圖片原始尺寸按目標(biāo)寬度等比計(jì)算高度。import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; public static int[] calcScaledSize(String imagePath, int maxWidthPx, int maxHeightPx) throws Exception { BufferedImage img ImageIO.read(new File(imagePath)); int width img.getWidth(); int height img.getHeight(); double scale Math.min( (double) maxWidthPx / width, (double) maxHeightPx / height ); if (scale 1) { return new int[]{width, height}; } return new int[]{(int)(width * scale), (int)(height * scale)}; }至于最大寬高設(shè)多少要結(jié)合頁(yè)面實(shí)際可用寬度來(lái)算。A4紙寬度是21厘米默認(rèn)頁(yè)邊距左右各3.17厘米也就是說(shuō)文字區(qū)的可用寬度大概是14.65厘米。如果你希望圖片鋪滿整個(gè)可用寬度14.65厘米換算成像素大概是14.65 / 2.54 * 96 ≈ 553像素。我一般取550作為最大寬度高度限制在350-400左右基本不會(huì)超出頁(yè)面。4.2 對(duì)齊方式單獨(dú)設(shè)置圖片段落既然是獨(dú)立的段落它的對(duì)齊方式就由段落屬性控制。居中是最常見(jiàn)的需求imgParagraph.setAlignment(ParagraphAlignment.CENTER);左右對(duì)齊也是同理。要注意的是如果錨點(diǎn)段落原來(lái)的對(duì)齊方式是左對(duì)齊而你新插入的圖片段落沒(méi)有顯式設(shè)置那么圖片會(huì)沿用段落默認(rèn)樣式可能是左對(duì)齊也可能是兩端對(duì)齊整體看起來(lái)就很隨機(jī)。所以每次插入都顯式setAlignment不要依賴(lài)默認(rèn)值。4.3 圖片段落繼承錨點(diǎn)段落的樣式模板里不同段落的字體、行距、縮進(jìn)可能不同。如果圖片段落是全新建的“裸段落”它的樣式可能和其他段落格格不入。最簡(jiǎn)單的解法是把錨點(diǎn)段落的段落屬性拷貝過(guò)來(lái)import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr; CTP anchorCtp anchor.getCTP(); CTP imgCtp imgParagraph.getCTP(); if (anchorCtp.isSetPPr()) { imgCtp.setPPr((CTPPr) anchorCtp.getPPr().copy()); }這樣做的好處是行距、縮進(jìn)、段前段后間距全都和錨點(diǎn)段落保持一致。如果你連字體格式都希望圖片Run繼承可以再拷貝Run的RPr不過(guò)圖片本身沒(méi)有字體影響不大。4.4 圖片和周?chē)淖种g的間距圖片段落默認(rèn)的行距可能會(huì)讓圖片和上下文字貼得很近讀起來(lái)很擠??梢栽趫D片段落的setSpacingBefore和setSpacingAfter上稍微加點(diǎn):imgParagraph.setSpacingBefore(200); imgParagraph.setSpacingAfter(200);這里的單位是緹twips1磅等于20緹200緹就是10磅視覺(jué)上比較舒服。具體大小看實(shí)際效果微調(diào)。5. 實(shí)測(cè)踩坑記錄這份避坑清單能省你大半天時(shí)間這部分整理了我在實(shí)際項(xiàng)目中遇到過(guò)的坑有些坑可能浪費(fèi)了你幾個(gè)小時(shí)也不一定想到。每一條都是從報(bào)錯(cuò)到排錯(cuò)到解決完整走過(guò)來(lái)的不是從官方文檔摘抄的。5.1 占位符被Word拆到多個(gè)Run里replace不掉這是第一個(gè)真正惡心到我的坑。模板里手寫(xiě)的{{IMG_LOGO}}存盤(pán)之后Word不一定把整串文字放在同一個(gè)Run里可能{{在一個(gè)RunIMG_LOGO在另一個(gè)Run}}又在第三個(gè)Run。你用paragraph.getText()能拿到完整文本一replace卻發(fā)現(xiàn)段落里根本沒(méi)變化因?yàn)槟阋鎿Q的內(nèi)容跨越了Run邊界。clearPlaceholder里我用了“拼完整文本、改第一個(gè)Run、清空其余Run”的策略就是為了應(yīng)對(duì)這種情況。如果替換完發(fā)現(xiàn)錨點(diǎn)段落里還殘留半個(gè)大括號(hào)的文本多半是遍歷時(shí)遺漏了哪個(gè)Run的getText(0)返回null處理時(shí)判空就行。5.2 只查正文段落表格里的占位符永遠(yuǎn)找不到上文代碼里已經(jīng)處理了這個(gè)問(wèn)題但我在實(shí)際開(kāi)發(fā)中見(jiàn)到不少同事只寫(xiě)了doc.getParagraphs()。文檔一旦涉及表格比如申請(qǐng)表、報(bào)價(jià)單占位符放在表格單元格里查正文段落就找不到程序直接往下走圖片就全堆到了文檔末尾。表面看是“插入位置不對(duì)”本質(zhì)是定位邏輯根本沒(méi)覆蓋到表格。排查這類(lèi)問(wèn)題先確認(rèn)錨點(diǎn)是不是在表格里再?zèng)Q定遍歷方式。5.3 重復(fù)插入同一個(gè)占位符被命中多次這不是死循環(huán)但效果類(lèi)似。假設(shè)模板里有好幾處{{IMG}}你調(diào)用findAnchor每次都從頭遍歷那么返回的永遠(yuǎn)是第一個(gè){{IMG}}段落。第一張圖插入后會(huì)清理占位符但第二次查找時(shí)第一個(gè)段落已經(jīng)沒(méi)有標(biāo)記了可代碼是從頭再查的結(jié)果還是會(huì)找到第二個(gè)位置之前的第一個(gè){{IMG}}——如果只插入一次還好循環(huán)插入就會(huì)錯(cuò)亂。我的解法是模板里的占位符一律帶編號(hào){{IMG_1}}、{{IMG_2}}、{{IMG_3}}。這樣每個(gè)位置有唯一標(biāo)識(shí)查找時(shí)按編號(hào)精確匹配。如果要插入同一張圖到多個(gè)位置就顯式多次調(diào)用每次傳不同的占位符邏輯清晰也不容易錯(cuò)。5.4 圖片類(lèi)型判斷錯(cuò)誤生成的docx打不開(kāi)addPicture里的第二個(gè)參數(shù)必須和實(shí)際圖片字節(jié)格式匹配。之前出現(xiàn)過(guò)一次文件擴(kuò)展名是.png但實(shí)際內(nèi)容被改成了JPEG編碼getPictureType判斷成了PNG結(jié)果打開(kāi)生成的Word時(shí)報(bào)“無(wú)法讀取圖片文件已損壞”。嚴(yán)格來(lái)說(shuō)這不是判斷邏輯的問(wèn)題而是圖片文件的真實(shí)格式問(wèn)題。穩(wěn)妥做法是用ImageIO.read()解析圖片通過(guò)ImageIO.getImageReaders()獲取真實(shí)格式再映射到POI的圖片類(lèi)型常量。如果項(xiàng)目里圖片來(lái)源可控都是程序生成的PNG用擴(kuò)展名判斷就夠了如果圖片是外部上傳的建議按真實(shí)格式判斷。5.5 生成的文件提示“要修復(fù)”的問(wèn)題排查思路如果你插入后生成的docx在Word里提示“發(fā)現(xiàn)無(wú)法讀取的內(nèi)容是否嘗試修復(fù)”別慌九成是XML結(jié)構(gòu)出了問(wèn)題。我的排查順序是先把生成的文件用解壓工具解壓打開(kāi)word/document.xml直接看新插入段落前后的XML標(biāo)簽是否閉合正常。段落嵌套層級(jí)不正確是最常見(jiàn)原因。檢查是不是游標(biāo)位置操作出了問(wèn)題比如在Body層級(jí)的段落外又插入了孤立節(jié)點(diǎn)或者插入到了一個(gè)表格單元格的非法位置。單獨(dú)跑一個(gè)最小復(fù)現(xiàn)用例只插入一張圖片、只操作一個(gè)占位符看能不能復(fù)現(xiàn)。能復(fù)現(xiàn)問(wèn)題就在插入邏輯不能復(fù)現(xiàn)說(shuō)明是模板本身有問(wèn)題。另外所有插入操作完成后記得調(diào)用一次doc.write()刷新內(nèi)部結(jié)構(gòu)再關(guān)閉輸出流。不要用doc.getDocument().toString()直接拼字符串查問(wèn)題那個(gè)是底層X(jué)ML的toString和實(shí)際寫(xiě)入文件的內(nèi)容不完全一樣。5.6 圖片流資源泄漏addPicture需要傳入InputStream如果你用裸寫(xiě)new FileInputStream()不關(guān)流批量生成文檔時(shí)容易出現(xiàn)文件句柄耗盡或文件被占用刪除不掉。上面代碼全用了try-with-resources這個(gè)習(xí)慣一定要帶上。尤其是在循環(huán)內(nèi)插入幾十張圖片的場(chǎng)景不關(guān)流的后果會(huì)非常明顯。6. 批量插入場(chǎng)景的性能優(yōu)化與模板復(fù)用最后一個(gè)常見(jiàn)場(chǎng)景一份文檔里要插入幾十張圖比如產(chǎn)品目錄、員工證件照集合、訂單截圖列表。按前面的單張插入方法每張圖都從頭遍歷整篇文檔找錨點(diǎn)復(fù)雜度是O(n*m)文檔段落很多時(shí)會(huì)明顯變慢。這個(gè)環(huán)節(jié)給幾個(gè)優(yōu)化思路。6.1 一次性收集錨點(diǎn)避免反復(fù)全表掃描不管插入多少?gòu)垐D先做一次遍歷把占位符和對(duì)應(yīng)的圖片路徑配對(duì)收集起來(lái)然后再統(tǒng)一處理。可以用一個(gè)小結(jié)構(gòu)class ImageAnchor { String placeholder; String imagePath; XWPFParagraph anchor; }遍歷時(shí)只掃一遍所有段落含表格把每個(gè)占位符對(duì)應(yīng)的段落引用存下來(lái)。這樣后續(xù)插入直接拿對(duì)象操作不需要反復(fù)從頭找。插入新段落時(shí)注意底層X(jué)ML是動(dòng)態(tài)變化的但你已經(jīng)拿到的XWPFParagraph對(duì)象引用依然有效因?yàn)樗腔贑TP包裝的不會(huì)因?yàn)椴迦胄露温涠А?.2 “可反復(fù)運(yùn)行”的冪等處理真實(shí)業(yè)務(wù)里往往要求同一個(gè)模板重復(fù)生成多份文檔比如批量套打證書(shū)。如果模板里的占位符被第一次運(yùn)行改掉第二次想再?gòu)?fù)用同一份模板文檔就會(huì)發(fā)現(xiàn)占位符沒(méi)了。我的做法是每次生成前都從原始模板重新加載一份副本占位符永遠(yuǎn)以原始模板為準(zhǔn)。生成流程變成三條固定步驟new XWPFDocument(templateInputStream)加載原始模板查占位符、插入圖片、清理占位符輸出寫(xiě)入新的docx文件模板文件只讀絕不寫(xiě)入。這樣無(wú)論跑多少次模板永遠(yuǎn)是干凈的。6.3 線程安全的取舍XWPFDocument不是線程安全的同一個(gè)模板對(duì)象多線程操作會(huì)互相干擾。如果并發(fā)量高要么每個(gè)線程各自加載一份模板副本要么用線程池串行化處理同一模板的生成任務(wù)。最省事的做法是把模板內(nèi)容readAllBytes()讀進(jìn)字節(jié)數(shù)組每次new XWPFDocument(new ByteArrayInputStream(bytes))生成新實(shí)例。模板不大時(shí)開(kāi)銷(xiāo)可以忽略換來(lái)的是完全隔離不用加鎖。6.4 不要邊遍歷邊改結(jié)構(gòu)的深層原因有些操作在循環(huán)內(nèi)直接用doc.getParagraphs()并同時(shí)調(diào)用insertNewParagraph這背后的隱患不只是索引偏移XMLBeans的游標(biāo)遍歷邏輯在節(jié)點(diǎn)增刪過(guò)程中有時(shí)會(huì)拋出ConcurrentModificationException有時(shí)會(huì)靜默跳過(guò)新插入節(jié)點(diǎn)導(dǎo)致插入順序錯(cuò)亂。把“收集”和“操作”分成兩階段不僅是性能考慮更是規(guī)避這類(lèi)詭異問(wèn)題的根本手段。我在批量插入場(chǎng)景里統(tǒng)一遵守一個(gè)規(guī)則收集階段只return段落引用操作階段只使用已收集到的引用做插入絕不在遍歷的同時(shí)修改文檔結(jié)構(gòu)。這套思路跑下來(lái)上百?gòu)垐D片的文檔生成也穩(wěn)定。如果你也要做類(lèi)似功能建議先把這個(gè)原則定下來(lái)再寫(xiě)業(yè)務(wù)代碼。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
精品人妻一区二区三区-国产| 亚洲va综合va国产va中文| 欧美久久婷| 99亚洲精品| 97干com| 亚洲丨在线| 精品丰满人妻一区二区三区免费观| 黄色片大香蕉| 亚洲情色综合| 五月天婷婷基地| 日本性爱不卡视频| 无码操逼网| 久久二| 熟女自慰久久久| 另类专区在线观看| 操逼逼福利视频| 国产精品久久久久久久久久久久久久吹 | 成人午夜高潮av猛片| 日韩熟女精品无码专区一区二区 | 97超碰热线| 日韩性爱视频免费在线| 日本欧美一区二区三区视频麻豆| 蜜臀久久99精品久久久久久| 区自美91| 久久久久国色αv免费观看| 人人澡人人弄| 啊啊啊快操我视频| 国产性感在线观看| 亚洲丝袜色图| 天堂资源欧美| 毛片视频白嫩| AV在线资源| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 精品一区二区成人| 无码 黑人一区二区三区| 麻豆91熟妇人妻中文字幕茄子| 亚洲资源网| 999九九精品| 色网在线| 蜜桃精品一区二区三区久在线| 欧美日韩国产男人| 影音资源男人日韩| 97色欧洲| 成全在线观看免费观看| www99热| 96精品在线| 色色99| 九九亚洲视频| 不卡超碰护士AV在线免费播放| 日本日皮视频逼| 欧美性爱1080p| 人人摸.人人色| 国产亚洲性生活视频播放| 在线有码中文字幕| 精品国产久热在线观看| 综合久久99| 亚洲 欧美 天天| 性欧美另类高清| 女同亚洲欧美一二三区久久电影| 国产农村妇女精品一二区| 超碰激情808| 99只有精品| 免费草草草草草视频| 9.1小视频| 国产在线激情| 超碰免费人妻人人| 日韩av一级黄片| 日本三级日本三级99| 99视频内射三四| 嗯嗯嗯不要不要免费视频| 国产13区| 精品人妻高清麻豆av| 久久久久免费少妇| 人妻在线臀日韩| 日本久久综合| 男人天堂毛片| 国产精品女生av| 曰韩成人免费视频| 91女神在线视频| AV天堂男人的天堂| 人人妻人人爽一区二区三区| 久久一区二区高清免费| 狠狠色色| 精品人妻一区春色| 中文字幕熟女人妻丝袜| 婷婷亚洲五月***久久| 日日夜夜干| 97天天操天天干| 五月天日日操夜夜操| 另类亚洲一区二区三区| 婷婷丁香成人| 少妇与黑人高潮在线| 国产精品一区二区后入| 伊人网青青| 亚洲各类熟们中文字幕| 求求你操操我| 国产精品白领在线观看| 自拍二页| 亚洲综合20p| 国产精品久久久久久久久AV大片| 蜜臀久久久国产| 97欧美| 日韩中文字幕二区| 欧美熟妇亚洲版| 青青草视频爽一爽| 性色A∨91| 黄页视频网站野外| q2午夜理论片夜色av| a男人的天堂久久一级A毛片| 日韩国产十八禁| 国产成人在线观看网址| AND人妻系列| 亚洲中文sv| 色色色色日本| 中文字幕视频免费| 国产69精品久久久久99尤物| surenchaopeng| 国产福利精品98视频| 中文字幕 人妻不满 在线视频| 一区超碰一区| 丁香六月激情综合| 天天看片青娱乐| 欧美性爱精品一区二区| 亚州黄站| 东北夫妻性偷拍| 精品午夜福利| 加勒比在线视频| 一本一道波多野毛片中文在线| 男人的天堂成人的社区| 国产亚洲禁久一区二区| 天天综合网亚洲综合网| 国内自拍 日韩激情 99| 精品高潮| 麻豆人妻少妇在线免费观看| 五月婷婷六月色| 国产91 丝袜在线播放| 爱爱动态120秒| 亚洲色交| 亚洲综合在线高清| 国产精品成人无码a v毛片| 超碰在线974| 操操操日本的逼| 情色五月天网| 99精品网| 综合久久久久久久久91| 啊啊啊啊啊啊啊在线| 日韩欧美中文| 成全动漫视频观看免费下载| 97超碰免费生活| 99操视频| 日韩免费三级黄片电影| 日本道日本道中文字幕日本道最新日本道在线观看 | 亚洲制服aⅴ中文字幕| 日韩懂色网| 精品午夜福利国产一区二区在线观看| 亚洲熟女一区| 91在线色| 9久热| 99999国产精品| 精品熟女一区=区三区| 欧美日产国产在线成人第一区| 干B| 激情看片网站| 97超碰磁| 91欧美网| 欧美日韩另类字幕中文| 久久人妻丝袜一区二区三| 亚洲**2021在线观看| 人妻少妇三级| 91人妻爽爽人人做人人澡| 日韩性爱啪啪视频| 夜夜躁狠狠躁日日躁av| 国产91专区| 亚洲伊人a线观看视频| 你草精品在线视频| 久久色情| 999岛国大片| 国产精品九九九| 激情亚洲天堂| 欧美性天天影视| 顶级丝袜熟女一区二区三区| 91操操操操| 久操视频免费观看| 日日日啊啊啊| 91久热这里只有精品| 女人喷水视频在线观看| 黄片com.| 亚洲精品国产日韩无码AV永久免| 97视频免费播放| 中文久久96| 蜜臀在线免费观看在线免费观看| 一区二区日韩欧美久久| 91人妻人人妻| 婷婷日韩一区二区三区中文字幕在线| 日本午夜久久电影| 超碰成人最新最好看| 国产黄色在线播放观看| 国产精品视频自拍在线| 污色区网站| 欧美激情 一区| 美女AV一区二区| 视频在线观看一二三区| 玖玖综合色| 国产不卡片| 男人的天堂2019AV| 色综合一区二区三巨| 97人人操人人干| 欧美劲爆视频一区二区| 色色色综合网| 色久综合| 婷婷五月天激情小说| www.av在线观看| 国产精品无码论坛| 亚洲性爱无码乱伦av| 一区二区三区视频国产免费| 天天做日日做| 亚洲操逼无码| 碰碰在线视频| 青青草原综合久久大伊人精品| 蜜桃精品一区二区三区ww| 青青草操逼逼视频| 亚洲图片欧美制度| 熟女91网| sewuyueav| 夜夜高潮夜夜爽夜夜爱爱一区| 91在线国产后入风骚翘臀美女素人| 亚洲超碰综合网| 人人九九精| 久九九九九九九九热| 色综合大香蕉| A级片日韩欧美国产欧美视频精选观看| 亚洲一区二区AV| 91久久| 国产丝袜美女在线一区| 亚洲无码?第一页| av天堂5| 亚洲另类在线观看| 欧美综合加勒比在线| 国产地址二三| 九九九国产| 亚洲综合第一页| 正在播放国产精品一区| 亚洲码专区| 亚洲宅男天堂| 欧美夜夜骑视频| 日韩成人人妻网站| 国产成人亚洲精品无码最新在线| 艹少妇网站| 曰韩av中文字幕专区| 97综合在线观看| 青苹果影院男人的天堂| 97天天操天天干| 精品十八在线观看| 天堂俺去俺来也www久久婷婷| 白嫩国模丰满一二三区| 亚洲自拍欧美国产首页网曝| 日本幼女18+| 曰韩人妻中文字幕在线| 91久久久久久久久18| 北京专精特新企业招聘信息| 亚洲日本天堂| 人人看黄色视频| 国产精品无码AV网站| 素人播放一区| yazhououmeizongya| 人人性爱视频免费| 青青草视频这里只有精品| 天天干天天日天天射黄色片| 综合97| 免费强奸av| 18精品一区| 黑人性欧美| 特级毛片特黄久久免费看| 天天爽爽爽爽| 67914在线兔费成人视频| 人人贴人人摸| 国产九月婷婷| 男女性扦B| 久久久精精精| 色官网色综合| 中文字幕天天操| 亚洲加勒比久久日本道| 亚洲精品男人的天堂| 欧美综合传媒| 香伊人在线| 日韩有码一区三区| 超碰美国| 国产亚卅97| 看日韩黄片| 九九人人操| 亚洲国产亚洲天堂| 91碰碰碰| 欧美日韩在线视频网站| 亚洲精品欧洲精品| 亚洲欧美爆| 色激情综合网站| 五月天色五月| 91女日逼| 人人摸人人干| 中文字幕三四五区| 久久最新免费视频23| 97日韩超碰超碰中文字幕| 怡红院一区二区熟女人妻| av东京热男人的天堂| 福利社区午夜一区二区| 日本一级不卡一二区| 日本一区二区三区四区免费观看| 久久是精品| 天堂8在线新版官网| 欧美国产操逼| 亚洲精品中文字幕一区在线视频| 高清无码学生妹高潮| 99re久久| 伊人天天久久动态图| 日韩情色视频| 色欲av一区二区三区蜜芽| 久久亚洲熟妇在线视频| 欧美日本一区二区a人| 91亚洲狠狠色| 欧美日韩国产中文精品字幕自在自线, | 超碰97欧美| 青青草操逼逼视频| 色哟哟AⅤ| 大香蕉99热| 亚洲αv一区二区三区| 亚洲诱惑天堂 | 亚洲图片 激情小说| 日本视频在线观看污污污| 国产AV人人夜夜澡人人爽麻豆| 久久九操在线观看| 老女人爆菊| 人人操人人干xxx| 内射卯月麻衣| 七久久久| 岛国视频一二三区| 97鸡把在线视频| 啪啪视频mP4| 欧美精品xxxwww| 精品日日人妻| 撸撸成人在线视频| 宅男91视频在线播放| 色狠狠 - 百度| 97欧美日韩| 精品无码久久久久| 欧美综合骚| 久久亚洲AV成人精品无码| 国产日韩美女小穴视频网站不卡| 神马久久久久久久久久| 裸体美女国产免费久久久网站| 久草尤物| 亚洲激情视频| 欧美色图小说综合| 试看福利| 丰满人妻一区二区三区在线| 午夜福利成人免费视频| 精品久久无码午夜福利| 欧美激情专区| 风间由美日韩欧美久久| 综合91网| 日韩午夜国产| 第四色色综合91| 五月婷久久| 日本不卡高清视频| 日韩免费高清大片在线| 大鸡巴久久久| 免费看久久久性性| 欧美另类综合久久| 国产又黄又爽又刺激久久久久久| 五月亭亭六月丁香| 综合久久2017| 夜夜欢天天干| 欧美视频一区二区三区| 色呦色呦色精品| 精品亚洲俞拍视频一区| 91九色丨国产丨爆乳| 能看的AV| 欧美日韩成人在线| 99婷婷| 欧美性爱精品一区二区| 久久久麻豆精品| 岛国色情视频在线观看| 欧美亚洲第一页| 国产精品人妻一区二区| 一起草三级AV电影在线观看 | 欧美色图下一页| 精品一区二区三区最新| 国产欧美美女免费观看视频| 亚洲欧美大| 色婷婷电影网| 中文高清一区二区的| 亚洲va综合va国产va中文| 无码少妇精品一区二区60岁老人| 91丨九色丨东北熟女| 亚洲中文字幕网| 日韩精品一区二区三区色欲| 99色在线视频| 天天影视色香色欲| 亚洲男人的天堂AV| 色亚州人久干视频在线观看免费版| 欧美伦乱爱| 亚洲综合69| 加勒比久久av| 欧美草草高清日韩视频| 超碰超碰欧美| 四虎免费看黄| 日日干夜夜骑| 欧美精品黑人猛交高潮| 女人天堂av在线播放| 精品久久久av无码免费| 性影在线视频| 日本综合久久| 婷婷六月色开| 麻豆区99999| 欧洲与亚洲欧美精品中文字幕| 在线观看午夜婷婷久久久久清性观看| 亚洲精品九九九九九九| 97国产精品| 黄色av网站在线播放| 中文久久爆乳| 91精品电影18| 美女让帅哥通她小鸡鸡| 三级色影综合网| 人人做,人人操,人人摸| 国产亚州高清国产拍精| 精品久久久九九九孕妇| 亚洲91大片| 欧美懂色综合网| 国产日韩欧美中文在线播放| 色九月| 天天看片麻豆| 久久久精品网站| 少妇无码av专区线| 亚洲色鬼| 久啪视频| 乱伦a片视频| 九九色综合| 狠狠操一区二区| 天堂亚洲精品| 日本免费人成视频播放120秒| 伊人五月天| 97在线观视频免费观看| 91人妻超碰| 国产丸一视频| 一级黄色视频网| 日本精品一区三区| 欧美伦乱| 艹比视频国产精品| 久久一二三四五六七八九区区| 久热最新在线杭州| 国模精品娜娜一二三区| 强奸熟女一区二区三区| 亚洲无码精品AV久久久| 色噜噜狠狠色综无码久久合欧美| 色香综合天天影视综合| 人人看欧美性爱| 97精彩视频网站| 大香蕉99re| 色噜噜精品一区二区三| 粉嫩AV输入| 国产狂喷潮在线精品| 大香樵伊人网| 99999久久精| 偷窥自拍A片| 97丝袜亚洲在线播放| 日韩一级久久毛片| 观看免费区二区三区二| 亚洲日韩国产精品| 日本三级久| 视频二区美腿制服人妻欧美| 爽 好舒服 无码刺激久久| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 欧美 日韩 亚洲 春色| 观看免费区二区三区二| 性无码专区2020| 亚洲骚女一区二区三区| 中文字幕熟女人妻丝袜| 91色鬼| 日本韩国国产精品一区| 天天综合影院91| 国产拍偷精品网站| 97国产天堂岛| 超97在线精品视频| 视频在线观看青青99国产| 91操人| 二三四区精品| 国产92麻豆天美精品色欲5| 搡老女人老91妇女熟女| 综合色99| 97精品| 久久九九一区二区三区成人| 久久久精品一区二区| 精品人妻一区| 97久久国产精品女不卡| 人人色人人射人人妻| 国产在线观看一区二区三区| 久久精品国产99国产精品亚洲| 天天色,天天干,天天干| 青女偷拍网| 猛交交| 无码操逼视频一下| 欧美日韩美女精品久草一区二区三区| 日本中文字幕在线视频| 绯色一区二区三区不卡少妇 | 97操| 亚洲日韩东京热一区| 777奇米影视777四色| 亚洲资源站| 一级黄碟在线观看| 亚洲精品精品一区二区| AAAA级日本片免费视频| 欧洲自拍色图gif在线| 这里都是精品在线观看| 襙一襙| 久艹99| 九九九九88| 国产 亚洲 丝袜 制服| 久久久日本电影| 1区2区3区中文字幕日韩| 亚洲国产欧美中文永久| A级片日韩欧美国产欧美视频精选观看 | 可以免费看黄片的视频| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 思思热在线| 在线无码视频| 天美传媒婬乱在| 综合97亚洲| 欧美日韩99精品麻豆传媒| 综合在线导航一区| 蜜臀久久99精品久久久电影| 欧美日本视频一区| 26uuu国产亚洲综合| 人妻喷水| 男人把坤坤插入女人的下体| 国产不卡精品91| 麻豆啪啪啪视频| 日韩综合成人免费视频| 97干97色| 色区97| 午夜AV污污污| 日本欧美色| 国产suv精品一区二区四| www.色婷婷色综合| 18禁网站在线播放| 五月天久久综合网| 久久久性| 人人搞人人插人人操| 久久大香蕉97| 好一吊区二区| 青青草女人天天干| 激情五月天校园春色网| 99热 按摩 日韩| 免費人妻夜夜爽天天爽爽一区| 99热成人| 九九AV| 久久婷婷五月综合| 午夜丁香| 国产精品色| 激情综合亚洲| 狠狠操天天干| 五月天色图影视| 丁香五月天视频| 久久久五月天| 好吊妞转入那个网| 国产一区二区三区中文字幕| 女色视频社区| 日韩精品三区四区| 欧美狠狠弄| 亚洲综合影视| 99久在线精品99re8a| 成人精品一区二区三区| 超碰97久久国| 97chaopenrihan| 色香网| 国产激情在线| 人妻天天爽天天爽三区| 亚洲日韩精品久久久久一区壹牛| 日韩黄片影院| 夜嗨影院| 超碰97 线线 在现| 一级性爱视频免费观看| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 色www精品视频在线观看| 久久综合女优| 日本不卡免费二区| 天天噜| 欧美色网| 淫荡熟女乱伦网| 日本色色的视频| 色婷婷综合网站| 亚洲色图超碰在线| 日韩 成人 有码| 精品一区99999| 老鸭窝成人免费毛片视频| 三上悠亚在线毛片91| 欧美黄色片在线播放| 黄片无码在线制服| 天天淫人人妻日日色| 天美传媒Av在线| 国产精品对白自产拍| 色婷婷一区二区三区久久| 国产真乱mangent| 中文字幕成人理论在线| 97操97色| 久9久9久9久9久9久9| 综合网97| 99久热精品99re6热| 成功精品影院| 欧美成人综合| 色与欲影视| 无码WWW免费视频网站| 欧美操人| 情色五月天网| 一级一性爱免费视频| 3P乱轮视频| 久久一区无码| 深夜激情| 视频在线观看免费一区二区三区 | AVE乱伦| aⅴ日韩成人电影av在线免费看av大全| 五月婷婷激情| 亚洲综合伊人| 国产成人精品必看 | 婷婷亚洲综合| 97超碰久久色| 色欲久久久久综合网| 欧美性爱在线无码| 96久久久精品| 中文字幕高清精品一区| 六月婷激情福利天堂69| 亚洲国产精品久久久久婷婷老年 | ′ !γ}丶。。久久精品欧美一区二区三区| 嗯,啊。舔我逼| 97超碰人人模人人拍人人| 午夜男女爽爽爽在线视频| 亚洲熟女乱熟乱熟妇综合网二区| 东北女人操逼| 国产又粗又又黄又猛| 97中文字幕一区| 国产无马视频| 老熟妇一区二区三区啪啪| 日韩精品字幕| 冬京热男人的天堂| 亚洲加勒比久久日本道| 亚洲五月丁香花狠狠干一区二区三区| 精品久久久一本一道| 人人摸人人摸人人干| 欧美成人色| 夜夜操青青草| 日韩不卡网操逼中文字幕日韩| 免费国产电影一区二区| 人妻美腿丝袜制服诱惑综合天堂-| 亚洲综合在线第一页| 99色婷婷| 精品一区二区三区丰满熟女-亚洲欧美一区| 人人射人人操人人摸| 欧美在线干| 国产成人无码高清| 精品熟妇视频一区二区| 国内毛片无码一级毛片| 亚州欧美在线| 男人夜色天堂ss| 1956日韩精品| 呦呦影院| 桃色人妻在线视频| 欧美亚洲日本视频久久久 | 国产精品久久99日日| 囯产精品强| 黑人黄片在线免费观看| 96一区二区三区| 九九99久久| 人妻丝袜日本| 麻豆av一区二区三区| 国产精品麻豆免费视频| 2000亚洲男人天堂| 日韩性爱电影一区| www.男人的天堂| 国产白领连续中出在线观看| 91精品久久久久五月天精品| 青青草一区二区三区四| 五月婷丁香| 精品无码一区二区三区| 欧美大色交| 五月丁香成人网| 性无码专区2020| 九九九九九精品十六| 国产超碰| 精品久久久av无码免费| 色臀aV| 色激情五月天| 另类小说综合网| 性欧美第一页| 伊人大香蕉在线| japan日本高清乱xxxx| 亚洲男人在线观看天堂| 97视频在线观看高清资源| 中文字幕aⅴ在线视频| 天天射夜夜骑| 熟妇高潮精品一区二区三区下载| www99热| 少妇无码av专区线| 92久久| 搡老女人老91妇女熟女| 欧美日韩m| 日韩av影片在线观看| av影片在线观看不卡| 97视频在线视频| 好湿好紧好爽 视频| 国产极品美女高潮无套在线观看| 91色图| 亚洲狠狠入| 日韩电影天堂视频一区二区| 久久超碰网| 91美女視頻| 国产传媒1234区| 五月激情小说| 国产一级黄色片在线观看| 强被迫伦姧在线观看无码网站| 欧洲色综合| 精品一区二区三区四区外站 | 久久久久幕乱码| 一区 欧美 日韩 麻豆| 婷婷久久综合| 视频分类 国内精品| 欧美精品一区二区少妇免费A片| 激情欧美97| 九九九只有精品| 国产成人天堂| 97干天天| 色女99一级片在线观看| 久久香蕉国产传媒一区剧情天美| 色综合尤物| 欧美成人性爱视频免费观看 | 97中文字幕色| 丰满翘臀美女影院视频| 欧美性爱五月天| 日本熟女中文| 熟妇操花| 欧美一级做a爰片免费视频| 99精品欧美一区二区三区桃色| 国内偷拍精品一区二区| 日本一区不卡| 好爽视频在线观看视频| 久久尹人大香焦视| 啊啊啊好舒服视频| 日本不卡在线二区三区| 久久粉色| 综合97| 肉动漫无遮挡h在线观看| 国产精品剧情| 天天干人人看综合| 污色区网站| 视频国产欧美在线播放| 91综合色噜噜| 99久久亚洲精品无码毛片潘甜甜| 国产精品国产亚洲区艳妇糸列| 免费精品国偷自产在线在线| 亚洲精品一区二区精品| 韩日性爱av| 久久无码电影| 五月丁香色色网| 先锋精品av色鲁| 麻豆天美电影一区二区| 99re不伦| 国产性爱欧美性爱在线| 国产精品视频精品一二| 国产成人网址| 韩国女主播青草福利视频| 免费看污网站| 久久久111| 精品免费成人久久| 啊啊啊啊啊啊啊啊在线观看| 亚洲中文字幕在现观看| 在线岛| 国产精品自在自拍视频| 九九色热| 精爱久久| 情色五月天就去干| 色欲av国内精品久久久久久| 99re免费视频精品全部| 东亚亚洲无码高清| 人妻天堂综合网| 白丝AV网站| 人妻 欧美亚洲| 中文字幕欧美丝袜07资源| 飘花国产午夜精品不卡| 男女一级A片大黄,一进一出| 国产精品对白内射| 性交一区二区在线播放| 久操免费观看| 国产欧美精选自拍一区| 日本色婷婷| 色 亚洲 91| 91中文字幕制服丝袜免费视频| 日韩熟女操逼| 色5月婷婷| 综合天天网| 午夜精品久久久久久久久久久久久 | 欧美九九99久久精品| 大香蕉琪琪日本女优不卡| 青草精品视频一日本久久久久网站| 欧美97超碰| 美女写真| 91在线视频免费中出| 亚洲情色 无码专区| 91看黄片| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 大香蕉黄色一区| 99re95| 欧美劲爆第一页| 6080YYY午夜理论片在线观看| 日韩一级片| 久久啊啊啊视频| 2017大香蕉| 久久久精品国产亚洲AV无码| 国产青青美女玩逼视频| 操一操摸一摸| 五月天激情婷婷| 丁香7月婷婷| 影视综合无码少妇| 国产精品视频电影| 人人操人人肉久久精品| 高清国产av无码| 青青操视频在线| 国产精品盗摄 偷窥盗摄| 性爱动态120秒| 97中文综合| 国产精品久久久久久 百度| 精品九九九九九九九| 超碰97久久| 水澄无码AV| 欧美天天综合网版| 99精品在线播放| 5252色欧美在线男人的天堂| 人人摸人人摸人人干| 亚洲成人色情五月天丁香花| 国产婷婷综合在线观看| 91久久精品国产| 欧美亚洲激情| 久久色人体| 亚洲欧美色图片| 欧州色图区| 97爱综合| 欧美专利1区2区3区4区5区免费| 欧美性暴力| 艳美熟妇先锋一二三区| 黑人猛交| 欧美亚综合色图| 日韩精品字幕| 操b网站亚洲无码| 国产在线观看91精品一区| 东北女人的毛片| 影视综合无码少妇| 国产精品天干天干综合网麻豆| 亚洲h片在线免费观看| 日韩久久艹| 亚州操逼图| 日韩无码服务区| 综合五月婷婷| 九九九九久久久久| 色91综合网| 琪琪精品免费一区二区三区| 色悠久久久av| 久久99视频| 五月天亚洲色图| 超碰国产情侣自拍网| AV天堂国产| 青青草玖玖爱| 免费黄色片子| 无码人妻精品酒店| 国产美女激情| 精品成人av一区二区三区在线| 78精品在线| 欧美综合色站| 青草青草久热| se..亚洲欧美| 97超碰免费人人性爱| 免费看久久久性性| 免费成人自拍视频在线| 人人噜夜夜操| 九九AV| 在线亚洲 欧美 日本专区| 人妻熟妇久草在线| 色五月亚洲| 人人操我人人干| 91插B网站| 久久9久9久99久9久9| 国产三级多多影院2022国产AA一级毛片无码 | 人人操人人摸人人骑| 欧美97视频| 日韩成人精品中文字幕| CCYY草草影院地址入口| 国产精品69久久久久孕妇欧美 | 亚洲第二页| 亚洲一二三四区机械| 亚洲无线码一区国产欧美国| 日韩欧美性吧婷婷乱伦大香蕉 | 精品视频免费在线一区| 人妻娇喘 激情视频| 夜夜国产一区| 无码又爽又硬又激情免费视频| 高潮毛片无遮挡高清免费| 一级AAA片一区二区三区| 欧美亚洲丝袜美女电影| 91久久久久久| 91快色色色色色| 亚洲av青草久久一区二区| 天天天堂影视日韩亚洲91| 丝袜狠狠草尤物人妻av91| 欧美婷婷五月天| 插穴性爱视频在线观看| 人人搞人人插人人操| 欧美色老汉| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 性站 | 白丝1区2区3区| 婷婷久久五月| 婷婷午夜成人色中色| 伊人网青青| 大学生美女口爆| juliaann欧美丝袜办公室| 97操综合| 免费亚洲国产精品久久一区| 91偷拍欧美亚洲| 毛片视频白嫩| 亚洲情色第一页| 99啪啪| 亚洲AV成人在线| 欧美日韩国内不卡| 国产成年免费大片黄在线观看| 欧美福利视频啊啊啊啊| 少妇久久久| 久艹日日日| 人妻丝袜一区二区三区在线| 欧美综合中文| 天天夜夜rb| 欧美视频一区二区三区| 九九九九一区| 一卡二卡在线播放| 一本大道青青| 91n处女在线观看| 人妻少妇无码 | 日韩精品一区二区三区色欲| 国产无码一二三区| 美女黄频a美女大全免费皮| 亚洲精品亚洲人成在线麻豆| 99精品久久久久久久婷婷| 色色香蕉| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 欧美色图天堂网m| 国内黄色精品| 亚欧中文字幕在线视频| 久久久久久久久久黄色网| 亚洲综合小视频小说在线观看| 夜夜操av亚洲一区二区| 亚洲五区熟女| 天美传媒Av在线| 免费97视频| 亚洲乱熟女一区二区| 婷婷丁香人妻 | 国桃视频产巨乳精品一区二区在线| 欧美 亚洲 另类 综合| 亚洲美女黄色| aV中文麻| 97色碰| 无遮挡一级毛片视频免费的| AA特级绝黄| 大香蕉九九| 亚洲不卡不卡中文字幕不卡 | 白丝1区2区3区| 天天看特黄的免费网站| 伊人午夜福利视频| 日本欧美不卡| 国产精品懂色tv影视免费观看| 影音先锋少妇| 久久美女福利是上海美女| 精品视频久久久久九九九九9999| 日本美女性生活久久久久久久| 性生活久久久久久久久久| 玖玖爱伊人玖玖爱| 精品午夜福利| 国产一区在线观看无码AV| 国产亚洲精品自在线亚洲情侣| 亚洲情色婷婷五月天| 夜草欧美| 色吊丝 日日骚 清纯唯美| 放黄片放3级黄片没穿衣服| 思思热国产在线视频| 九九99久久| 粉嫩少妇自慰在线| 午夜美女诱惑电源网| 人人看黄色视频| 色青青久久影视| 欧美日日夜夜| 啊啊在线| 亚洲无码国产精品久久| 亚洲色五月| 久久久久久久久久久久久久久久9| 欧美丝袜亚洲| 岛国在线免费视频| 青草视频在线看看看看看看看看看| 狠狠色一区二区中文字幕| 蜜臀久久99精品久久久久久婷婷| 三级特黄60分钟播放| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 精品一区二区三区蜜桃臀赵总| 啊啊啊啊啊操我视频| 春色综合免费| 午夜视频久久久久一区| 99这里有精品视频| 91精品久久久久久77777| 亚洲视频中文一区| 九九热九九| 欧美日韩亚洲电影| 国产拍偷精品网站| 99热在线播放| AV男人天堂网| 亚洲国产精品9999在线观看| 91原创在线观看| 黑人性暴力毛片| 日va操| 久婷婷一区| 永久电影三级在线观看| 这里只有精品久久| 久久精品国产97欧美精品亚洲 | 日韩激情视频| 欧美天天综合网| 成人日韩欧美| 人妻喷水| 婷婷影院入口| 中文字幕人乱码中文字的预防方法 | 日本操逼aaaaa| 天美传媒国产原创中文字幕亚洲欧美另类| 美女黄码视频午夜| 久久久一区二区三区三州| 天天操av懂色| 中文字幕后石码四区五区| 五月丁香啪啪啪| 一本大道青青| 日本岛国黄色网址| 天天影视综合色| 亚洲av乱伦色图网站| 免费男人的天堂| 一区二区三区视频在线观看免费| 98超碰日本| 丰满人妻无码一区二区三区| 爱爱久久| 强奸乱伦中文字幕AV| 91欧美性| 久久国内| 国产午夜福利合集| 色婷婷九月| 久久久久久久久一区二区三区| 九九热精品在线| 久夜视频| 日韩精彩免费| 欧美伊人久久综合网| 情色五月天网| 操逼视频亚洲| 麻豆色约约| 亚洲高潮少妇| 中文字幕一区二区视频在线观看| 97干com| 91香蕉视频在线观看免费| 天堂资源站| 国产亚州精品美女久久久免费| 超碰偷拍| 亚码激情| 欧美一区二区三区互相| 骚女高跟AV在线| 成视频在线观看免费看| 97干在线视频| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 蜜桃精品一区二区三区ww| 18禁看网站一区| 天天综合网AV91| 能直接看AV的网站| 人妻天堂网| a人欧美综合天堂麻豆| 日本国产欧美高清在线| 久久精品无码熟妇一区二区三区视频导航| 九月丁香| AVE乱伦| 日产成人久久| 嗯嗯嗯好爽| 91亚洲色人| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 嗯嗯啊啊亚欧精品| 亚洲成人一区二区精品| 日韩成人人妻网站| 天天操av懂色| 国产精品久久久无码AV网站| 中文字幕一区二区三区人妻不卡| 91 国产丝袜在线放观看| 日本激情免费大片| 国产传媒日韩| 啊啊啊啊啊啊啊啊要喷了| 99国产人成精品| 国产操操日韩三级黄| 天天看片青娱乐| 国产一区二区久久| 嗯嗯嗯嗯啊啊啊好紧好大| 少妇天堂| 亚洲97p| 超碰97起碰| 欧美日韩性爱无码| 亲子敌伦对白在线播放| 超碰一区二区| 蜜臀在线免费观看在线免费观看| 乱伦日本色图AⅤ| 黄色免费一级在线毛片| 好一吊区二区| 91挑色欧美| 艳美熟妇先锋一二三区| 亚洲精品人妻吞精av | 日韩国产品视频中文字| 日韩免费看黄片| 狠狠色噜噜狠狠狠狠2018| 九九九精品美女| 999熟女精品| 啊啊好多水| 欧美少妇大量自拍视频在线观看| 免费人成?大片在线播放| 国产一区二区三三视频| 91狠狠综| 国产精品欧美在线观看| 四虎免费视频| 天天看高清麻豆| 91电影色诱| 啊嗯好大视频在线观看| 伊人成人中文字幕久久网| 亚欧高清v| 新婚人妻扶着粗大强行坐下| 久久久久久一日韩字幕无码| 最新无码国产| 国产白丝精品在线观看| 欧美se综合| 性欧美999| 久久国产精品一区二区| 日本国产二线女色| 日韩中文字幕精品一二三事国产精品| 粉嫩AV一区夜夜嗨| 无码视频一区二区| 日韩人妻无码精品系列| 少妇与黑人高潮在线| 99re这里只有精品3| JULIA人妻风俗店中出电影| 青青草九九九九九| 亚洲色图久久成人| 色老汉玖玖爱| 天美传媒国产原创中文字幕亚洲欧美另类 | 无码免费在线观看黄色片| 亚洲综合电影| 亚洲一级黄色毛片| 中文字幕av亚洲精品| 1769成人国产精品视频| 中文操逼字幕| a片偷拍视频| 久久精品国产AV一区二区三区| 立川理惠被中出无码| 亚洲人妻中文在线视频|