日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

Pdfium寬度數(shù)組解析:從字體原理到PDF文本重排實(shí)戰(zhàn)

Pdfium寬度數(shù)組解析:從字體原理到PDF文本重排實(shí)戰(zhàn) 上個(gè)月在處理一個(gè)PDF重排項(xiàng)目時(shí)我遇到一個(gè)詭異的問題文檔只有幾十頁字符提取和坐標(biāo)獲取全部正常但只要把文本按行重排中文就全部疊在一起英文卻安然無恙。一開始懷疑是編碼問題后來追到最后才明白罪魁禍?zhǔn)资亲煮w里的寬度數(shù)組——準(zhǔn)確地說是我的代碼壓根沒有讀取它。PDF在排版時(shí)對每個(gè)字符下一步位置的判斷完全建立在寬度數(shù)組之上因?yàn)槊總€(gè)字形畫完后光標(biāo)要往右推進(jìn)多少才能讓下一個(gè)字不重疊也不稀散這個(gè)推進(jìn)量就來自寬度數(shù)組。這篇文章就把我對“Pdfium如何處理寬度數(shù)組”的完整理解寫下來包括內(nèi)部數(shù)據(jù)結(jié)構(gòu)、讀取接口的能力邊界、容易踩的單位換算坑以及拿寬度數(shù)據(jù)做二次開發(fā)的實(shí)用技巧適合正在做PDF文本重排、坐標(biāo)標(biāo)注、版面分析或自定義渲染的開發(fā)者參考。1. 寬度數(shù)組PDF文本定位的隱藏基石1.1 一個(gè)浮點(diǎn)偏移引發(fā)的連鎖錯(cuò)位先還原一下那個(gè)問題的現(xiàn)象。某文檔里有一段中文和一段英文混排英文提取后按行重排位置幾乎一致中文重排后前一字的右邊緣直接壓到后一字的左邊緣整行字全部重疊。英文正常、中文異常這個(gè)現(xiàn)象本身就說明問題不在編碼而在字體英文大多走TrueType簡單字體寬度數(shù)組在字體字典里直接可見Pdfium能輕松讀到中文走的是Type0復(fù)合字體CIDFont它的寬度存儲路徑完全不同一旦路徑斷了就會回退到默認(rèn)寬度250千分單位而中文字形的真實(shí)寬度普遍在900到1000這個(gè)范圍。實(shí)際排版時(shí)250和1000的差距一乘上字號錯(cuò)位就會變得非常明顯。為什么寬度這么關(guān)鍵我們在屏幕上看到的每個(gè)字符本質(zhì)上是“畫”上去的。畫完一個(gè)字形之后下一個(gè)字的位置由當(dāng)前字形的推進(jìn)量advance width決定。PDF的內(nèi)容流里Tj運(yùn)算符只是把一串字符放在當(dāng)前位置真正決定它們橫向間隔的是每個(gè)字形對應(yīng)的寬度數(shù)據(jù)。字體負(fù)責(zé)提供形狀寬度數(shù)組負(fù)責(zé)提供排版依據(jù)兩者缺一不可。如果寬度數(shù)據(jù)丟失或錯(cuò)誤輕則文字重疊重則整段布局被打亂連換行位置都會跟著變化。頁面坐標(biāo)、字符解析都沒問題但重排結(jié)果錯(cuò)亂說明問題出在排版數(shù)據(jù)這一層——我拿到了形狀數(shù)據(jù)卻沒有把寬度數(shù)據(jù)一起帶走。這就像買菜譜只拿食材清單、不拿用量說明做出來的菜當(dāng)然不對。1.2 PDF里寬度數(shù)據(jù)到底存在哪在PDF文件層面寬度數(shù)據(jù)主要藏在兩個(gè)地方一是字體字典直接嵌入寬度表二是嵌入字體文件內(nèi)部的寬度度量。簡單字體Type1和TrueType通常直接在字體字典中放一個(gè)Widths數(shù)組同時(shí)用FirstChar和LastChar標(biāo)明數(shù)組覆蓋的字符編碼區(qū)間。數(shù)組下標(biāo)是從FirstChar開始的字符編碼c對應(yīng)的寬度取Widths[c - FirstChar]。如果目標(biāo)字符不在區(qū)間內(nèi)就回退到默認(rèn)寬度簡單字體里一般用字體自帶的MissingWidth或給一個(gè)固定兜底值不同解析器實(shí)現(xiàn)有差異。復(fù)合字體Type0尤其帶CID的走的是另一套結(jié)構(gòu)字體字典里先放一個(gè)DW值作為默認(rèn)寬度再放一個(gè)W數(shù)組。W數(shù)組里可以按CID區(qū)間寫多種格式比如[3 [500 600 700]]表示CID為3的字寬度是500CID為4的字寬度是600CID為5的字寬度是700再比如[10 15 800]表示從CID 10到CID 15這六個(gè)字形寬度統(tǒng)一是800。我一開始沒找到是因?yàn)榱?xí)慣性地只找Widths這個(gè)關(guān)鍵字忽略了Type0字體用的是W而不是Widths更忽略了那些沒有顯式寬度表、只能靠嵌入字體文件內(nèi)部數(shù)據(jù)才能拿到寬度的情形。這些差異在Pdfium內(nèi)部都有兼容處理但它兼容的結(jié)果不一定符合你對“寬度”這個(gè)概念的預(yù)期后面會詳細(xì)展開。1.3 Glyph單位、PDF單位與像素之間的換算寬度數(shù)組里的數(shù)值不是能直接當(dāng)像素用的數(shù)字。這里有三層單位搞混了后面全是坑。第一層是字形設(shè)計(jì)單位Glyph Unit字體文件內(nèi)部用的常見取值有1000、2048甚至有些字體用100。這一層只在字體文件內(nèi)部有意義。第二層是PDF千分單位PDF規(guī)范規(guī)定字體寬度以千分之一em為單位也就是把1em通常等于字號大小等分成1000份寬度數(shù)組里的999表示這個(gè)字形占0.999個(gè)em。第三層才是用戶空間坐標(biāo)也就是頁面上真實(shí)使用的“點(diǎn)”。從PDF千分單位到用戶空間需要乘以字號FontSize再到像素還要乘一個(gè)DPI/72的縮放因子。單位層級常見范圍到下一層的換算典型場景Glyph Unit100 / 1000 / 2048除以units_per_em再乘1000讀取字體文件內(nèi)部hmtx、CFF表PDF千分單位01000左右乘以字號Pdfium寬度接口、Widths/W數(shù)組用戶空間點(diǎn)與頁面尺寸相關(guān)乘以DPI/72FPDFText_GetCharBox輸出、頁面坐標(biāo)如果走FPDFText_GetCharBox拿字符邊界框API內(nèi)部已經(jīng)幫你做完了上述換算但如果你直接操作寬度數(shù)組、自己拼排版就一定要記得在拿到原始寬度后乘字號。我之前拿重排結(jié)果跟渲染結(jié)果對比時(shí)字號越大偏差越明顯正是這個(gè)轉(zhuǎn)換漏掉了。2. Pdfium讀取寬度的內(nèi)部機(jī)制與公開API2.1 從FPDFPage到CPDF_Font的解析鏈路Pdfium加載PDF文檔時(shí)并不是把所有字體和寬度數(shù)據(jù)一股腦塞進(jìn)內(nèi)存而是按需解析。調(diào)用FPDF_LoadDocument打開文檔后頁面對象處于“懶加載”狀態(tài)直到調(diào)用FPDF_LoadPage這一頁的內(nèi)容流才會被解析遇到文本對象時(shí)才會定位它引用的字體資源。在這個(gè)過程中字體對象在內(nèi)部會被構(gòu)造成CPDF_Font的子類簡單字體走CPDF_SimpleFont復(fù)合字體走CPDF_CIDFont。這兩個(gè)類內(nèi)部都維護(hù)了寬度相關(guān)成員。CPDF_SimpleFont里有一個(gè)m_Widths數(shù)組構(gòu)建時(shí)會把字體字典里的Widths和FirstChar/LastChar讀進(jìn)去CPDF_CIDFont則維護(hù)了類似區(qū)間映射的結(jié)構(gòu)再加一個(gè)默認(rèn)寬度字段。理解這條鏈路對調(diào)試很重要你拿到的字體對象寬度數(shù)據(jù)是否已經(jīng)就緒取決于它是否被“加載”過。某些場景下字體對象可能只有一個(gè)外殼內(nèi)部的寬度表還沒解析這時(shí)去查寬度會得到默認(rèn)值。一個(gè)常見的經(jīng)驗(yàn)是在調(diào)用渲染或文本提取相關(guān)接口之前可以先讓頁面做一次完整的渲染哪怕輸出到一張小尺寸位圖這樣字體解析邏輯基本都會走完后續(xù)讀寬度會更可靠。2.2 三個(gè)常用API的能力邊界Pdfium的公開API里跟寬度讀取直接相關(guān)的按使用頻次排大概是這三類。第一類是FPDFText_GetCharBox它返回一個(gè)字符在頁面上的邊界框左右上下坐標(biāo)。嚴(yán)格說這不是“寬度數(shù)組”但它包含了渲染結(jié)果層面的寬度信息是大多數(shù)二次開發(fā)最先碰到的接口。優(yōu)點(diǎn)是已經(jīng)處理完所有單位換算直接得到頁面坐標(biāo)缺點(diǎn)是它給的是字符實(shí)際占用方框不等同于排版推進(jìn)量。如果要模擬光標(biāo)推進(jìn)用它右邊界減左邊界也可以但要注意邊界框可能包含字距調(diào)整或字形溢出跟語義上的advance width不完全一致。第二類是按字形ID查寬度的單字形接口。它返回單個(gè)字形在“字體空間”下的寬度這個(gè)字體空間是經(jīng)過字體內(nèi)部度量矩陣縮放后的千分單位通常等于PDF標(biāo)準(zhǔn)寬度。它的粒度比GetCharBox細(xì)適合做重排但要自己額外獲取字號并做乘法。要注意接口名在不同版本中略有變化有的版本叫法完全不同使用前先查一下你手上版本的頭文件。第三類是批量獲取寬度數(shù)組的接口能一次性把整個(gè)寬度表拉出來減少逐字符調(diào)用開銷。注意它的語義是返回字體對象的原始寬度表形狀可能是稀疏數(shù)組或區(qū)間表你需要自己建立從字符編碼/CID到數(shù)組下標(biāo)的映射不能假設(shè)數(shù)組從0開始連續(xù)排。我的建議是做快速原型用第一類做重排引擎用第三類批量接口第二類只適合臨時(shí)調(diào)試。因?yàn)橹鹱址{(diào)用的封裝和上下文切換開銷在幾萬字文本的場景下會讓性能肉眼可見地變差后文有具體數(shù)據(jù)。2.3 CID字體與Simple字體的寬度存儲差異同樣是“寬度數(shù)組”Simple字體和CID字體的存儲與讀取路徑差得很遠(yuǎn)把兩者搞混是新手常見錯(cuò)誤。Simple字體Type1、TrueType的字符編碼通常是單字節(jié)寬度數(shù)組按CharCode索引區(qū)間連續(xù)、大小固定最多256個(gè)。Pdfium構(gòu)建這類字體時(shí)會直接把Widths數(shù)組拷貝進(jìn)內(nèi)存后續(xù)可以做到O(1)查找。缺點(diǎn)是一旦字符不在FirstChar和LastChar之間就只能回退到默認(rèn)寬度很多老PDF里亂碼字符或私有區(qū)字符都會被給出一個(gè)奇怪的默認(rèn)寬度。CID字體Type0的字符編碼是雙字節(jié)起的靠CMap把CharCode映射到CID再通過字體對象的內(nèi)部數(shù)據(jù)結(jié)構(gòu)把CID映射到寬度。寬度存儲是按“CID區(qū)間”組織的一個(gè)W數(shù)組可以覆蓋多個(gè)不連續(xù)區(qū)間所以Pdfium在CPDF_CIDFont里會把這些區(qū)間解析成一個(gè)索引結(jié)構(gòu)查詢時(shí)先找區(qū)間再計(jì)算區(qū)間內(nèi)偏移。對比項(xiàng)Simple FontType1/TrueTypeCID FontType0寬度表關(guān)鍵字Widths / FirstChar / LastCharDW / W索引依據(jù)CharCode單字節(jié)CID經(jīng)CMap映射數(shù)組形態(tài)連續(xù)數(shù)組長度一般≤256區(qū)間表可稀疏、可重疊查詢復(fù)雜度O(1)區(qū)間查找通常為對數(shù)級常見遺漏默認(rèn)寬度回退W區(qū)間邊界、編碼映射不一致從實(shí)測看Simple字體的寬度查詢基本是一條直線CID字體在區(qū)間多、字形多時(shí)會有明顯的查找開銷但Pdfium做了緩存普通文檔幾萬次查詢差異不大。真正要留神的不是性能而是CID的獲取方式同一個(gè)CharCode在不同CMap下映射到的CID可能不同從而查到不同寬度。如果你做文本處理時(shí)拿到的“字符編碼”和Pdfium內(nèi)部用的“字符代碼”不是同一個(gè)寬度表對不上就非常正常。3. 手把手讀取寬度數(shù)組并建立緩存3.1 讀取流程與代碼骨架先給一個(gè)能跑的流程。我整理的是C環(huán)境下、不走外部庫的常見寫法核心步驟是打開文檔、加載頁面、定位頁面對象、拿到字體句柄、讀取寬度。// 1. 打開文檔與頁面 FPDF_InitLibrary(); FPDF_DOCUMENT doc FPDF_LoadDocument(filePath, nullptr); FPDF_PAGE page FPDF_LoadPage(doc, 0); // 2. 遍歷頁面對象找第一個(gè)文本對象拿字體句柄 int objCount FPDFPage_CountObjects(page); for (int i 0; i objCount; i) { FPDF_PAGEOBJECT obj FPDFPage_GetObject(page, i); if (FPDFPageObj_GetType(obj) FPDF_PAGEOBJ_TEXT) { // 這里演示只拿第一個(gè)文本對象真實(shí)場景需要遍歷全部 FPDF_FONT font FPDFTextObj_GetFont(obj); // 版本差異較大以你的版本頭文件為準(zhǔn) break; } } // 3. 批量讀取寬度不同版本接口名有差異這里按語義寫 int widthCount 0; const unsigned int* widths GetFontWidths(font, widthCount);讀出來之后不要直接對widths數(shù)組按“字符的Unicode碼”去索引因?yàn)樗南聵?biāo)體系可能是CharCode、GID或CID取決于字體類型。我一般會再拿當(dāng)前文本對象的實(shí)際編碼信息建立一張本地映射表。如果批量接口在你的Pdfium版本里不可用退而求其次的寫法是遍歷某個(gè)字符區(qū)間逐字符調(diào)單字形寬度接口。但這種方式在Type0字體上通常會漏掉那些“沒有顯式寬度、需要回退默認(rèn)寬度”的字符你需要額外結(jié)合DW值做兜底。3.2 Fallback分支DefaultWidth與W數(shù)組區(qū)間寬度數(shù)組天然是稀疏的做讀取時(shí)必須寫清楚回退邏輯否則就會拿到一個(gè)“看似正常其實(shí)錯(cuò)誤”的默認(rèn)值。我用的回退邏輯是這樣double getCIDWidth(const FontWidthTable table, uint32_t cid) { // 先查CID是否落在某個(gè)W區(qū)間內(nèi) auto it table.w_interval.find(cid); if (it ! table.w_interval.end()) { return it-second; } // 不在任何W區(qū)間回退到DW默認(rèn)寬度 return table.default_width; }看起來簡單但實(shí)際項(xiàng)目里兩個(gè)細(xì)節(jié)很容易翻車。第一個(gè)W數(shù)組里同一個(gè)CID可能會出現(xiàn)兩次比如某個(gè)區(qū)間的端點(diǎn)同時(shí)被下一個(gè)區(qū)間覆蓋。多數(shù)解析器按“先到先得”處理但PDF規(guī)范并沒有嚴(yán)格禁止重復(fù)我建議讀取時(shí)主動(dòng)做“后者覆蓋前者”或者至少打一條日志否則排查時(shí)很難發(fā)現(xiàn)是哪個(gè)區(qū)間生效導(dǎo)致寬度偏大或偏小。第二個(gè)DefaultWidth的默認(rèn)值。規(guī)范建議值是0還是250在Pdfium內(nèi)部CIDFont的默認(rèn)寬度往往初始化為0但如果字體字典里沒有DWPDF閱讀器通常會按固定寬度字體的慣例給一個(gè)默認(rèn)值常見實(shí)現(xiàn)是250。你自己代碼里回退時(shí)要注意“標(biāo)準(zhǔn)默認(rèn)值”和“解析器默認(rèn)值”可能不一樣這個(gè)差別會直接反映在字體缺失時(shí)文字的稀疏或重疊上。3.3 緩存鍵的設(shè)計(jì)字體句柄變體寬度數(shù)據(jù)在文檔生命周期內(nèi)基本不變但每次調(diào)用接口重新讀取都有開銷所以一定要緩存。緩存鍵的設(shè)計(jì)上我踩過一個(gè)坑直接用字體句柄當(dāng)鍵。原因在于同一個(gè)PDF文檔里同一套物理字體可能以多個(gè)不同的字體句柄出現(xiàn)——頁面A和頁面B各自引用了不同資源目錄里的同名子集。它們的寬度表內(nèi)容可能完全相同但句柄不同導(dǎo)致緩存命中率上不去。反過來同一個(gè)句柄在字體加載前后內(nèi)部字段的可用性也可能變化所以更好的做法是“字體標(biāo)識名子集標(biāo)識”作為鍵。我最終用的緩存結(jié)構(gòu)是一個(gè)全局哈希表鍵是編碼后的字符串值是一份不可變的寬度表快照。大文檔幾千頁、幾萬字體引用下這個(gè)緩存在內(nèi)存上大概能省下90%的重復(fù)解析時(shí)間效果非常明顯。緩存時(shí)還要注意線程安全Pdfium本身對并發(fā)渲染有保護(hù)但你自己的緩存數(shù)據(jù)結(jié)構(gòu)必須自己做加鎖或線程本地化否則高并發(fā)場景下哈希表的并發(fā)寫會直接崩。提示緩存寬度表時(shí)盡量把“寬度來源”也一起記錄下來。是來自PDF的W數(shù)組還是來自字體文件內(nèi)部的hmtx表這個(gè)信息在排查寬度不一致問題時(shí)價(jià)值極高。4. 寬度數(shù)據(jù)對不上的三類真實(shí)案例4.1 案例一Type3字體的FontMatrix忘乘了先講一個(gè)特征最明顯的案例。某文檔中有一段裝飾字體Type3重排時(shí)字符間距被放大了大約8倍越往后錯(cuò)位越嚴(yán)重。檢查單字符寬度是正常的千分單位數(shù)值檢查字號也取到了正確值但重排結(jié)果就是不對。后來翻到字體對象內(nèi)部的FontMatrix才明白Type3字體的寬度單位不是固定的千分之一em而是由FontMatrix定義。這個(gè)字體的FontMatrix是[0.125 0 0 0.125 0 0]也就是說字體空間下的1個(gè)寬度單位在文本空間里只有0.125個(gè)單位。寬度接口返回的是字體空間值沒乘這個(gè)矩陣就直接用了等于把字形放大了8倍。處理方式很簡單拿到寬度后先查一下該字體是否為Type3是的話就把寬度乘FontMatrix的比例項(xiàng)。Pdfium渲染層內(nèi)部就是這個(gè)邏輯但公開接口并不會替你完成這步因?yàn)檎{(diào)用者可能想拿原始字體空間數(shù)據(jù)做別的分析。這個(gè)案例也提醒我處理任何字體數(shù)據(jù)前先確認(rèn)它的類型和度量矩陣而不是想當(dāng)然地用一套邏輯通吃。4.2 案例二CFF/OpenType字體的隱藏寬度表另一個(gè)項(xiàng)目里我用某個(gè)工具生成的PDF做處理文檔里的中文總是比預(yù)期窄窄了大約一半。Widths數(shù)組讀出來沒有異常但字體是OpenTypeCFF子集。排查過程比較曲折。先看W數(shù)組找到了范圍和數(shù)值本身都像合理。但是把每個(gè)字符的邊界框用GetCharBox打出來對比發(fā)現(xiàn)實(shí)際渲染寬度比W數(shù)組給的寬度小很多。也就是說W數(shù)組里的數(shù)字和渲染引擎實(shí)際使用的數(shù)字不一致。繼續(xù)追發(fā)現(xiàn)根源在字體文件內(nèi)部那個(gè)生成工具在子集化時(shí)把CFF字體內(nèi)部的實(shí)際寬度度量改了但PDF的W數(shù)組沒有同步更新。Pdfium在解析CIDFont時(shí)做了一步“嘗試用字體文件內(nèi)部度量校正寬度”的邏輯——如果字體內(nèi)部有可用的寬度數(shù)據(jù)就會覆蓋W數(shù)組里的值。這一步在不同版本里行為不一致有的版本完全不看字體內(nèi)部數(shù)據(jù)有的版本只要檢測到就使用。這個(gè)案例給我的教訓(xùn)是不要假設(shè)“Pdfium返回的寬度一定來自PDF的寬度數(shù)組”。它有自己的一套優(yōu)先級而且這套優(yōu)先級在不同版本、不同字體格式下并不統(tǒng)一。調(diào)試時(shí)如果發(fā)現(xiàn)返回值和字典里的W不一致別急著懷疑自己的讀取代碼先確認(rèn)是不是字體內(nèi)部寬度表在覆蓋。4.3 案例三子集化后PDF寬度表與字體內(nèi)部不一致和案例二類似但更隱蔽的情況出現(xiàn)在TrueType子集字體上。字體字典里的Widths數(shù)組只覆蓋了被保留的字符子集沒有覆蓋的空洞字符應(yīng)該走默認(rèn)寬度但Pdfium在某些場景下會返回字體內(nèi)部hmtx表中的值即使該字符沒有被子集化進(jìn)來。這會導(dǎo)致一個(gè)奇怪的現(xiàn)象同一個(gè)CharCode在頁面A和頁面B上出現(xiàn)字體句柄不同頁面A用的子集包含該字符頁面B用的子集不包含Pdfium給寬度卻是同一個(gè)數(shù)字——因?yàn)樽煮w對象內(nèi)部從hmtx里能查到但PDF寬度表里查不到。如果自己的代碼完全按“PDF寬度數(shù)組”做緩存就會出現(xiàn)部分頁面錯(cuò)位。我的處理是把“字體對象實(shí)際能提供的寬度來源”也作為一個(gè)維度記錄下來而不是只記錄寬度值本身。這樣重排時(shí)至少知道哪些寬度是可靠數(shù)據(jù)、哪些是解析器兜底必要的時(shí)候允許業(yè)務(wù)層做降級處理。5. 把寬度數(shù)組用好重排、對齊與性能優(yōu)化5.1 用累計(jì)寬度實(shí)現(xiàn)文本重排做PDF文本重排時(shí)最樸素也最實(shí)用的做法是把原頁面里每個(gè)文本對象解析出來按閱讀順序做累計(jì)寬度求和。偽代碼邏輯如下// 把一行里的字符按原有順序排列用寬度數(shù)組累加出每個(gè)字符的起始X double xCursor lineStartX; for (int i 0; i lineChars.size(); i) { lineChars[i].newX xCursor; double w getWidthForChar(lineChars[i].cid, font); // 如果是Type3記得乘FontMatrix // 如果是垂直文本這里用的是Y方向但原理相同 xCursor w * fontSize * scale; }這個(gè)邏輯對所有字體通用前提是你已經(jīng)拿到了正確的寬度。要注意的是行內(nèi)可能會出現(xiàn)多個(gè)文本對象比如一個(gè)字一個(gè)Tj中間還夾雜著TJ數(shù)組中的偏移量。如果只按“每個(gè)文本對象的第一個(gè)字符對齊”行內(nèi)字符就會錯(cuò)位。我通常的做法是先按文本對象在頁面上的坐標(biāo)排序再在每個(gè)文本對象內(nèi)部用它的起始坐標(biāo)加上累計(jì)寬度去計(jì)算每個(gè)字符的絕對位置。這樣即使原PDF把一句話拆成幾十個(gè)Tj重排后也能拼回完整的一句話。5.2 TJ數(shù)組里的偏移量與精確對齊寬度數(shù)組只解決“默認(rèn)推進(jìn)”但PDF內(nèi)容流里真正的排版還包含TJ運(yùn)算符中的數(shù)字偏移??聪旅孢@段內(nèi)容流BT /F1 12 Tf 72 720 Td [(H) 20 (e) -10 (l) 0 (l) 0 (o)] TJ ET這里的20、-10、0都是額外的字間距調(diào)整。H之后的光標(biāo)推進(jìn)等于H的寬度加上20e之后的光標(biāo)推進(jìn)等于e的寬度減10。如果只拿寬度數(shù)組累積完全忽略這些偏移最終重排出的文本會和原文的視覺密度差很多。很多初學(xué)者以為字符坐標(biāo)直接拿邊界框就完事了但在做“重排”這種需要重新生成布局的場景里TJ偏移恰恰是還原原作者排版意圖最關(guān)鍵的信息。Pdfium在解析內(nèi)容流時(shí)會把Tj和TJ統(tǒng)一轉(zhuǎn)成帶偏移的字符對象序列內(nèi)部是可以拿到每個(gè)字符偏移量的但公開接口暴露得不完整。如果項(xiàng)目要求重排結(jié)果與原版“視覺上一致”就得考慮在文本對象解析層自己讀TJ數(shù)組把偏移量合并進(jìn)寬度計(jì)算。5.3 減少API調(diào)用次數(shù)與線程安全最后說一點(diǎn)性能上的實(shí)操經(jīng)驗(yàn)。寬度數(shù)組看似是小事但在大文檔場景下會變成性能瓶頸。我做過一次壓測某文檔包含約22萬字符如果用逐字形接口查寬度總耗時(shí)在單線程下接近4秒如果先批量拉取寬度數(shù)組再在本地做映射耗時(shí)可以壓到0.3秒以內(nèi)差距在13倍左右。具體優(yōu)化手段有三個(gè)。第一按字體聚合先把頁面所有文本對象按字體分組同一字體的寬度表只拉一次。第二拿到寬度表后不直接跨接口查找而是把字體內(nèi)部的CharCode/CID到寬度的映射攤平到本地容器里用O(1)查找。第三利用好Pdfium的自帶緩存同一字體對象在多次查詢時(shí)內(nèi)部其實(shí)有緩存但那是它自己的緩存不等于你的業(yè)務(wù)代碼緩存該自己建的映射還是要建。線程安全方面Pdfium從不同頁面拿到的字體句柄在并發(fā)渲染時(shí)是受保護(hù)的但如果你把字體句柄保存下來、在多個(gè)線程里同時(shí)查詢就可能踩到未定義行為。穩(wěn)妥的方案是在單線程環(huán)境下把需要的寬度表全部提取并拷貝成自己的結(jié)構(gòu)之后并發(fā)重排階段只用自己的數(shù)據(jù)不再碰Pdfium對象。最后再分享一個(gè)我養(yǎng)成的習(xí)慣接到PDF處理任務(wù)時(shí)先寫一個(gè)十幾行的小工具把文檔里出現(xiàn)過的所有字體、字符編碼、寬度數(shù)組和實(shí)際渲染寬度拉出來打印一份對照表。有了這張表后面所有關(guān)于重排、對齊、標(biāo)注的坑都能快速定位到是字體解析層還是業(yè)務(wù)層的問題。寬度數(shù)組看著只是PDF解析里一個(gè)不起眼的角落但它串起了字體、排版、坐標(biāo)系統(tǒng)、單位換算、緩存乃至并發(fā)安全把這塊啃下來比臨時(shí)查一百次文檔都有用。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日韩欧美经典在线观看| 看日韩美女二区三区免费操逼视频 | 香蕉视频精品亚洲一区二区三区在线播| 免费成人自拍视频在线| 五月丁香婷婷综合| 色网亚洲人| 免费的黄片有限公司| 五月天婷婷久久| 日本Xx性爱| 国产9 9在线 | 亚洲| 亚洲图片另类| 狠狠操一区二区| 一区二区三| 婷婷中文网| 亚洲色91C| 久久精品店| 九九碰九九爱97| 天天日美女的B| 蜜臀一区二区三区在线| 久久久专区| 亚洲毛片基地专区| www.四虎在线| 国产一区二区在线播放| 久久a久久| 国产精品精品系列在线观看| 一本色道久久综合亚洲二区三区| 手机在线视频国内精品| 91黑丝美女| 国产亚洲色停停久久99精品91| 久久婷婷五月天| 国产精品白丝| 丰满搜索结果 -第18页- 久久高清无码 | 四虎永久在线精品免费网址| 99re在线精品78| 亚洲免费在线探花| 久久精品国产97欧美精品亚洲| 国产精品免费视频人成| 国产精品久久泡妞网站| 国产性刺激| 亚洲人成网站7777| 日本91白丝| 夜夜欢天天干| 久久久久久久久久久久久久久久9| 精品中文字幕一区二区| 九九九只有精品| 人妻少妇一区二区| 亚洲无码偷拍| 情色大香蕉| 人妻少妇色综合| 97在线视频免费看| 美女上床网站| 白丝在线一区| 国产 三级自拍| 久久精品国产亚洲粉嫩| 日韩AV电影网站| 国语对白露脸XXXXXX| 亚洲情色1区| 亚洲小电影免费涩涩成人在线高清| 看看小穴| 日韩欧美一级特黄大片| 91欧美经典| 大香蕉手机视频| 天美传媒婬乱| 日韩精品三级片长长久久| 免费精品国偷自产在线在线| 久湿久久| 97色插| 欧美日产国产在线成人第一区| 久艹99| 九九AV| 人人干人人操人人爱| 大香蕉一人在线| 女人 A一级| 青青青在线高清视频在线一二三四区| 国产丰满熟夫69mpp| 免费簧片在线观看| 国产v亚洲v日韩v欧美v片另类| 97天天综合网| 五月婷婷六月丁香| 天天看天天在线精品| 超碰九九| 欧美日韩国产电影| 国产在线不卡导航| 亚洲激情久久| 国产欧美岛国精品一区| 中文AV制服乱伦| 热热色色综合| 激情综合av| 免费一级视频特黄色大片| 亚洲精品国产精品成人| 色老大| 黄色不卡视频| 六月天婷婷| 午夜电影在线观看无码专区| 性爱视频啪啪啪啪| 在线观看亚洲成人精品| 91丝袜在线观看| 亚洲日精品| 欲射影视| 九九亚洲精品| 天天影视射综合网| 中文字幕片| 日韩人妻少妇 一区二区三区| 亚洲成人在线高清| 少妇高潮流水av免费| 国产精品一区在线播放| 97天天爽| 超碰日本97美女人妻人人玩人人爱| 黄色网址在线免费观看| 男人的天堂午夜av| 东京热视频网| 岛国1区2区3区在线观看| 色网色网色网色网色网色| 婷婷丁香人妻| 男女国产精品| 在线视频 亚洲精品| 9999亚洲精品| 乱色老一区二区三区的观看方式| 韩日精品福利视频一区不卡在线免| 内射中出日韩在线观看视频| 亚洲色天| 青娱乐91| 韩国一级做a久久久久| 就去色综合| 五十路一区无码| 人妻久久| 亚洲女人91| 超碰1997| 美女诱惑在线一区| 中文字幕欧美日本乱码一线二线| 久肏视频字幕| 久久国产成人精品国产成人亚洲 | 色在线69堂| 呦女网站| 公司1区2区3区精产精| 人妻人久久精品中文字幕| 激情五月天校园春色网| 免费精品AB| 亚洲小说视频| 国产精品亚洲无码| 国产精品嫩草影院午夜两性| 日韩性爱视频在线免费观看 | 精品区国产区一区二区三区| 亚拍在线| 青青草综合在线| 亚洲se91| gogogo免费高清看中国国语| 在线观看黄色电话| 色婷婷狠狠18禁| 成年女人一区| 欧美性天天影院| 天天日骚逼熟女| 亚洲熟女人妻中文字幕一区二区 | 思思热影视| 91成人久久| 黑丝少妇在线观看| 啊啊啊好爽快点啊啊啊嗯嗯| 日本有码久久| 97超碰色屌| 中文字幕av一区二区三区人妻少妇 | 97露脸精品丝袜| 97福利视频| 又大又黄国产| 国产青一二三| 日本道人妻久久久在线不卡色视频| 国产激情在线| 国产高清午夜成人在线观看| 欧美日韩国产另类综合| 婷婷五月色| 330dv亚洲成年视频网| 人妻喷水| 亚洲国产91精品一区二区久久| av毛片aaaaa免费看| 人妻乱仑一区二区三区| 蜜桃色色网站视频三区| 中文欧丝袜诱惑| 亚洲天堂一区| 久久久久13| 超碰免费欧美7| 久久久久久久久一区二区三区| 亚欧免费观看视频| 99综合免费视频| 深夜啪啪啪视频免费| 欧美一区二区在线资源| 欧美亚洲特P| 久久亚州精品成人Av无| 亚洲另类综合欧美| 日本幼女18+| 丰满人妻一区二区三区四区| 久久久久久久久久久人妻| 欧亚成人在线视频| 精品久久久久久久| 91在线无码精品秘 软件| 艳美熟妇先锋一二三区| 亚洲中文sv| 日韩av电影成人在线| 亚洲色吧网| 四虎精品亚洲| 亚洲精品一区中文字幕乱码| 日韩无码第3页| 免费A V在线播放| 一区二区三区日韩欧美| 搡老熟女免费视频| 韩国女主播青草福利视频| 99蜜月精品久久| 久久久久国产精品久久久| 亚洲夜夜欢无码一区二区| 热的中文 热的有码 热的国产| 欧美性夜| 黑人黄片在线免费观看| 亚洲综合九| 在线洲亚线| 99热这里都是精品| 中日韩欧美精品无码AⅤ一区二区| 成 人片 黄色大片| 成人无遮挡毛片免费看| 久九干| 青青操日韩| 久久精品美女一区| 爱爱动态120秒| 自拍欧美| 国产精品嫩草影院午夜两性| 亚欧中文字幕在线视频| 蜜臀中文字幕| 欧美亚性天堂| 日韩激情毛片一级久久久| 国产精品色哟哟| 久久久精品中文字幕爱豆| 成人天天看站长推荐| 国产精品4p在线观看| 蜜奶av| 日本国产亚洲一区在线观看| 亚洲精品天天影视综合网| 丁香色狠狠色综合久久小说| 欧美日韩性爱无码| 日影院久久婷婷夜夜网| 爱爱动态试试看6 0秒| 伊人国产成人av网站| 九九九网页| 日韩一区二区精彩视频| 色好看av| 人妻中文字幕日韩电影| 亚洲综合色图欧美| 九九九网页| 午夜乱轮操逼视频免费看| 欧美老妇女内射网址| 国产精品爽爽va在线观看98| 人人操人人摸超碰| 亚洲男人的天堂V| 约操熟妇| 久久精品操| 九月丁香综合网| 啊啊啊啊,啊啊好多水| 大香蕉碰碰| 在线有码中文字幕| 色噜噜人妻av中文字幕| 96AV精品| 国产强奸超碰AV| 精品九九九| 免费亚洲国产精品久久一区| 欧美极品女人的天堂| 日日噜噜夜夜狠狠视频无| 免费农村成人少妇人妻Aa一区二区视频| 亚洲国产奇米影视久久| 九九九九九九九九九国产精品| 国产有码一区| 亚洲最新中文字幕免费| 日韩三级伦理中文字幕| 欧美线天码中字| 午夜电影在线观看无码专区| 国产视频第二页| 超碰1997| 97资源制服丝袜| 中文字幕交换人妻| 97这里只有精品| 新精精品久久精品| 偷窥自拍亚洲色图| 亚洲五月丁香花狠狠干一区二区三区 | www久久久| 99色网| 九九九久| 校园春色亚洲欧洲| 67914亚洲精品| 国产三级中文有码在线视频| 18禁在线视频| 99夜夜操| 九久精品| 四虎影视国产精品| 啊嗯好大视频在线观看| 国产成人+综合亚洲+天堂| 一类无码操逼视频| 中字幕人妻一区二区三区| 91精品人妻| 亚洲 另类 丝袜 自拍 动漫| 国产日韩欧美亚洲精品95| 99少妇| 欧美骚少妇| 日本一久是| 天天射网| 久久久久久久久久久人妻| 国产高清精品福利| 一级@啪啪视频| 亚洲国产福利视频| 色网亚洲人| 欧美一区二区三区成人性生活| 亚洲影视综合网| 九九热AV| 欧美99热| 久久久无码国精品无码三区三区| 亚洲精品 大香蕉| AV九九| 2024人人操人人摸| 在线A日本| 国产精品农村妇女| 日韩欧美加勒比| 久热热| 高潮综合网| 白丝被操91| 欧美色青| www.99色| 亚洲人妻在线一区| 无码免费精品高清| 综合伊人网12色| 日韩欧美亚洲自拍偷拍| 天天日天天搞天天干| 中文字幕天堂在线| 激情无码日韩| 亚洲AV无码国产精品久久久久| 国产三级多多影院2022国产AA一级毛片无码| 人妻第一页| 亚州九九九精品视频| 青青草好吊| 易易A毛视频| 日韩欧美中文字亚洲慕| 91人妻在线视频| 欧美真人抽搐一进一出gif| 国产亚洲精品美女久久久| 一类av片在线看| 日韩精品永久在线观看| 2020中文字幕| 久久超碰大香蕉| 色综合1991| 欧美天天综合在线| 成人五月天丁香激情综合| 国产精品久久久久久亚洲色欲| 一个国产在线综合网站| 日本免费一级AAA大片器 | 操逼视频亚洲| 亚洲丝袜二区| 日本大香蕉| 亚州久久9| 9 1果冻精品视频| 久久六六| 一区二区三区激情在线观看| 91婷婷| 日欧毛片久久| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 99超碰色| 狠狠爱AV| 欧美人与动性人交a| 国产亚州精品美女久久久免费| 日产狠狠干| 日本免费不卡二区| 欧美96交| 99精品视频在线观看免费| 五月天偷拍| 99久在线精品99re8热视频在线| 久久久精品视频欧州站| 日韩av无码网站| 91黑人无码激情在线| 伊人大香蕉在线| 国产后入式在线观看| 91肉片| 亚洲AV成人无码一区二区三区在线观看 | 性色高清在线| 老熟妇91| 爱av免费| 很很很很操| 国产强奸AV在线| www.婷婷六月天| SUV一区二区在线看| dy888午夜老子影视达达兔| 精品免费视频国产一区| 人妻天堂综合网| 久久久久96| 国产欧美日韩一区二区三区| 免费农村成人少妇人妻Aa一区二区视频| 夜夜嗨TV| 欧美午夜一区二区三区| 97丝袜亚洲在线播放| 加勒比综合在线| 手机在线人成免费视频| 国产地址二三| 成人av影院在线观看| 五月天伊人| 爱爱啊啊啊| 一区二区三区蜜桃成人撸久久东京热 | 精品人妻15区| 国产天天看| 夫妻AV网站| 在线观看色视频| 91网18| 野狼福利社区| 一本久道久久综合狠狠爱| 夜夜精品视频一区二区| 超碰91在线| 美女干逼2| 激情五月天插| 97精品97久久| 亚洲欧美日韩夜夜| 久久丝袜| 久久黄黄| 超碰在线人妻中文字幕| 久久超碰久| 久久国产成人精品国产成人亚洲| 亚洲最大的综合性av| 伊人精品视频| 嫖老熟女A片一二三区| 97久久精品不卡| 思思热在线cao| 熟妇高潮二区三区| 夜夜影视四色| 少妇高潮一区二区三区在线| 日va操| 日日碰视频网| 欧洲一级性爱视频在线观看| 久久精品国产97欧美精品亚洲| 色情五月丁香| AV在线播放网址| 99婷婷| 搡老熟女免费视频| 91无摭挡| 久热这里| 另类小说综合网| 9 1超碰九色| 五月天激情国产综合婷婷婷| 免费精品无码一级毛片牛牛影视 | 日韩无码三级影院| 爽爽爽免费视频| 高潮的A片激情扒开一区| 99热精品青草在线| 人妻乱仑一区二区三区| 哑洲在线| 97干日韩| 黄色av网站在线播放| 十八禁电影伊人网| 91亚州日韩高清| 成人av影院在线观看| 欧美激情精品久久久| 手机看片1025| 国产最火爆久久国产网站网站| 午夜综合在线| 9l视频自拍9l九色成人| 中文日本免费高清| 密臀在线免费观看| 成人精品在线观看| 日韩 欧美 视频 在线 一区| 九九热三级片| 欧美中字不卡| 精品国产72| 温婉少妇玩3p| 91观看 国产白丝| 亚洲综合另类欧美久久久| 国产综合网站在线播放 | 超碰79人人乐| a片在线播放| 91在线观看,天天综合| 人人妻人人色| 自慰白浆在线观看| 日韩中文字幕国产| AAAA级日本片免费视频| 综合五月天| 亚欧美综合网。| 天堂av2019| 色婷婷成人| 日本色色色视频| 操操操五月天婷婷丁香影院| 99re超碰| 无马一区二区| daxiangjiao你懂的| 亚洲高清内射| 丰满少妇一区二区三区四区观看| 久久五月丁香| 操B久久| 国产精品美女久久久久久网站| 绑缚麻绳人妻寝取完整版| 天堂九九九九九九九九九| 国产粉嫩出水在线播放| 日人妻视频91| 天天综合网日韩7799| 亚洲精品九九九| 超碰久超碰久| 葡萄牙性视频一二区| 熟妇人妻一二三区免费| 九九九久| 欧美草草高清日韩视频| 国产精品一区在线播放| 久射吧| 九九超碰综合网| 岛国不卡超碰护士AV在线播放| 亚洲色人妻综合| 欧美成人午夜免费福利785| 秋霞免费AV| 亚洲 欧美 制服 另类 自拍| 亚洲国产尤物yw在线观看| 热无码中文亚洲H一道本一区二区| 成人九九| 久久九色| 久久超碰国产一区二区三区| 9丨久久九九九| 热热色中文无码| 热99这里有精品综合久久 | 日韩欧美国产高清视频| 99热网站| 成 人 影视 一区 二区 三区 四区| 天美国产三级传媒| 99国产在线绯色一区| 男人的天堂.com| 人人妻人人色| 性欧美体内射精| 伦在线97| 无套后入双马尾| 国产99999| 99久久亚洲精品无码毛片潘甜甜| 一类无码操逼视频| 欧美视频在线视频免费va| 夜夜嗨一区二区| 黄色成品网站| 成人热久久精品| 97日视频| 91成人社区| 久久久涩| 999久久久免费精品国产牛牛| 国产一区在线观看无码AV| 丝袜熟女一区二区三区| 日韩成人精品中文字幕| 青青草大香蕉在线视频| 欧美91网| 欧美18 在线观看| 色综合久久88色综合久久天天| 婷色五月天| www.99热在线只有精品| 精品人妻高清麻豆av| 2021国产成人精品久久| 国产一级作爱毛片| 久久综合乱子伦国产免费| 999熟女精品| 亚洲开心网| 草b在线| 97色五月天完| 美国三级日本三级久久99| 中文字幕激情小说| 少妇激情一区二区三区视频| 国产精品一区二区久久精品| 亚洲国产激情国产av| 江都AV在线| 超碰导航97| 欧洲欧美视频一区二区| A片三级无码| 欲射影视| av网站在线看| 亚洲 综合 欧美| 99蜜月精品久久| 自拍偷拍 日韩欧美| 日日夜夜天天| 日日日日做夜夜夜夜做无码97| 密乳视频在线| 日韩在线一区高清在线| 性欧美另类高清| 天天影视综合色| 日本不卡在线二区三区| 日本一级性爱| 一级黄碟在线观看| 操东北女人| 日韩激情小说一区二区| 内射黑人| 国产午夜在线观看| 97超碰碰碰| 日韩久射综合| 色婷视频| 精品国产乱码久久久影院| 色婷婷激一区二区三区 | 日天天九九天堂666| 欧美亚洲另类在线蜜桃| surenchaopeng| 日本成人免费一区二区三区| 国产自产91区13区| 国产亚洲色婷婷久久99精品91 - 百度| 97国产成人精品免费视频| 亚洲一区亚洲天堂| 日日骚中文字幕| 日韩噜噜69| 天天上日日上日韩精品| 97干在线| 天天天干977| 国产精品秘 福利姬在线观看| 国产午夜激片Av毛片不卡| 人人操人人爽人人操人人| 中文字幕加勒比海高清无码免费视频| 亚洲欧美色图片| 国产精品视频电影| 岛国片在线播放| 久久国99999| 无码人妻丰满热妇又大又粗| 色综合1991| 婷婷色网| 一区二区三| 欧美综合色站| 天天精品| 91n欧美| 日日夜夜国产综合| 奇米四色影视777久久久| 天天干人妻| a在线视频免费观看| 大色网久久| 丁香五月影院| 91精品国产91综合久久蜜臀| 啊啊啊啊啊在线视频| 不卡一区二区日本视频| 91日韩网站| 女一区二区| 国产欧美日韩一区二区三区| 欧美后入式| 一牛影视久久久一区二区三区| 国产JDAV无码视频在线观看| 久久精品六区| 日韩中字av一区| 欧美一级黄片视频在线| 国产精品久久久久久久久久久久久久吹 | 亚洲综合色在线| 99ri视频| 亚洲欧美综合区自拍另类 | 啊啊啊啊啊啊好湿好爽视频| 久久精视频美日韩在线视频| 欧美人黑A片无码免视费| 狠操91,com| 黄污污污污| AV污污污污| 97欧美| 天天热精品| 九九精品美女高溯喷水| AV九九| 亚洲无码成人精品| 深夜视频| 白嫩妹子国产骚| 美腿色图| 麻豆国产尤物AV| 亚洲成aⅴ人片不卡无码| av橘色网站| 久久久久亚洲一区女同性恋中文字幕| 欧美日本国产日韩激情视频| 在线观看中文字幕| 日比av无码| 91少妇通奸网站| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 91丝袜在线播放| 性欧美精| 精品无码久久久久| 在现视频女上位好爽| 五月天婷婷久久| 国产精品极品美女视频| 亚洲天堂久久久久久粉红视频| 欧美性第1页| 亚洲欧美国产va在线| av麻豆啪啪| 少妇免费视频| 亚洲熟妇图片| 日韩成人精品中文字幕| 日本高清_区二区三区| ji熟女.com| 中文操逼字幕| 九九九九热| 91网站18禁| 欧美专区17页| 精品国产乱码久久久久久日本公司| 久草婷婷| 无码男人天堂| 激情四射五月天| 天天躁狠狠躁av| 欧美一区二区传媒| 超碰97玖玖爱| 99国产精品免费| 成人女人国产| 久久久∴| 国产后入内射| 亚欧操逼片在线观看| 日韩不卡网操逼中文字幕日韩| 亚洲一区二区 麻豆传媒| 97香蕉人人乳| 嗯嗯啊啊好疼| 久久日本熟女精品一区| 级品肉射| 亚洲风情综合网| 亚洲se电影| 久久久555| 超碰久超碰久| 国产乱子伦一区二区三区在线观看| 熟妇熟女一区二区三区| 97精| AV一区观看| 一起草欧美| 在线观看日韩av不卡| 青青草在线视频人人想人人上| 久久双插| 国产精品久久久视频| 五月综合激情网| 欧美在线视频99| 丁香久久| 超碰 另类 欧美 | 欧美 亚洲 制服 精品| 天天综合日韩网| 99热导航| 污电影在线观看| 97一区二区三区视频| 日韩欧美~中文字| 青草一区二区| 亚洲欧洲自拍图片专区满春格| 9丨亚洲一区二区在线| 韩国午夜理伦三级好看| 717影院理论午夜伦八戒| 91精品电影18| 2017大香蕉国产精品久久| 欧美中字不卡| 探花精品 一区二区| 中文AV制服乱伦| 色青青久久影视| 蜜桃成人1区2区3区| 久久骚少妇| 97se亚洲| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 色天天野狼综合社区| 蜜臀中文字幕| 秋霞欧美性爰视频| 97视频在线免费看| 欧美三四五区| 亚洲欧美日韩制服另类| 亚洲福利中文字幕在线| 精品.99999| 97精品一区二区视频在线观看| 91色图| 国产成人精品网站| 丰满人妻无码一区二区三区| www色色com| 亚洲天堂区| 日日骚精品视频| 成人性交免费视频| av在线不卡一区二区三区| 亚殴在线| 欧美一二级| 国产日韩欧美操逼视频| 婷婷五月综合在线| 美女让帅哥通她小鸡鸡| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 日韩一区二区三区四区五区| 精品久久在线区一区| 91大香蕉伊人| 亚洲一曲日韩精品| 91中文精品日韩欧美在线| 九九九久久久W精品| 精品久久久av无码免费| 9+1视频网址| 亚洲日韩欧美一区二区| 日本三级A片网站com| 色色99| 精品丰满熟妇人妻一区| 影音先锋日本一区二区| 亚洲国产精品久久久久婷婷青年| 欧美,日韩,中文,另类| 无码黑人精品一区二区三区三| 99丝袜福利在线播放| 狼人狠干| 三级三久久线久久99久目本WW| 欧美 亚洲 综合 制服 另类| www.色吧5.com| 日本九九久久99播| 香蕉视频精品亚洲一区二区三区在线播| 在线观看黄色电话| 亚洲精品蜜桃久久久久久久| 国产日韩精品suv| 91在线美女| 色欧美综合| 懂色AV一区二区三区| 国产97av| 精品女人999| 九九热国产| 在线观看一卡二卡| 97天天| 麻豆精品久久久久久久| 超碰97国产欧美| 亚 欧 美 综合| 国产精品乱码久久久久| 混色激情av| 91视频综合网| 亚洲天堂自拍| 亚洲另类小说卡通动漫| 麻豆精品三区视频| 欧美日韩香蕉| 大茄子熟女AV导航| 97五月天| 亚洲天堂五月天国产| 九九热超碰97亚洲最新香蕉| 国产特级毛片AAAAAA高潮流水 | 中文字幕精品人妻丝袜| 色综合一本| 传媒免费一区二区三区| 欧美日本中字另类在线| 丝袜美腿91| 欧美激情综合色综合啪啪五月| 久久九色| 91伊人大香蕉| 99久久精品国产高潮| 亚洲,欧美,综合网| 欧洲无码一区二区| 三级日本一区二区三区| 91精品久久久久久77777| 欧亚性爱视频免费看| 国产精品96久久久久久| 色 婷97| 日韩国产乱子伦App| 插插综合网天天影视网| 亚州成人A√| 91社操逼| 天天综合网网欲色| 人妻人人澡人人爽人人| 欧美成人性爱视频大全| 啊啊啊啊啊啊好多水| 久久超碰98| 色欲久久综合| 一区不卡在线观看av| 91男女| 国产精品欧美激在线| 午夜福利免费福利视频| 国产熟妇 码视频户外直播 | 99热啪啪| 日韩一级欧美一级国产一级台湾| 97精品中文字幕| 色婷婷综合网| 久操网线| 亚州综合在线| 我想要啊 啊 啊| 神马福利久草| 六十路日本| 日本性爱视频一级| 0755午夜福利视频| 白丝少妇一区二区| 天天透伊人| 一本一道波多野毛片中文在线| 玖玖久久久| 天天干人妻| 久久精品免费| 日韩不卡毛片Av免费高清| 国产亚洲色停停久久99精品91| 亚洲 欧美 综合 91| 日本不卡三级网在线播放| 色乱二区| 日本一区视频在线观看| 人人妻人人爽| 99色在线| 美女干逼2| 精品国产91久久久久久一区黄无| 欧美成人午夜免费福利785| 免费中文综合精品| 亚洲图片小说欧洲| 一区e区三| 99精品丰满人妻无| 午夜精品一区二区三区三上悠亚| 国产精品青草综合久久| 国产免a费看黄片在线| 大香蕉乱级| 亚洲天天更新| 熟女熟妇一区二区三四区| 欧美国产操逼| 男人的天堂在线| 久久夜色一区二区| 日韩熟女精品无码专区一区二区| 99ri在线视频| 亚洲人妻av| 色噜噜精品一区二区三| 伊人网综合在线视频| 国产亚洲精品无码三区| 超碰色男人操熟女| 欧美v日韩v亚洲v最新在线| 精品欧美乱码久| 国产路线专区| 97超级久久| 91情色在线| 综合亚洲欧美| 伊人骚琪琪亚洲天堂网站| 人人澡人人澡人人| 久久婷婷苹果| 插插综合网天天影视网| 亚洲情色 自拍| 999色欧美中文字幕| 另类欧美综合| 中文字幕欧美精品亚洲日韩蜜臀| 欧美草草高清日韩视频| 久草毛片| 大香蕉2017| 中文三一区| 午夜美女诱惑电源网| 色妇91| 97热视频在线观看| 中出20p| 丝袜美腿91| 丰满人妻一区二区三区色-百度| 91宗合网| 国产精品内射婷婷一级二| 欧美宗合网| 精品国产乱码久久久久久网站入口| 97免费视频在线| 亚洲加勒比| 国产精品久久久久久久电影渣男| 激情天天视频| 综合操逼| 亚洲色欲天天人妻无码系列专区| 激情五月天色播| 在现视频女上位好爽| 天天日天天操VV| 中文字幕av一区二区三区人妻少妇 | 91精品黄在线观看| 中文字幕二区日韩天堂| 国内三级自拍小视频在线观看 | 青青伊人这里只有精品| 日本一级二级三级网站| 嗯啊不要啊在线 | 艹我哪美一区无码| 欧美在线啊啊啊| 天天操天天日天天干| 美欧色综合| 欧美特大AA级黄片| 中文久久爆乳| 欧美1727免费观看视频| 国产精品久久久久久久久久久久久久久 | 午夜a成v人电影| 日韩性爱啪啪视频| 综合欧美日韩在线观看| 欧州色图区| 欧美78| 一起草视频在线| 婷婷av在线中文字幕| 欧美国产日韩高清在线| 97爱免费插| 91国产伊人大香蕉| 亚洲黄片免费在线播放| 蜜乳AV网址| 打av高清| 偷拍亚洲视频一区二区三区四区| 99精品国产户外露出| 国产成人手机视频激情| 澳门成人网站久国产日韩| 91快色色色色色| 国产亚洲日韩欧| 92人人操人人| 综合久欧洲| 91亚洲综合在线| 人人操人人插人www| 欧美九九爱| 亚洲欧美综合网站| 97色97干| 欧美日韩一区二区三区四区蜜桃| 欧美天天拍| 欧美成人国产精品| 国产中文字幕在线点播| 色婷婷小说| 日韩有码回春沙龙第一页| 免费av在线播放二区| 国产激情久久久| 中文字幕免费看| 中文AV制服乱伦| 亚洲有薄码区日本系列中文字幕| 操少妞在线视频| 大香蕉www.超碰| 99re这里只有精品3| 日韩视频小说在线观看| 亚洲区 欧美区| 国产高清免费不卡av| 色综合加勒比四四季| 日夜精品| 中文字幕 人妻不满 在线视频| 欧美色色人| 久久久久亚洲?V片无码V| 成人综合网 欧美| 国产精品96| 久久久999日本大片| 97中文字幕一区| 91麻豆va国产精品| 久久最新视频免费观看| 91免费看一区二区三区| 大香蕉伊人色偷偷在线| 欧美图片校园春色| 免费A V在线| 97久久天天综合色天天综合色电影| 免费观看国产小粉嫩喷水精品午| 99xav| 日本道人妻久久久在线不卡色视频| 国产精品露脸在线观看| 九九九久久久久| 亚洲AV无码天美传媒一区| 熟女五十路一区二区三| 五月色网| 久草精品一区| 亚洲午夜福利在线影院| 青苹果影院男人的天堂| 色黄色美女大长腿午夜视频| 啪啪视频免费在线观看| 欧色网址| 97网址97| 蜜臀AV成人精品蜜臀| 蜜桃臀 后入 一区 二区 三区 在线| 久热九九| JIZZJIZZ国产精品喷水| 日韩99神马视频片| 天天看天天日| a人欧美综合天堂麻豆| 温婉少妇玩3p| 精人妻无码一区二区三区伊人直播| 98精品国产乱码久久久久久| www.亚洲黄色| 久久久久13| 日韩免费中文字幕视频| 丁香五月色| 禁十八久久| 2019精品国产无码成人| 91国产美女丝袜足交精品视频| 男女猛烈无遮掩视频免费软件| 青娱乐大香蕉| 国产成人精品日本视频| 久久精品国产97欧美精品亚洲 | 人妻少妇三级| 91小视频| 北野未奈加勒比av| 五月婷婷综合激情| 四虎国产精品永久在线囯在线| 九九热超碰97亚洲最新香蕉| 日韩av不卡在线看| 久久久999国产| 亚洲日产专区| 不卡av在线中文字幕| 男人的亚洲天堂| 亚洲少妇色| 国产绿奴视频在线观看| 久久久精品中文字幕麻豆| 欧美亚洲日韩人妻在线观看| 26uuu久久| 青娱乐手机日韩在线视频| 激情专区综合| 国产真实子伦对白| 999九九精品| 精品久久一区二区三区四区五区| 亚洲人妻爽爽爽| 区一二区日韩亚洲乱码av电影| 51一区二区三区| 男人成人黄色视频在线观看免费下载| 日韩一级成人毛片免费观看| 超碰99在线| 蜜屁Av| 伊人AAA| 久操com| 久久夜夜| 青青久久久| 午夜激情床戏激情| 18禁超污无遮挡无码免费网| 屁股久久久久久| 精品综合久久久久久97| 嗯嗯啊啊用力视频免费| 97欧美性爱| 岛国1区2区3区在线观看| 日韩欧美~中文字| 蜜臀久久99精品久久久久免费观| 久久露脸国产老熟女| 一个色导综合| 日韩久射综合| s片在线观看| 亚洲天堂 视频你懂的| 少妇高潮流水av免费| 美女91| 人妻少妇精品久久久| 中文字幕一区二区三区蜜臀| 九九综合色| 日韩av不卡在线看| 国产综合色精品在线观看| 久久久亚洲精品中文字幕人妻| 国产天天看| 天天弄欧美| 一区二区三区 丝袜 高跟 美腿| 成人三一级一片aaa| 国产午夜福利电影免费在线观看 | 蜜桃传媒一区二区亚洲| 殴美大黄片| 中文字幕一区二区日韩网| 精品九九九九九九| 人人搡人人肉久久精品| 日韩女模中文造逼| 蜜乳AV一区| 国产日产精品久久快鸭的功能介绍| 天天综合青苹果| 极品人妻少妇综合| 天堂精品一区| 性性欧美| 亚州综合AⅤ| 高跟伊人julia ann| 天天色悠悠激情| 蜜桃色色网站视频三区| 精品一区二区综合熟妇| 日韩性爱视频在线免费观看| 久久久久久99AV无码免费网站| 国产精品久久久久久久久久久久久久吹 | 九九色综合| 五月天久久综合网| 岛国片在线播放| 免费福利视频中文字幕| 日韩性爱一级片| 一级AV性爱| av强奸乱轮| 国产精品永久免费10000| 成人小电影网站tex| 欧美第二页午夜| 中文字日本乱码| 欧美色三级片91| 99热精品在线播放| 亚洲成a人在线观看久| jizz啪啪| 黄色香蕉视频网站一区| 97精品久久| 69一区二区| 美女诱惑一区| 2017天天插| 久操97| 国产毛片片精品天天看视频| 日韩av免费一级电影| 精品偷拍13p欧美dodk视频| 亚洲国产欧美另类自拍| 岛国黄色大片网站| 久久精彩免费视频| 天天插天天干| 九九热男人天堂| 干B| 美女黄色91| 欧美日韩亚洲天堂| 五月丁香六月综合缴清无码 | 麻豆伊人网| 日日操免费视频| 日韩人妻播放| 蜜乳av首页| 先锋精品av色鲁| 久久av色| 欧美专区17页| 亚洲人妻精品一区二区| AV麻豆免费一区| 秋霞蝌科网日本一区| 久久婷婷伊人| 不卡码视频| 欧美日本视频一区| 亚洲色图一区二区三区| 久久亚洲中文字幕视频| 日本人人操人人操| 97青青操视频| 麻豆国产第一| 美女网站91| 永久免费发布性爱网|