亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Word模板的復(fù)雜文檔快速生成方法

        2020-10-15 11:00:54黎茂鋒劉志勤
        計算機應(yīng)用與軟件 2020年10期
        關(guān)鍵詞:引擎表格文檔

        駱 蓉 黃 俊 黎茂鋒 劉志勤

        (西南科技大學(xué)計算機科學(xué)與技術(shù)學(xué)院 四川 綿陽 621010)

        0 引 言

        Word作為一款功能強大的字處理軟件,廣泛應(yīng)用于各個行業(yè)。在各類數(shù)據(jù)分析系統(tǒng)開發(fā)場景中,往往需要動態(tài)生成Word形式的數(shù)據(jù)分析報告。這些報告通常邏輯結(jié)構(gòu)復(fù)雜,數(shù)據(jù)展現(xiàn)形式多樣,包含了文本、表格、公式、圖片等,有的甚至需要在已有的表格內(nèi)再嵌入圖片或者表格,并且報告的生成對內(nèi)容格式與排版的要求非常嚴格。一些Word報告包含的數(shù)據(jù)量十分龐大,可達幾百頁之多。對于這樣復(fù)雜的Word報告,直接使用COM組件技術(shù)[1]、ActiveX技術(shù)[2]和Jacob技術(shù)[3]等開發(fā)技術(shù)硬編碼生成Word文檔,不僅耗時費力,且代碼量大,可讀性差,不利于后期修改維護。

        針對以上問題,目前有兩種較好的解決方案。第一種為Word模板替換法[4-6],開發(fā)者預(yù)先制定帶有動態(tài)內(nèi)容的Word模板,再通過相應(yīng)開發(fā)工具包解析替換模板中的占位內(nèi)容,生成新的文檔。該方法直接以Word文檔為模板,內(nèi)容的格式與排版可直接通過Office軟件完成,減小了程序的復(fù)雜性,便于后期的修改維護,但文檔生成效率不高,只適用于較小數(shù)據(jù)量的Word文檔生成場景。第二種為模板引擎生成法[7-9],開發(fā)者仍然需要先制作Word文檔,并另存為Word 2003 xml文檔,再通過模板引擎的相關(guān)語法修改xml文檔中的動態(tài)內(nèi)容,形成新的模板。使用模板引擎解析該模板并填充數(shù)據(jù),輸出最終的.doc文檔。該方法很大程度上提高了文檔的生成效率,但生成的文檔較大,開發(fā)者需要花費大量的時間制作模板,且當文檔樣式改變時,必須重新訂制對應(yīng)的模板,不利于修改維護。因此,如何平衡該類文檔的生成效率、開發(fā)維護難度與工作量,是目前亟需解決的問題。

        針對現(xiàn)有方法的不足,本文提出了一種基于Word模板的復(fù)雜文檔快速生成方法,實現(xiàn)了文檔的高生成效率和低開發(fā)成本?;贠ffice Open XML規(guī)范(OOXML)[10]實現(xiàn)了Word文檔的自動生成,并通過Word文檔自動生成主文檔部件documen.xml的Enjoy模板,使得開發(fā)者既能使用Word模板加快開發(fā)速度,又能使用Enjoy模板引擎提高文檔生成效率。對比實驗表明,本文方法在文檔生成效率以及文檔生成大小上綜合最優(yōu)。

        1 相關(guān)技術(shù)

        1.1 OOXML

        Office Open XML為Microsoft開發(fā)的一種以XML為基礎(chǔ)并以ZIP格式壓縮的電子文件規(guī)范,支持文件、表格、備忘錄和幻燈片等文件格式[11]。在MS Word 2007及之后版本中,OOXML替代了傳統(tǒng)的二進制格式,成為Word文檔的默認存儲格式,Word文檔擴展名由.doc變?yōu)?docx。目前,有不少研究人員與開發(fā)者利用該規(guī)范構(gòu)建Word文檔生成與修改的解決方案[12-14]。

        在OOXML格式下,Word文檔由一個壓縮的ZIP包組成,解壓縮后可得到Word文檔的內(nèi)部組織結(jié)構(gòu),如圖1所示。Word文檔由文件夾和文件組成,這些文件被稱為部件(part),每個部件定義了文檔的特定信息。_rels文件夾用于定義ZIP包的部件關(guān)系;docProps文件夾用于定義應(yīng)用程序的屬性部件;word文件夾用于定義文檔主體內(nèi)容,包含存放關(guān)系部件的res文件夾、存放文檔主題樣式的theme文件夾、存放多媒體內(nèi)容的media文件夾、存放正文的主文檔部件document.xml,以及存放整體樣式的樣式部件style.xml等文檔內(nèi)容部件;[Content_Types].xml文件用于定義文檔各個部件的屬性信息以及內(nèi)容類型。因此,修改模板中的相應(yīng)部件后,與該模板中的其他部件一同壓縮就能生成目標Word文檔。本文根據(jù)上述原理制定了Word文檔的生成策略。

        圖1 Word文檔內(nèi)部組織結(jié)構(gòu)

        Word文檔中的部件使用WordprocessingML語言[15]進行描述,其形式符合XML的基本規(guī)范。由于提出的復(fù)雜文檔快速生成方法主要是對document.xml文件進行操作,特將該文件中的核心元素以及結(jié)構(gòu)做一個簡單說明。在document.xml文件中,元素w:body代表正文主體框架,由多個塊級元素組成,如段落元素w:p和表格元素w:tbl。其中:w:p可包含多個連續(xù)文本范圍元素w:r,而每一個w:r又可包含文本元素w:t或繪圖元素w:drawing;w:tbl由多個行元素w:tr組成,在w:tr中可包含多個單元格元素w:tc,而每一個w:tc又可以包含多個w:p和w:tbl。本文根據(jù)document.xml的xml結(jié)構(gòu)設(shè)計了Enjoy模板生成方法。

        1.2 Enjoy模板引擎

        Enjoy引擎模板是JFinal框架的組成部分,可單獨使用。它是一個由Java編寫的極輕量級的模板引擎,大小僅為227 KB[16]。相比于FreeMarker和Velocity等傳統(tǒng)模板引擎,Enjoy不依賴第三方工具進行詞法分析和語法分析,具有更優(yōu)的性能。此外,Enjoy僅含7個核心指令,在表達式規(guī)則的設(shè)計上也盡可能沿用Java的語法規(guī)則,且基于空合操作符,實現(xiàn)了安全取值、安全調(diào)用,避免顯式判斷空值操作,使得模板制作更加容易。本文選擇使用Enjoy模板引擎生成主文檔部件document.xml。

        1.3 DOM4J

        DOM4J是一個開源的Java XML API,它提供了大量的操作XML文件的接口,其性能優(yōu)異,功能強大,簡單易用[17]。本文使用DOM4J技術(shù)讀取并修改document.xml文件。

        2 方法設(shè)計

        2.1 總體設(shè)計

        根據(jù)OOXML規(guī)范,本文方法直接以Word文檔作為模板,通過復(fù)制模板中的所有部件并修改特定部件中的內(nèi)容生成目標文檔,總體設(shè)計如圖2所示。本文生成的Word文檔主要是對模板中正文內(nèi)容的修改,涉及的部件有document.xml、document.xml.rels,以及[Content_types].xml文件,這三個xml類型文件可直接通過DOM4J技術(shù)進行修改。但當目標文檔中填充的數(shù)據(jù)量較大時,就需在document.xml中頻繁添加樹節(jié)點,使得文檔的生成效率變低。對此,引入Enjoy模板引擎技術(shù)生成document.xml。

        圖2 復(fù)雜文檔生成方法總體設(shè)計

        引入Enjoy模板引擎后,開發(fā)者必需在document.xml文件中插入Enjoy指令生成新的Enjoy模板。為了簡化開發(fā),本文基于Enjoy指令,設(shè)計并實現(xiàn)了一套Word模板指令集,該指令集完成了指令規(guī)范化與指令解析,可自動生成document.xml的Enjoy模板。因此,開發(fā)者只需在Word模板中編寫動態(tài)內(nèi)容及其邏輯控制,而不用關(guān)心對應(yīng)Enjoy模板的生成過程。

        2.2 Enjoy模板的自動生成

        開發(fā)者通過在Word模板中直接使用Enjoy指令編輯動態(tài)內(nèi)容來生成document.xml文件的Enjoy模板是不可行的。主要原因有以下兩點:(1)開發(fā)者在生成document.xml文件的Enjoy模板時,應(yīng)該修改文本元素w:t或繪圖元素w:drawing的屬性實現(xiàn)動態(tài)文本、圖片的標記,并在相關(guān)元素的前后位置插入#for、#if等指令控制內(nèi)容邏輯。但在使用Word軟件編輯模板時,所有的指令均被視為段落中的文本,存儲于w:t中,而不能插到w:drawing及相應(yīng)元素的前后位置上。(2)Word模板中的指令轉(zhuǎn)換成xml形式時,通常會被拆分,存儲在多個w:t中,Enjoy模板引擎無法解析。針對這兩個問題,本文在Enjoy指令的基礎(chǔ)上,設(shè)計了一組模板指令,用于標記Enjoy指令在document.xml中的位置,實現(xiàn)了指令規(guī)范化以及指令解析,使得開發(fā)者可直接通過Word文檔生成Enjoy模板。

        2.2.1模板指令設(shè)計

        模板指令由兩部分信息組成。一部分為實際操作動態(tài)內(nèi)容與邏輯的Enjoy指令;另一部分為Enjoy指令在document.xml中的位置信息。

        根據(jù)以往開發(fā)者手動生成Enjoy模板的經(jīng)驗可知:Enjoy插值指令#()出現(xiàn)的位置主要在文本元素w:t以及繪圖元素w:drawing的特定屬性中。#if、#for、#switch等邏輯控制指令出現(xiàn)的位置主要在塊級元素w:p和w:tbl、運行元素w:r,以及行元素w:tr的前后位置之間。據(jù)此,設(shè)計了如下模板指令。

        (1)文本輸出指令。由于動態(tài)文本的位置就在元素w:t中,不需要改變位置,可直接使用Enjoy模板引擎的插值指令:#(para),para的取值為基本類型、對象的屬性或者數(shù)組中的一個元素等。

        (2)圖片輸出指令。圖片信息存儲于繪圖元素w:drawing中,考慮到圖片的循環(huán)輸出,需要修改w:drawing中的wp:docPr、pic:cNvPr,以及a:blip元素中的屬性值。由于要替換多個參數(shù),為了降低模板制作的復(fù)雜度,將上述需要修改的屬性封裝到圖片類中。定義圖片輸出指令為:@pic(picObj),picObj參數(shù)只能是圖片類實例。為了方便解析,在圖片輸出指令后放置樣例圖片,并保證指令與樣例圖片放在一個段落中。解析過程中,需要將picObj的屬性分別插入到w:drawing的相應(yīng)位置;為防止picObj為空所導(dǎo)致的文檔生成錯誤,需要在w:r之前判斷該參數(shù)是否為空。

        (3)塊級邏輯指令。為了實現(xiàn)段落、表格間的邏輯控制,定義塊級邏輯指令:@blk(stats),參數(shù)stats為一個或多個Enjoy模板引擎中的邏輯控制指令。解析時,會直接將該指令所在的w:p替換為stats指令。

        (4)運行邏輯指令。為了實現(xiàn)段落內(nèi)的邏輯控制,定義運行邏輯指令:@run(stats),參數(shù)stats為一個或多個Enjoy指令。解析時,stats會取代該指令所在的w:r。

        (5)行邏輯指令。為了實現(xiàn)表格行的邏輯控制,定義行邏輯指令:@befTr(stats)和@aftTr(stats),分別代表在當前指令所在的w:tr之前插入stats指令和在當前指令所在的w:tr之后插入stats指令。

        2.2.2指令規(guī)范化

        指令規(guī)范化是指把分散到多個w:r中的模板指令合并到第一個w:r中。由于完整的指令存儲在段落w:p中,所以只需要遍歷所有w:p進行指令規(guī)范化即可,具體方法如下:獲取所有的段落元素w:p;對于每一個w:p,依次獲取含有文本元素w:t的運行元素w:r,并將w:t的內(nèi)容追加至buf數(shù)組中;通過詞法分析算法對buf數(shù)組進行模板指令識別,記錄每一個模板指令開始的w:r和結(jié)束的w:r;合并開始w:r到結(jié)束w:r之間的文本內(nèi)容,實現(xiàn)模板指令的規(guī)范化;直到所有的段落遍歷結(jié)束,指令規(guī)范化完成。指令規(guī)范化流程如圖3所示。

        圖3 指令規(guī)范化流程

        指令規(guī)范化執(zhí)行完成后,在一個w:t中,可能既包含靜態(tài)文本,又包含模板指令。

        2.2.3指令解析

        指令解析主要是將模板指令中的Enjoy指令放到正確的位置,具體步驟如下:使用DOM4J技術(shù)加載document.xml文件,生成對應(yīng)的dom樹,獲取所有的w:p;遍歷w:p,獲取當前w:p中所有含有w:t的w:r;對于每個w:r,獲取w:t的文本內(nèi)容并按照指令類型劃分成多個模板指令(將靜態(tài)文本處理視為文本輸出指令);分別根據(jù)指令類型對每一個模板指令進行處理,由于使用DOM4J不能直接在元素的前后位置插入Enjoy指令,因此創(chuàng)建占位元素進行標記,使用Map集合記錄占位元素的信息與對應(yīng)的Enjoy指令;直到所有的模板指令都處理完成后,刪除當前w:r;將dom樹轉(zhuǎn)化為字符串,并把所有的占位元素替換為對應(yīng)Enjoy指令。指令解析流程如圖4所示。

        圖4 指令解析流程

        指令解析完成后,即完成了Enjoy模板的生成。

        2.3 Word文檔生成

        Word文檔生成之前需要準備數(shù)據(jù),由于圖片的生成涉及document.xml.rels與[Content_types].xml文件的修改,因此將文本數(shù)據(jù)與圖片數(shù)據(jù)分離,分別以樹狀結(jié)構(gòu)進行組織,便于后續(xù)對圖片進行操作。

        在準備好Word模板、Enjoy模板以及數(shù)據(jù)之后,基于OOXML生成Word文檔的具體流程如下。首先判斷是否涉及圖片的生成:如果不涉及,則直接通過Enjoy模板引擎技術(shù)將文本數(shù)據(jù)填充到Enjoy模板中,生成新的document.xml文件,將其與Word模板的其他部件一同壓縮輸出,得到目標文檔;如果涉及圖片的生成,則需要獲取所有的圖片信息,將其轉(zhuǎn)化為圖片類,添加到文本中,并統(tǒng)計圖片的內(nèi)容類型以及記錄引用關(guān)系。再通過Enjoy模板引擎生成document.xml文件,復(fù)制Word模板中的document.xml.rels與[ContentTypes].xml文件,并分別追加圖片的引用關(guān)系與內(nèi)容類型。最后將圖片數(shù)據(jù)寫入word/media/文件夾中,同時將新生成的部件與Word模板中的其他部件一起壓縮輸出,得到目標文檔。文檔生成的核心步驟如算法1所示。

        算法1文檔生成算法

        輸入:Word模板文件wFile,Enjoy模板文件eFile,文本數(shù)據(jù)模型dataMap,圖片數(shù)據(jù)picMap。

        輸出:目標文檔dirWord。

        Procedure WordGeneration

        1.if picMap=null then

        %生成document.xml文件

        2.docXML ← genDocumentXML(eFile,dataMap)

        %將document.xml與Word模板的其他的部件一同壓縮輸出

        3. dirWord ← replaceWordPart(wFile,docXML)

        4. else

        %將圖片數(shù)據(jù)轉(zhuǎn)換為圖片類

        5. picClassMap ← picMap2PicClassMap(picMap)

        %將圖片的信息添加到文本數(shù)據(jù)模型

        6. dataMap.add(picClassMap)

        7. docXML ← genDocumentXML(eFile,dataMap)

        %獲取模板中的[ContentTypes].xml文件

        8. typesXML ← getContentTypesXML(wFile)

        %追加圖片的內(nèi)容類型

        9. typesXML ← addContentTypes(typesXML, picMap)

        %獲取模板中的document.xml.rels文件

        10. docRelsXML ← getDocResXML(wFile)

        %追加圖片的引用信息

        11.docRelsXML ← addPicRes(docResXML, picClassMap)

        %將部件壓縮輸出到目標文檔中

        12.dirWord ← replaceWordPart(wFile, docXML, typesXML, docRelsXML)

        %把圖片數(shù)據(jù)寫入word/media/文件夾

        13. addPic(dirWord, picClassMap)

        14. end if

        15.return dirWord

        3 應(yīng)用實例

        目前,本文方法已經(jīng)成功應(yīng)用于某氣動數(shù)據(jù)庫系統(tǒng)中,實現(xiàn)了氣動設(shè)計數(shù)據(jù)手冊、過程文檔、分析報告等多種文檔的快速、準確生成。這些文檔為飛行器研究人員提供了氣動數(shù)據(jù)分析、優(yōu)化、決策依據(jù)。氣動數(shù)據(jù)量大、維度高、結(jié)構(gòu)復(fù)雜等特點[18]使得飛行器研制過程復(fù)雜,利用傳統(tǒng)方法生成相應(yīng)的文檔難度很大;同時,文檔的生成還需要根據(jù)不同的研究方向和行業(yè)需求進行定制,工作量巨大。而使用本文提出的方法極大地降低了開發(fā)難度,減少了工作量,提高了系統(tǒng)的研發(fā)效率。

        以系統(tǒng)中數(shù)據(jù)分析報告的生成為例,該報告中包含了氣動數(shù)據(jù)集來源、數(shù)據(jù)類型等統(tǒng)計信息,另外還包含了大量的表格、圖像等數(shù)據(jù)分析內(nèi)容。通過本文設(shè)計的指令集實現(xiàn)的該報告Word文檔模板如圖5所示。

        圖5 某氣動數(shù)據(jù)庫系統(tǒng)項目的分析報告模板

        通過該模板可以對圖片、表格、表格行等動態(tài)內(nèi)容進行添加,并對這些內(nèi)容進行結(jié)構(gòu)上的邏輯控制。采用本文方法生成的數(shù)據(jù)分析報告實例如圖6所示。

        圖6 某氣動數(shù)據(jù)庫系統(tǒng)項目的分析報告實例

        可以看出,圖6中固定文本、樣式等靜態(tài)內(nèi)容與圖5完全一致;表格、圖像等動態(tài)數(shù)據(jù)也按照預(yù)期填充到了模板中的相應(yīng)位置。

        上述實例表明,本文方法操作簡單,易于理解,降低了開發(fā)成本,便于后期維護,具有較好的實用性。

        4 實 驗

        4.1 實驗環(huán)境

        所有實驗均在普通PC上進行。硬件環(huán)境:處理器為Intel(R)Core(TM)i5-2520M @ 2.5 GHz,內(nèi)存為4 GB。軟件環(huán)境:Windows 10 專業(yè)版,MyEclipse 2017,JDK1.8。

        4.2 性能對比與分析

        將本文方法與文獻所提兩種復(fù)雜文檔生成方法的生成效率以及文檔大小進行對比,來分析本文方法的性能。方法1為Word模板替換法,選用POI解析Word文檔替換動態(tài)內(nèi)容,生成docx文檔;方法2為模板引擎生成法,借助FreeMaker模板引擎生成doc文檔。

        4.2.1文檔生成效率分析

        以生成不同表格行數(shù)和不同圖片數(shù)量的Word文檔來對比這三種方法的文本生成效率。在實驗中,不考慮數(shù)據(jù)準備所耗用的時間。

        在表格實驗中,循環(huán)行為7列,三種方法生成文檔所用時間如圖7所示。

        圖7 三種方法生成表格文檔所用時間

        可以看出,方法1的文檔生成時間隨表格行數(shù)的增加而急劇上升,文本生成效率較低(由于該方法生成10 000行表格文檔所用時間較長,因此未在圖中給出其生成100 000行表格文檔的時間);方法2與本文方法隨著行數(shù)的增加,總時間增加,但是漲幅不大,文本生成效率更高。在10 000行以內(nèi),本文方法略優(yōu)于方法2,但隨著表格行數(shù)的繼續(xù)增加,本文方法與方法2之間的時間差距變??;10 000行后,方法2略高于本文方法。出現(xiàn)該趨勢的原因是:方法2的總耗時由模板解析時間及文檔輸出時間組成,而本文方法的總耗時還包含了文檔壓縮時間;當數(shù)據(jù)量較小時,本文方法壓縮輸出document.xml文件的時間占比小,而Enjoy模板引擎的解析性能優(yōu)于FreeMaker模板引擎,本文方法比方法2更優(yōu);但隨著數(shù)據(jù)量的增大,Enjoy模板的解析時間占總時間的比例越來越小,而壓縮輸出document.xml文件占總時間的比例越來越大,最終導(dǎo)致本文方法略低于方法2。

        在圖片實驗中,所用圖片大小在幾十到幾百KB之間,三種方法生成不同數(shù)量圖片的Word文檔所用時間如圖8所示。

        圖8 三種方法生成圖片文檔所用時間

        可以看出,方法1的文檔生成時間隨圖片數(shù)量的增加而大幅度增加;方法2與本文方法的文檔生成時間隨圖片數(shù)量的增加而小幅度增加,且本文方法優(yōu)于方法2。

        通過實驗證明,方法2與本文方法的文檔生成效率接近,均高于方法1。

        4.2.2文檔大小分析

        Word文檔的大小會影響文檔下載的速度以及打開Word文檔的速度。因此,本文將其作為一個評價指標,分別比較了三種方法生成的Word文檔大小。

        三種方法生成不同表格行數(shù)的Word文檔大小如表1所示。

        表1 三種方法生成表格文檔大小 KB

        方法1與本文方法的文檔大小隨著表格行數(shù)的增加少量增長,而方法2則急劇上升,在10 000行時,其大小約為本文方法的44倍。這是由于文檔格式的差異造成的,方法1與本文方法生成的Word文檔格式為OOXML,方法2生成的Word格式為二進制格式,OOXML存儲文檔采用了ZIP壓縮技術(shù),有效地減小了文檔的大小。

        三種方法生成多幅圖片的Word文檔大小如表2所示。

        表2 三種方法生成圖片文檔大小 KB

        在生成相同數(shù)量圖片的文檔時,方法1與本文方法生成的文檔較小,方法2生成的文檔較大。隨著圖片數(shù)量的增加,方法1與本文方法的優(yōu)勢更加明顯。原因是方法1與本文方法對圖片進行了壓縮存儲,減少了圖片的大小,方法2將圖片轉(zhuǎn)換為Base64編碼進行存儲,沒有進行壓縮。

        綜上所述,在文檔生成的時間上,本文方法與方法2效率相近,皆高于方法1。在文檔生成的大小上,本文方法與方法1生成的文檔大小接近,都小于方法2。因此,本文方法總體上優(yōu)于其他兩個方法。

        5 結(jié) 語

        本文針對現(xiàn)有的復(fù)雜Word文檔生成方案存在的開發(fā)復(fù)雜與工作量大的問題,提出了一種基于Word模板的復(fù)雜文檔快速生成方法。該方法基于OOXML規(guī)范制定了Word文檔生成策略,可直接使用Word文檔作為模板。同時設(shè)計了一組模板指令,實現(xiàn)了指令規(guī)范化與指令解析,能夠自動將document.xml文件轉(zhuǎn)換為Enjoy模板,在引入Enjoy模板引擎技術(shù)提高效率的同時,解決了Enjoy模板制作復(fù)雜和后期修改維護困難等問題。通過實例分析,并與已有的兩種方法進行了性能對比,證明了本文方法的可行性、實用性、高效性。

        猜你喜歡
        引擎表格文檔
        《現(xiàn)代臨床醫(yī)學(xué)》來稿表格要求
        有人一聲不吭向你扔了個文檔
        統(tǒng)計表格的要求
        統(tǒng)計表格的要求
        統(tǒng)計表格的要求
        藍谷: “涉藍”新引擎
        商周刊(2017年22期)2017-11-09 05:08:31
        基于RI碼計算的Word復(fù)制文檔鑒別
        Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
        無形的引擎
        河南電力(2015年5期)2015-06-08 06:01:46
        基于Cocos2d引擎的PuzzleGame開發(fā)
        狠狠色成人综合网| 在线视频观看一区二区| 精品一区二区三区芒果| 国产尤物av尤物在线观看| 亚洲h视频| 亚洲综合色婷婷七月丁香| 日本不卡视频一区二区| 小辣椒福利视频导航| 欧美日韩久久久精品a片| 免费国产调教视频在线观看| 国产精品亚洲一区二区三区在线看| 日本爽快片100色毛片| 国模无码视频一区| 久久久久亚洲AV无码专区一区 | 精品91精品91精品国产片| 老熟妇嗷嗷叫91九色| 女人18毛片a级毛片| 亚洲熟妇丰满大屁股熟妇| 国产精品无码不卡在线播放| 国产亚洲中文字幕一区| 日本无码欧美一区精品久久| 亚洲AV日韩AV永久无码电影| 久久精品国产视频在热| 亚洲成人中文字幕在线视频| 亚洲国产日韩欧美一区二区三区| 亚洲丁香五月激情综合| 在线免费观看毛视频亚洲精品| 久久精品亚洲精品国产色婷| 亚洲中文字幕无码爆乳av| 一区二区三区婷婷中文字幕| 日韩三级一区二区不卡| 欧美裸体xxxx极品少妇| 亚洲午夜精品久久久久久抢 | 亚洲AV秘 无码二区在线| 亚洲国产天堂av成人在线播放 | 91免费永久国产在线观看| 在线精品亚洲一区二区三区 | 亚洲国产综合精品中文| 国产成人午夜福利在线观看| 亚洲精品永久在线观看| 日本一区二区在线播放观看|