亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

Windows 下編譯 Poppler PDF 庫(kù):MSYS2 與 CMake/Meson 實(shí)戰(zhàn)指南

Windows 下編譯 Poppler PDF 庫(kù):MSYS2 與 CMake/Meson 實(shí)戰(zhàn)指南 最近在整理一套本地文檔處理工具鏈的時(shí)候需要在 Windows 10 客戶(hù)端里完成 PDF 的文本抽取、頁(yè)面渲染成圖片、元數(shù)據(jù)讀取這幾件事。調(diào)研一圈后發(fā)現(xiàn)能免費(fèi)商用的 PDF 庫(kù)本就不多Poppler 作為老牌開(kāi)源渲染庫(kù)幾乎沒(méi)有替代品但官方偏偏不維護(hù) Windows 的預(yù)編譯二進(jìn)制于是只能自己動(dòng)手編。網(wǎng)上關(guān)于 Poppler 編譯的教程大半是 Linux 環(huán)境的Windows 的要么年代久遠(yuǎn)要么語(yǔ)焉不詳我前后折騰了兩三天才把整套流程穩(wěn)定跑通。這篇文章把完整方案寫(xiě)出來(lái)包括環(huán)境搭建、依賴(lài)選型、CMake 和 Meson 兩套構(gòu)建系統(tǒng)的配置、高頻報(bào)錯(cuò)排查、以及編譯產(chǎn)物最后的集成驗(yàn)證。適合自己維護(hù) PDF 工具的開(kāi)發(fā)者、需要做 PDF 轉(zhuǎn)圖或文本抽取的工程師、以及想把 Poppler 接進(jìn) Qt 項(xiàng)目的同學(xué)。我不光貼命令每一步為什么這么做也會(huì)講清楚這樣你遇到我當(dāng)年踩過(guò)的坑時(shí)能更快繞過(guò)去。1. 編譯前先搞清楚你拿 Poppler 要做什么1.1 Poppler 到底是什么先亮底牌Poppler 是從老牌 PDF 查看器的基礎(chǔ)上派生出來(lái)的開(kāi)源渲染庫(kù)很多你叫得出名字的開(kāi)源文檔工具底層其實(shí)就是它。它提供的能力相當(dāng)完整PDF 頁(yè)面光柵化渲染、文本內(nèi)容抽取、文檔屬性和書(shū)簽讀取、表單填寫(xiě)、注釋解析、多份 PDF 合并拆分等等。在 Linux 生態(tài)里大部分發(fā)行版都內(nèi)置了預(yù)編譯的 poppler-utils 工具集也就是 pdftotext、pdfinfo、pdftoppm、pdftocairo 這一整套命令行工具常年是服務(wù)器端文檔處理管線(xiàn)的標(biāo)配。Windows 上的情況就完全不一樣了。官方只發(fā)布源碼基本不維護(hù) Windows 的預(yù)編譯包。你在網(wǎng)上能找到的一些所謂Windows 版 Poppler要么是第三方愛(ài)好者編譯的舊版本要么打包方式來(lái)路不明版本功能和依賴(lài)狀態(tài)都不可控。對(duì)于要進(jìn)生產(chǎn)環(huán)境的工具鏈來(lái)說(shuō)這種不確定性往往就是最大的風(fēng)險(xiǎn)點(diǎn)。所以自己編譯不只是為了有得用更是為了把依賴(lài)版本、功能開(kāi)關(guān)、鏈接方式這些變量全部握在自己手里。后面接進(jìn)自己項(xiàng)目的時(shí)候出任何問(wèn)題都能順著源碼和配置查到底。1.2 為什么非要自己編譯不直接用現(xiàn)成方案有人可能會(huì)問(wèn)Windows 上處理 PDF 不是有一堆現(xiàn)成庫(kù)嗎為什么偏偏要編譯 Poppler這里有幾個(gè)非常現(xiàn)實(shí)的原因。首先很多商業(yè) PDF 庫(kù)是按授權(quán)點(diǎn)收費(fèi)的哪怕只是內(nèi)部工具也得走采購(gòu)流程成本和合規(guī)都很麻煩。開(kāi)源項(xiàng)目里單純解析 PDF 內(nèi)容的庫(kù)不算少但要做到頁(yè)面渲染成高清圖片、帶抗鋸齒、支持復(fù)雜版式這種偏 GUI 的場(chǎng)景Poppler 幾乎是性?xún)r(jià)比最高的選擇。它內(nèi)置了輕量級(jí)的 Splash 渲染后端也可以接 Cairo 這種工業(yè)級(jí) 2D 繪圖庫(kù)靈活度比大多數(shù)同類(lèi)項(xiàng)目高一個(gè)量級(jí)。其次自己編譯意味著可以按需定制。我實(shí)際做項(xiàng)目時(shí)需要裁掉用不到的功能模塊來(lái)縮小體積也需要把 JPEG2000 支持、色彩管理、數(shù)字簽名這類(lèi)可選項(xiàng)明確打開(kāi)。這些在別人編譯好的二進(jìn)制里根本做不到。做二次開(kāi)發(fā)的同學(xué)還有個(gè)隱藏需求帶調(diào)試符號(hào)的版本。線(xiàn)上程序崩潰時(shí)能定位到庫(kù)內(nèi)部的行號(hào)和只能看到一堆地址是完全兩種調(diào)試體驗(yàn)。還有個(gè)很多人忽略的點(diǎn)預(yù)編譯二進(jìn)制的動(dòng)態(tài)鏈接依賴(lài)通常是一筆糊涂賬。Windows 下跑 Linux 風(fēng)格的開(kāi)源程序DLL 版本對(duì)不上是家常便飯。自己從源碼編譯至少能清楚它鏈了哪些庫(kù)、每個(gè)庫(kù)什么版本排障的時(shí)候能順著依賴(lài)圖一步步查。說(shuō)白了自己編譯的隱性收益是可控性這在把庫(kù)往正式系統(tǒng)里集成時(shí)比什么都重要。1.3 兩條主流編譯路線(xiàn)怎么選在 Windows 10 上編譯 Poppler業(yè)內(nèi)實(shí)踐下來(lái)主要有兩條路線(xiàn)一條是 MSYS2 加 MinGW-w64 工具鏈另一條是 Visual Studio 加 vcpkg 包管理。這兩條路線(xiàn)我都實(shí)際跑過(guò)最終長(zhǎng)期用的是 MSYS2 方案下面把取舍理由和對(duì)比情況攤開(kāi)說(shuō)。對(duì)比項(xiàng)MSYS2 MinGW-w64Visual Studio vcpkg依賴(lài)獲取pacman 一鍵安裝依賴(lài)天然兼容vcpkg 可裝但版本組合要自己調(diào)編譯速度較快依賴(lài)現(xiàn)成無(wú)需重復(fù)構(gòu)建首次要全量編依賴(lài)時(shí)間翻幾倍與 MSVC 工程集成C ABI 可直接用C 接口需適配原生無(wú)縫調(diào)試體驗(yàn)最好可復(fù)現(xiàn)性高腳本化容易中依賴(lài)庫(kù)版本易變總體工作量低中高M(jìn)SYS2 的核心優(yōu)勢(shì)是把一整套 POSIX 生態(tài)平移到了 Windows 上。Poppler 的大量依賴(lài)——fontconfig、glib、cairo 這些——骨子里是為 Linux 設(shè)計(jì)的在 MSYS2 里它們的 pkg-config 文件現(xiàn)成CMake 或 Meson 能自動(dòng)找到所有依賴(lài)幾乎不需要針對(duì) Windows 做特殊適配。vcpkg 路線(xiàn)不是說(shuō)走不通而是你要為每個(gè)依賴(lài)分別編譯不同配置工程量明顯更大而且個(gè)別庫(kù)在 vcpkg 上的版本滯后會(huì)導(dǎo)致新版 Poppler 編譯直接失敗。如果你后續(xù)必須用 Visual Studio 調(diào)試整個(gè) Windows 程序那選 vcpkg 更合理如果只是想把 Poppler 跑起來(lái)并集成進(jìn)自己項(xiàng)目MSYS2 是省時(shí)間的正解。2. 環(huán)境準(zhǔn)備MSYS2 和依賴(lài)包一次配齊2.1 安裝 MSYS2 和基礎(chǔ)工具鏈MSYS2 的安裝本身沒(méi)什么門(mén)檻從項(xiàng)目官網(wǎng)下載安裝包一路下一步即可。裝完之后你會(huì)在開(kāi)始菜單里看到好幾個(gè)入口 shell包括 MSYS2 MSYS、MSYS2 MinGW64、MSYS2 MinGW32。這里藏著一個(gè)新手最容易踩的坑編譯 Poppler 以及它的絕大多數(shù)依賴(lài)必須用 MinGW64 那個(gè) shell因?yàn)槲覀円傻氖窃?64 位 Windows 程序。簡(jiǎn)單解釋一下這個(gè)環(huán)境的角色分工MSYS 環(huán)境像一層翻譯層提供 Unix 風(fēng)格的命令和路徑但它產(chǎn)出的程序帶有 MSYS 運(yùn)行時(shí)依賴(lài)脫離 shell 后在純凈 Windows 上很難跑起來(lái)。而我們真正要的是 MinGW-w64 工具鏈生成的原生程序所以一切操作都以 MinGW64 shell 為準(zhǔn)。很多人第一次在這里犯迷糊以為在哪個(gè) shell 里裝 gcc 都一樣結(jié)果編出來(lái)的庫(kù)要么是 32 位要么帶了額外的運(yùn)行時(shí)依賴(lài)后患無(wú)窮。進(jìn)了 MinGW64 shell 之后先做一輪系統(tǒng)更新和基礎(chǔ)工具安裝pacman -Syu pacman -S --needed base-devel gitbase-devel 這個(gè)包組最容易被人跳過(guò)但它里面含有 make、autoconf、automake、pkg-config 這些輔助工具。Poppler 雖然主要靠 CMake 或 Meson 構(gòu)建但它的某些輔助腳本和依賴(lài)構(gòu)建過(guò)程仍會(huì)調(diào)用這些 POSIX 工具缺了它們會(huì)在莫名其妙的環(huán)節(jié)報(bào)錯(cuò)到時(shí)候排查起來(lái)很頭疼。2.2 依賴(lài)包怎么選每個(gè)是干什么的Poppler 的構(gòu)建依賴(lài)可以分成三類(lèi)核心渲染類(lèi)、字體處理類(lèi)、可選增強(qiáng)類(lèi)。用 pacman 一鍵安裝是最省事的方式我在實(shí)際編譯時(shí)用到了下面這組包# 編譯器和構(gòu)建系統(tǒng) pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja # 基礎(chǔ)依賴(lài) pacman -S mingw-w64-x86_64-pkgconf pacman -S mingw-w64-x86_64-freetype mingw-w64-x86_64-fontconfig pacman -S mingw-w64-x86_64-libpng mingw-w64-x86_64-libjpeg-turbo pacman -S mingw-w64-x86_64-lcms2 mingw-w64-x86_64-libtiff pacman -S mingw-w64-x86_64-openjpeg2 # GLib 和 Cairo按需開(kāi)啟 pacman -S mingw-w64-x86_64-glib2 mingw-w64-x86_64-cairo每個(gè)包的角色我簡(jiǎn)單交代一下方便你按實(shí)際場(chǎng)景裁剪。freetype 和 fontconfig 是字體處理的核心PDF 里幾乎所有字體渲染都繞不開(kāi) freetypefontconfig 負(fù)責(zé)字體發(fā)現(xiàn)與匹配它決定了渲染時(shí)能不能正確找到系統(tǒng)字體。libpng、libjpeg-turbo、libtiff 是圖像編解碼庫(kù)PDF 內(nèi)嵌的位圖資源全部走它們。lcms2 做色彩管理如果你要處理帶 ICC 色彩配置文件的 PDF這個(gè)必須開(kāi)否則色彩會(huì)偏。openjpeg2 負(fù)責(zé) JPEG2000 壓縮圖片的解碼醫(yī)療影像 PDF、高清掃描件 PDF 大量使用這種編碼缺了它頁(yè)面會(huì)顯示成空白塊或者亂碼區(qū)。GLib 和 Cairo 這兩個(gè)要單獨(dú)說(shuō)。GLib 是給 Poppler 的 GLib 風(fēng)格 C API 用的很多 C 語(yǔ)言項(xiàng)目通過(guò) poppler-glib 接口接入不裝的話(huà)得在配置階段關(guān)掉相應(yīng)選項(xiàng)。Cairo 是高級(jí)渲染后端pdftocairo 工具能把 PDF 頁(yè)面轉(zhuǎn)成 PNG、SVG、PS 等格式依賴(lài)的就是它。如果你只需要簡(jiǎn)單文本抽取這兩個(gè)確實(shí)可不開(kāi)但只要涉及把 PDF 頁(yè)面變成一張圖Cairo 和 GLib 就是標(biāo)配。裝完后順手驗(yàn)證一下依賴(lài)是否齊全pkg-config --modversion freetype2 fontconfig cairo glib-2.0 libopenjp2如果每個(gè)都輸出了版本號(hào)說(shuō)明依賴(lài)準(zhǔn)備完畢。缺誰(shuí)補(bǔ)誰(shuí)這一步值得花五分鐘確認(rèn)后面構(gòu)建系統(tǒng)配置階段能省大量排查時(shí)間。2.3 環(huán)境驗(yàn)證下手前先確認(rèn)三件事正式編譯之前我習(xí)慣做三個(gè)小檢查能避免大把無(wú)效勞動(dòng)。第一確認(rèn)當(dāng)前 shell 確實(shí)是對(duì)應(yīng)架構(gòu)的 MinGW64 環(huán)境。執(zhí)行echo $MINGW_PREFIX如果輸出是/mingw64就對(duì)了。如果輸出是/usr或者直接為空說(shuō)明你開(kāi)的是 MSYS shell得換窗口重來(lái)不然構(gòu)建系統(tǒng)大概率會(huì)找到一套奇怪的編譯器組合。第二確認(rèn) gcc 的架構(gòu)目標(biāo)。執(zhí)行g(shù)cc -dumpmachine輸出應(yīng)該帶x86_64-w64-mingw32字樣。有些機(jī)器之前裝過(guò)別的 GCCPATH 里殘留的編譯器會(huì)把構(gòu)建系統(tǒng)帶偏編譯到一半才爆出詭異的鏈接錯(cuò)誤這種問(wèn)題最隱蔽。提前三十秒確認(rèn)能省一小時(shí)。第三確認(rèn)cmake和ninja都來(lái)自 MSYS2。如果電腦上裝過(guò) Visual Studio系統(tǒng) PATH 里可能有另一套 CMake。在 shell 里執(zhí)行which cmake路徑應(yīng)該指向 MSYS2 的安裝目錄指向別處的話(huà)優(yōu)先把/mingw64/bin調(diào)到 PATH 最前面。提示MSYS2 環(huán)境里路徑有兩種寫(xiě)法Windows 風(fēng)格是C:/xxxMSYS 風(fēng)格是/c/xxx兩者都能用。但構(gòu)建系統(tǒng)傳給編譯器的路徑往往被轉(zhuǎn)成 Windows 風(fēng)格看到奇怪的路徑拼接報(bào)錯(cuò)時(shí)先想想是不是路徑風(fēng)格混用導(dǎo)致的。3. 正式編譯從構(gòu)建系統(tǒng)配置到產(chǎn)物落地3.1 獲取源碼穩(wěn)定版優(yōu)先別追最新主干Poppler 的源碼托管在項(xiàng)目官方 Git 倉(cāng)庫(kù)地址在項(xiàng)目主頁(yè)上有直接克隆下來(lái)就行g(shù)it clone poppler 官方倉(cāng)庫(kù)地址 cd poppler這里我要多說(shuō)一句不要默認(rèn)檢出最新的主干分支除非你想幫忙踩新 bug。Poppler 的版本迭代節(jié)奏很快主干上經(jīng)常有剛合入的實(shí)驗(yàn)性代碼對(duì)第三方依賴(lài)的兼容性還沒(méi)完全打磨。生產(chǎn)環(huán)境建議在正式發(fā)布標(biāo)簽里挑一個(gè)穩(wěn)定版本先執(zhí)行g(shù)it tag看看有哪些發(fā)布版本然后檢出到你需要的那個(gè)標(biāo)簽例如git checkout poppler-24.08.0版本選擇還有一個(gè)關(guān)鍵影響構(gòu)建系統(tǒng)本身。Poppler 早期以 CMake 為主從某個(gè)大版本開(kāi)始逐步加入 Meson 支持較新的版本已經(jīng)停掉 CMake 維護(hù)只保留 Meson。也就是說(shuō)老版本可以走 CMake 路線(xiàn)新版本直接上 Meson 更省心。下面兩條路線(xiàn)我都會(huì)講你按手里源碼的版本對(duì)號(hào)入座。3.2 老版本路線(xiàn)CMake 配置參數(shù)逐項(xiàng)說(shuō)明如果你的 Poppler 版本還帶 CMake 支持配置命令大致如下mkdir -p build cd build cmake .. \ -G Ninja \ -DCMAKE_BUILD_TYPERelease \ -DCMAKE_INSTALL_PREFIX/mingw64 \ -DBUILD_SHARED_LIBSON \ -DENABLE_UTILSON \ -DENABLE_GLIBON \ -DENABLE_CAIROON \ -DENABLE_CPPON \ -DENABLE_LIBRARYON \ -DENABLE_OPENJPEGON \ -DENABLE_LCMSON這些參數(shù)里的核心是幾個(gè) ENABLE 開(kāi)關(guān)它們直接決定編譯出來(lái)的庫(kù)帶多少功能。ENABLE_UTILS 控制命令行工具集包括 pdftotext、pdfinfo、pdftoppm 等。如果你編譯 Poppler 就是為了拿到這些工具必須打開(kāi)如果只當(dāng)開(kāi)發(fā)庫(kù)用可以關(guān)掉給安裝目錄瘦身。ENABLE_GLIB 和 ENABLE_CPP 分別控制 GLib 風(fēng)格 C API 和 C API。絕大多數(shù)第三方程序用的是 C API也就是poppler/cpp/下面那套接口也有人用 GLib C API。建議兩個(gè)都開(kāi)它們只花一點(diǎn)編譯時(shí)間但后續(xù)接不同項(xiàng)目的兼容面就寬多了。ENABLE_CAIRO 和 ENABLE_OPENJPEG 屬于功能增強(qiáng)項(xiàng)Cairo 后端開(kāi)啟后才有 pdftocairo 工具也才能高質(zhì)量導(dǎo)出 PDF 頁(yè)面為 PNG 圖像OpenJPEG 負(fù)責(zé) JPEG2000 解壓前面說(shuō)過(guò)掃描類(lèi) PDF 全靠它。LCMS 是色彩管理做出版、設(shè)計(jì)類(lèi)工具的務(wù)必開(kāi)普通辦公文檔場(chǎng)景關(guān)掉可以省兩個(gè)依賴(lài)。配置完成后CMake 會(huì)輸出一段報(bào)告列出啟用的組件花十秒鐘掃一眼確認(rèn)想要的都在里面。如果某個(gè)選項(xiàng)被標(biāo)成 disabled八成是依賴(lài)沒(méi)裝全回頭補(bǔ)裝對(duì)應(yīng)包重新配置即可。然后執(zhí)行構(gòu)建cmake --build . -j 6-j后面是并行任務(wù)數(shù)按 CPU 核數(shù)合理設(shè)置別盲目拉滿(mǎn)。編譯 Poppler 這種規(guī)模的庫(kù)內(nèi)存緊張時(shí)并行任務(wù)過(guò)多會(huì)把編譯進(jìn)程活活擠爆。我自己的機(jī)器用-j 6比較舒服整個(gè)過(guò)程幾分鐘到十幾分鐘。構(gòu)建完成后安裝cmake --install .默認(rèn)裝到之前指定的 CMAKE_INSTALL_PREFIX 目錄。如果指定的是/mingw64可執(zhí)行文件會(huì)進(jìn)到 MSYS2 安裝目錄下的bin子目錄直接在 shell 里就能調(diào)用。3.3 新版本路線(xiàn)Meson 配置要點(diǎn)新版 Poppler 用 Meson 配置更簡(jiǎn)潔命令行一眼能看懂cd poppler meson setup builddir \ -Dbuildtyperelease \ -Denable-utilstrue \ -Denable-glibtrue \ -Denable-cairotrue \ -Denable-cpptrue \ -Denable-libcurlfalseMeson 的參數(shù)命名風(fēng)格和 CMake 不一樣但邏輯一一對(duì)應(yīng)enable-utils 對(duì)應(yīng) ENABLE_UTILSenable-glib 對(duì)應(yīng) ENABLE_GLIBenable-cairo 對(duì)應(yīng) ENABLE_CAIRO。libcurl 是用于訪(fǎng)問(wèn)遠(yuǎn)程 PDF 的選項(xiàng)絕大多數(shù)本地處理場(chǎng)景用不到關(guān)掉能少拉兩個(gè)依賴(lài)。Meson 有個(gè)非常實(shí)用的特性配置完成后會(huì)輸出一份詳細(xì)的功能檢測(cè)清單哪個(gè)庫(kù)找到了、哪個(gè)庫(kù)版本太老、哪個(gè)組件被強(qiáng)制關(guān)閉全部列得清清楚楚。如果某個(gè)你想用的功能旁邊標(biāo)著 NO順著它的依賴(lài)名補(bǔ)裝即可排查成本比 CMake 低不少。構(gòu)建和安裝走兩條命令meson compile -C builddir meson install -C builddirMeson 后端默認(rèn)是 Ninja速度上不用操心。整套流程跑完后去安裝目錄看一眼正常情況下會(huì)有bin和lib兩個(gè)目錄命令行工具和動(dòng)態(tài)庫(kù)各就各位。提示不管哪條構(gòu)建路線(xiàn)編譯過(guò)程中如果報(bào)錯(cuò)第一反應(yīng)別急著去搜索引擎復(fù)制報(bào)錯(cuò)原文先看報(bào)錯(cuò)發(fā)生在哪個(gè)階段。絕大多數(shù)問(wèn)題就兩類(lèi)頭文件找不到、鏈接符號(hào)找不到。前者基本是依賴(lài)沒(méi)裝或 pkg-config 路徑不對(duì)后者基本是庫(kù)版本不匹配。帶著這兩個(gè)預(yù)判去看報(bào)錯(cuò)定位速度快得多。4. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄4.1 高頻編譯錯(cuò)誤速查表這一節(jié)我從自己反復(fù)折騰的經(jīng)歷里攢了不少報(bào)錯(cuò)現(xiàn)場(chǎng)把出現(xiàn)頻率最高的幾個(gè)整理成表你照著排查基本能覆蓋八成情況。報(bào)錯(cuò)現(xiàn)象根本原因解決方案fatal error: ft2build.h: No such file or directoryfreetype 頭文件不在 include 路徑安裝 freetype 開(kāi)發(fā)包確認(rèn) pkg-config 能查到 freetype2fontconfig/fontconfig.h: No such filefontconfig 開(kāi)發(fā)包缺失安裝 fontconfig重跑配置undefined reference to png_set_*一類(lèi)鏈接錯(cuò)誤libpng 未正確鏈接或版本過(guò)舊安裝 libpng檢查鏈接庫(kù)順序Could NOT find CairoCairo 開(kāi)發(fā)包缺失或 pkg-config 路徑錯(cuò)誤安裝 cairo把/mingw64/lib/pkgconfig加進(jìn) PKG_CONFIG_PATHCannot find -lzzlib 未被正確鏈接安裝 zlib必要時(shí)在配置里顯式指定庫(kù)路徑構(gòu)建過(guò)程中 OOM 卡死并行任務(wù)過(guò)多內(nèi)存耗盡調(diào)低-j參數(shù)或關(guān)掉部分功能再編構(gòu)建系統(tǒng)抓到錯(cuò)誤的編譯器PATH 混入了其他 GCC 或 MSVC 的 CMake檢查 PATH 順序優(yōu)先保留/mingw64/bin這里我想專(zhuān)門(mén)展開(kāi)一下undefined reference這類(lèi)鏈接錯(cuò)誤。Windows 下用 MinGW 鏈接時(shí)庫(kù)的鏈接順序是敏感的被依賴(lài)的庫(kù)要放在依賴(lài)它的庫(kù)后面。Poppler 依賴(lài)數(shù)量多構(gòu)建系統(tǒng)一般能自動(dòng)處理順序但老版本或者手動(dòng)改過(guò)配置時(shí)就會(huì)冒出找不到符號(hào)的問(wèn)題。遇到時(shí)優(yōu)先查 zlib 和 libpng 這兩個(gè)底層庫(kù)它們被 Poppler 間接引用非常容易因?yàn)榘姹静黄ヅ鋵?dǎo)致符號(hào)解析失敗。另一個(gè)高頻但容易被忽略的問(wèn)題是換行符。Windows 上下載解壓的源碼包有些文件是 CRLF 換行在 MSYS2 環(huán)境里編譯會(huì)觸發(fā)一系列詭異的預(yù)處理錯(cuò)誤。如果你是從 Windows 圖形界面解壓的源碼建議先隨機(jī)挑一個(gè)源文件檢查編碼是 CRLF 就批量轉(zhuǎn)成 LF 再編譯。4.2 運(yùn)行期問(wèn)題DLL 和字體配置編譯成功只是前半程把編譯好的 exe 拿到干凈的 Windows 10 上運(yùn)行你會(huì)遇到第二波問(wèn)題典型的就是兩類(lèi)缺 DLL 和字體找不到。缺 DLL 很好理解。MSYS2 編譯出的程序會(huì)動(dòng)態(tài)鏈接一堆運(yùn)行庫(kù)包括 libgcc、libstdc 等。在 MSYS2 的 shell 里運(yùn)行沒(méi)問(wèn)題因?yàn)?PATH 里就有這些 DLL脫離 shell 直接雙擊運(yùn)行就會(huì)提示找不到動(dòng)態(tài)鏈接庫(kù)。解決方案是執(zhí)行l(wèi)dd 程序名查看它依賴(lài)哪些 DLL然后從 MSYS2 安裝目錄的bin文件夾里把對(duì)應(yīng)文件拷貝到程序所在目錄。想省事的話(huà)也可以把所有 bin DLL 一股腦拷過(guò)去就是目錄會(huì)有點(diǎn)亂。字體找不到是更隱蔽的問(wèn)題。Poppler 渲染 PDF 時(shí)需要知道系統(tǒng)裝了哪些字體它在 Windows 上默認(rèn)通過(guò) fontconfig 做字體發(fā)現(xiàn)。fontconfig 依賴(lài)一個(gè)配置文件 fonts.conf 來(lái)定義字體搜索路徑在 MSYS2 里沒(méi)問(wèn)題但把 exe 拷到別的機(jī)器后fontconfig 找不到配置輕則漏字重則所有文字變成方塊。解決方法是把 MSYS2 安裝目錄下的etc/fonts文件夾連同程序一起拷走然后設(shè)置環(huán)境變量export FONTCONFIG_PATHE:/myapp/fonts export FONTCONFIG_FILEE:/myapp/fonts/fonts.conf同時(shí)要在 fonts.conf 里把C:/Windows/Fonts加進(jìn)dir列表否則字體匹配根本覆蓋不到 Windows 系統(tǒng)字體中文 PDF 的渲染質(zhì)量會(huì)非常糟糕。注意如果處理的 PDF 里有中文強(qiáng)烈建議把 Poppler 配套的數(shù)據(jù)包 poppler-data 一并準(zhǔn)備好。它提供 PDF 內(nèi)部編碼到 Unicode 的映射表缺了它很多中文 PDF 抽出來(lái)的文本是亂碼。MSYS2 里可以安裝對(duì)應(yīng)的 poppler-data 包或者把數(shù)據(jù)目錄通過(guò)環(huán)境變量指到正確位置。4.3 集成到 Qt 或 C 項(xiàng)目時(shí)的幾個(gè)坑把編譯好的 Poppler 接進(jìn)自己的項(xiàng)目常見(jiàn)的是兩種方式直接調(diào)用 C API或者用 QProcess 調(diào)用命令行工具。兩種方式各有各的坑。先說(shuō) C API 方式。首先得在工程里正確指定頭文件目錄和庫(kù)目錄。假設(shè)庫(kù)裝在E:/popplerinclude 路徑是E:/poppler/include/poppler庫(kù)文件是poppler-cpp。CMake 工程里可以這樣寫(xiě)find_path(POPPLER_INCLUDE_DIR poppler/cpp/poppler-document.h PATHS E:/poppler/include) find_library(POPPLER_CPP_LIBRARY NAMES poppler-cpp PATHS E:/poppler/lib)這里有個(gè) MinGW 特有的細(xì)節(jié)動(dòng)態(tài)庫(kù)的命名通常是一對(duì)文件libpoppler-cpp.dll.a是鏈接時(shí)用的導(dǎo)入庫(kù)libpoppler-cpp.dll是運(yùn)行時(shí)加載的實(shí)際 DLL。構(gòu)建系統(tǒng)找?guī)煺业氖乔罢叩罱K部署要把后者放到 exe 旁邊少了運(yùn)行時(shí)照樣起不來(lái)。用 QProcess 調(diào)命令行工具的方式更省事坑主要在參數(shù)傳遞和工作目錄。Windows 路徑帶盤(pán)符和反斜杠路徑里有空格時(shí)QProcess 的 setArguments 方法會(huì)自動(dòng)處理引號(hào)但千萬(wàn)別手寫(xiě)拼參數(shù)字符串——引號(hào)轉(zhuǎn)義在 Windows 上非常容易出錯(cuò)這是老程序員踩過(guò)無(wú)數(shù)次的坑。另外pdftoppm 這類(lèi)工具默認(rèn)把輸出寫(xiě)到當(dāng)前工作目錄如果程序啟動(dòng)目錄不是預(yù)期目錄輸出就會(huì)跑到奇怪的地方。穩(wěn)妥做法是每次調(diào)用前用 setWorkingDirectory 明確指定輸出目錄。還要特別注意一點(diǎn)在圖形界面程序里調(diào)用這些命令行工具時(shí)別在 UI 線(xiàn)程里同步等待。一個(gè)幾百頁(yè)的大 PDF 轉(zhuǎn)圖片可能要幾十秒界面直接卡死是用戶(hù)完全無(wú)法接受的。封裝成異步任務(wù)或者丟到線(xiàn)程池里體驗(yàn)會(huì)好很多。我用下來(lái)最順手的方式是 QtConcurrent 跑轉(zhuǎn)換邏輯配合信號(hào)槽把結(jié)果回調(diào)到 UI 線(xiàn)程刷新預(yù)覽。5. 成果驗(yàn)證和功能擴(kuò)展5.1 命令行工具的完整驗(yàn)收流程編譯安裝完成后別急著收工我建議做一輪完整的功能驗(yàn)收幾分鐘的事能幫你發(fā)現(xiàn)很多配置階段沒(méi)暴露的問(wèn)題。先準(zhǔn)備一個(gè)測(cè)試 PDF最好同時(shí)包含文本、圖片、多頁(yè)以及中文內(nèi)容。然后依次執(zhí)行pdfinfo test.pdf pdftotext test.pdf output.txt pdftoppm -png -r 150 test.pdf page pdftocairo -png -r 150 test.pdf page_cairopdfinfo 驗(yàn)證元數(shù)據(jù)讀取確認(rèn)頁(yè)數(shù)、文檔版本、標(biāo)題這些信息正常pdftotext 驗(yàn)證文本抽取打開(kāi) output.txt 檢查中文有沒(méi)有亂碼、換行是不是合理pdftoppm 和 pdftocairo 都做頁(yè)面轉(zhuǎn)圖測(cè)試前者走輕量后端后者走 Cairo 后端兩個(gè)輸出對(duì)比能直觀(guān)看出渲染效果的差異。驗(yàn)收時(shí)有幾個(gè)重點(diǎn)觀(guān)察項(xiàng)中文是否亂碼亂碼基本指向 poppler-data 沒(méi)配好圖片區(qū)域是否正常解碼空白塊說(shuō)明 openjpeg 缺失或編碼特殊轉(zhuǎn)出的 PNG 夠不夠清晰-r參數(shù)控制輸出分辨率150 足夠屏幕展示印刷需求可以上到 300但文件體積和耗時(shí)也會(huì)成倍增加。5.2 開(kāi)發(fā)者接入一段簡(jiǎn)單的 C 示例庫(kù)編譯完、命令行工具驗(yàn)收過(guò)接下來(lái)就是真正寫(xiě)代碼接入。如果你是 C 開(kāi)發(fā)者最直接的用法是 Poppler 的 C API。下面這段代碼讀取 PDF 第一頁(yè)的全部文本#include poppler/cpp/poppler-document.h #include poppler/cpp/poppler-page.h #include iostream int main() { auto doc poppler::document::load(E:/test.pdf); if (!doc || doc-is_locked()) { std::cerr 打開(kāi) PDF 失敗或文檔加密 std::endl; return 1; } std::cout 頁(yè)數(shù): doc-pages() std::endl; auto page doc-create_page(0); if (page) { std::cout page-text().to_utf8().c_str() std::endl; } return 0; }這份簡(jiǎn)短的示例里藏著好幾個(gè) Windows 特有的細(xì)節(jié)。poppler::document::load的路徑參數(shù)按 UTF-8 解析Windows 下路徑含中文時(shí)記得先做編碼轉(zhuǎn)換否則文件打不開(kāi)。create_page的參數(shù)是 0 基索引第一頁(yè)傳 0傳 1 就是第二頁(yè)這個(gè)接口設(shè)計(jì)坑過(guò)不少?gòu)?1 數(shù)頁(yè)的人。page-text()返回 Unicode 字符串在 Windows 控制臺(tái)直接輸出會(huì)是一堆問(wèn)號(hào)要么把控制臺(tái)代碼頁(yè)切到 UTF-8要么把結(jié)果寫(xiě)入文件再查看。編譯鏈接命令在 MinGW 下是g -stdc17 test.cpp -I/mingw64/include/poppler -lpoppler-cpp -o test.exe如果你項(xiàng)目里用了 GLib 風(fēng)格的 C API鏈接庫(kù)換成-lpoppler-glib頭文件路徑變成poppler/glib/poppler.h基礎(chǔ)知識(shí)體系是同一套。5.3 還能榨出哪些功能編譯 Poppler 的樂(lè)趣在于當(dāng)初看起來(lái)麻煩的功能開(kāi)關(guān)其實(shí)都是現(xiàn)成模塊按需打開(kāi)之后能獲得不少超乎看 PDF本身的能力。最實(shí)用的是用 pdftocairo 做批量轉(zhuǎn)圖把幾十個(gè) PDF 統(tǒng)一轉(zhuǎn)成 PNG 或 SVG 縮略圖這在文檔管理系統(tǒng)里幾乎是剛需。另一個(gè)容易被忽略的能力是 PDF 頁(yè)面的抽取與合并pdfseparate 和 pdfunite 兩個(gè)小工具能完成基本操作不用額外引第三方庫(kù)。做全文檢索系統(tǒng)的人一定要研究 pdftotext 的-layout參數(shù)它盡量保留原文版式輸出對(duì)段落結(jié)構(gòu)敏感的場(chǎng)景非常有用需要原始文本順序時(shí)用-raw參數(shù)更適合做索引清洗。安全相關(guān)場(chǎng)景也值得挖掘。打開(kāi) NSS 支持后Poppler 能讀取 PDF 的數(shù)字簽名信息電子合同、票據(jù)驗(yàn)證類(lèi)應(yīng)用里常用到。雖然它不負(fù)責(zé)完整證書(shū)鏈校驗(yàn)但判斷一份 PDF 帶沒(méi)帶簽名、簽名是否有效足夠應(yīng)付大多數(shù)業(yè)務(wù)需求。渲染性能方面也提一句Splash 后端輕快適合預(yù)覽場(chǎng)景Cairo 后端質(zhì)量高適合導(dǎo)出印刷級(jí)圖片。兩條后端我都留著了實(shí)際調(diào)用時(shí)按場(chǎng)景切換。最后說(shuō)說(shuō)靜態(tài)編譯。如果要分發(fā)給沒(méi)有 MSYS2 環(huán)境的同事使用靜態(tài)鏈接最省心。配置時(shí)把 BUILD_SHARED_LIBS 改成 OFF鏈接時(shí)加-static產(chǎn)出的 exe 就不依賴(lài)一堆 DLL。代價(jià)是可執(zhí)行文件體積從幾 MB 漲到幾十 MB某些依賴(lài)回調(diào)插件的功能在靜態(tài)模式下不可用。我的習(xí)慣是給工具類(lèi)程序做靜態(tài)編譯圖省事給庫(kù)文件做動(dòng)態(tài)編譯方便后續(xù)升級(jí)。編譯 Poppler 這事我第一次完整跑通花了兩三天最耗時(shí)間的其實(shí)不是執(zhí)行構(gòu)建命令的那幾分鐘而是反復(fù)在依賴(lài)版本、pkg-config 路徑、還有 Windows 特有的環(huán)境變量問(wèn)題上打轉(zhuǎn)。后來(lái)我把整套流程固化成固定步驟從裝環(huán)境到驗(yàn)收一個(gè)小時(shí)能完成再編新版或者換機(jī)器都是照方抓藥。如果你在某個(gè)報(bào)錯(cuò)上卡住了拿上面的速查表對(duì)一下能解決八成的場(chǎng)景剩下兩成大概率是版本差異導(dǎo)致的解決辦法也不復(fù)雜升級(jí)或者降級(jí)對(duì)應(yīng)的依賴(lài)包把構(gòu)建緩存目錄清掉重新配置一次。我個(gè)人還有個(gè)習(xí)慣是隨手把用到的 pacman 包列表和構(gòu)建參數(shù)記進(jìn)項(xiàng)目倉(cāng)庫(kù)里的文檔哪怕半年后再看照著就能把環(huán)境完整復(fù)現(xiàn)出來(lái)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
密臀AV在线| 中文字幕乱妇免费视频| 日本一二三免费久久| www.91色综合| 激情婷婷丁香| 二色av| 日本欧美中文字幕| 欧美后入视频| 丁香久久| 六月激情婷婷| 操逼视频免费日韩无码| .精品人妻一区二区三| 麻豆色99999| 久久大精品乱码视频人妻熟女| 亚洲日本韩国在线| 亚洲成a人片在线观看中文!!!| 国内伊人久久久久久网站视频| 极品色电影院| 少妇激情AV| 欧洲亚洲人妻无码中字久久三区四区 | 欧美高潮在线| 日本三级日本三级三级人妇四虎| 九九色逼| 国产精品大香蕉| 把腿张开老子CAO烂你| 国产午夜在线观看视频| 九九九久久久| 日本黄大片在线观看视频| 另类小说欧美激情校园春色| 操逼网站网站| 久久国产在线一区二区| 强奸乱伦麻豆| 91久久婷婷| 国产做?爰片久久毛片?片美国| 国产午夜无码片在线观看影视| 懂色中文一区二区三区| 国产成人精品必看 | 中文字幕乱碼在线| av东京热男人的天堂| 大香蕉一人在线| 啊啊啊啊啊啊好湿好爽视频| 丰满少妇高潮无码| 传媒免费一区二区三区| 免费超碰97久久| 操逼无毒无码免费视频| 美女t无毒不卡不卡| 久久影视二区三区行押| 99热婷婷一区二区三| 婷婷丁香人妻 | 看免费一级在线播放毛片| 婷婷久月| 人人模人人看| 亚洲乱伦图片视频| 色五月婷婷麻豆在| 欧美亚洲国产自久久| 日本一二三高清| 秋霞鲁丝午夜无码一区二区三| 日韩精品99久久久久久中文字幕| 嗯嗯啊好大| 亚av顶级裸体一区二区三区四区五区 | 国产久久男人天堂| 亚洲国产天堂| 国产精品成人无码a v毛片| 国产大陆天天艹| 国产浮力影院第1页| 日本三级黄页| 91色综合色| 夜夜欧美 | 欧美大片天天看| 亚洲蜜臀精品视频久久| 国产无码精品无码| 国产精品自在线发布| 日韩人成网站在线播放| 可以免费观看的AV| 精品人妻高清麻豆av| 先锋女优在线观看视频| 91在线超高颜值国产| 亚洲黄色a级片| 可以看的av| 欧美色图私拍91| 亚洲91综合| 精品黄色电影| 国产浮力影院第1页| 日韩精彩免费| 搡老女人老91二区| 操逼逼中文字幕| 精品福利视频| 日天天九九天堂666| 国产女s强制榨精视频| 色情乱伦AV| 亚洲色图久久成人| A级在线视频| 色五月综合| 天天看片麻豆| 国产午夜福利电影免费在线观看| 久操综合在线| 中出91视频| 日本黄色精品专区网站| 91在线美女| 91蜜臀人妻中文字幕在线| 精品久久久久久无码| 九九色精品| 传媒免费一区二区三区| 亚洲导航深夜福利| 中文字幕伊人| 成人a大片在线观看| 成人综合色网| 欧美92| 伊人久操| 久久久精品久久| 日韩精品在线视频在线观看| 小草av不卡亚洲二区| 91丨国产丨白浆秘 洗澡动漫| 十八禁视频网站| 狠狠操狠狠燥| 久草福利在线资源站| 人人搡人人肉久久精品| 韩三级a视频在线观看| 中文字幕一区av| 久久超碰天天| 婷婷在线精品| 情趣丝袜无码操逼视频| 男人的天堂久久狠| 人人射人人操人人摸| 97视频900| 精品久久久久久中文| 加勒比综合九九99视频在线播放| 日韩色| 少妇人妻激情四射| 久久久久久AⅤ无码免费肉站 | 成人性爱免费播放| 超碰97玖玖爱| 国产视频不卡在线观看| 黑人在线91| 激情五月丁香五月| 亚洲码在线中文在线观看| 日韩紧密久久| 亚洲图片婷婷五月天| 婷婷情色五月天| 18禁免费视频| 91女日逼| 免费久久9999| 人妻熟女av国产网站| 久草看看看| 人妻碰碰碰碰碰碰| 一级aaaaa欧美中文字幕录像片| 五月开心久久AV官网| 免费作爱一级视频| 亚洲情欲| 久久久久久久六六| 欧美色棕合| 日逼视频日本| 欧美一级二级三级| 熟妇高潮精品一区二区三区下载| 综合色播| 欧美一二三级精品在线| 男女啊啊啊啊啊| 欧美精品人妻视频| 日美免费黄片| 国产操操日韩三级黄| 伊人91| 国产精品午夜成人福利| 国产18精品亚洲精品| 亚洲高清91| 熟妇熟女一区二三区| 在线看的av| 天美麻豆一区二区三区| 人妻人妻天天碰| 91人妻爽爽人人做人人澡| 人妻色偷色噜| 婷婷超| 久久人妻一区二区三区高清| 91中文精品日韩欧美在线| 最新国产精品久久精品| 91av一区二区在线观看| 女色综合| 欧美日韩亚洲少妇寂寞影院正在播放 | 加勒比伊人影院| 91熟女熟妇视频网站| av绯色| 亚洲中文字幕在线视频一区二区| 久久精品99| 欧洲精品在线播放| 极品丝袜无码| 丁香激情五月| 欧洲熟妇xxXx欧美老妇裸体| 亚洲天堂无码| 91欧美美女日韩国产婷婷| 伊人五月天| 91操人| 亚洲色系另类精品国产| 乱伦熟女论坛| 超碰97人妻在线| 日日夜夜骑| 五十路熟女在线不卡观看一区二区| 日本免费不卡二区| 在线亚洲精品久久久| 加勒比在线视频| 天天肏夜夜肏| 91蜜臀熟女| 99∨VTV| 亚洲成人综合在线| 艳美熟妇先锋一二三区| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 久久性爱视频| 天天舔天天| 国产伦精品一区二区三区视频女| 五月婷婷五月天| 婷婷综合网| 全球成人中文在线| 国产高潮AA片免费看| 性做久久久久久免费观看软件| 日韩欧美国产一区二区三区四区| 亚洲av影音先锋| 做爱A级亚欧| 亚洲1区2区三区高清中文字幕| 秋霞成人一级在线观看| 人人射人人操人人摸| 久久精品国产亚洲AV无码电影| 综合欧美日韩在线观看| 91狠狠色丁香婷婷综合久久| 三级片大波波| 性性欧美| 久久久久久久| 秋霞网—男女啪啪亚洲免费体验区 | 操逼操网| 盗摄 精品 另类 一区| 激情综合97| 色婷婷综合久久中文字幕雪峰| 国产亚卅97| 做爱福利视频一区二区| 91欧美色| 超碰人妻天天干| 国产精品午夜高潮呻吟久久av| 色5月婷婷| 97色五月天完| 免费精品AB| 色九久| 乱伦一二三| 3P乱轮视频| 五月丁香婷婷啪啪| 国产夜夜操| 天堂网 主播 亚洲| 日韩熟女精一区二区三区不卡| 欧美日本成人一区二区| 国产网红精品| 欧美在线55555| 东京热AV男人的天堂| 嗯嗯啊好爽| 欧美综合娱乐久久| 亚洲熟妇丝袜在线观看| 偷拍新久久| 中文字幕一区二区三区50路| 欧美极品性爱天天射| 五月色综合| 97亚洲欧美日韩| 中文字幕激情小说| 亚洲成人福利电影免费| 60秒试看最爽10分钟网站| 超碰这里有精品| 无码国产精品96久久久久孕妇| 日韩A优精品在线观看| 1024日韩| 欧美伦乱| 国产免费一区二区在线A片视频| 精品网站9999| 九七色图| 99热伊人| 青青草日韩免费观看高清在线| 五月婷亚洲精品天堂| a级理论午夜日本| 四虎884a| 欧美黄色大片在线观看| 国产二区三区粉嫩在线| 日韩在线欧美精品一区二区| 超碰超碰95| 久久久久久久久久久精| 国产精品自拍xxxx| 日韩精品人妻中文字幕有码午| 天天日天天爽| 欧美日韩色| 大伊香蕉在线视频免费| 18禁久极品美女久久哦哟呀!| 美欧色综合| 香蕉久久国产AV一区二区| 天天看高清麻豆| 欧美片第一页| 伊人97色天使| 69国产对白刺激| 97久久精品亚洲| 国产精品久久久久久久久久久久久久| 成视频在线观看免费看| 欧美综色欧| 天天爽人人综合免费7799| 中文字幕在线第二页| 欧美日韩国产中文精品字幕自在自线| 国产乱人妻精品入口| 99久久精品欧美国产| 国产视频三区四区| 天天爽夜夜爽夜夜爽精| 九九拍拍精品视频在线播放| 日本激情免费大片| 亚洲青青草| 中文字幕狠狠玩| 亚洲日本天堂| 337p大胆噜噜噜噜噜91Av| 天干天干天干天天做| 中文字幕av乱伦| 久久日韩肥臀| 91久青| 色欲Av人妻精品一区二| 91国产在线精品| 国产精品久久久无码AV网站| 综合网少妇| 久操B网| 四虎国产精品永久在线囯在线| 人妻一区二区三区| 操逼网站地址| 啊啊啊爽爽| 青青草视频在线观看一区二区| 69XX一中文字幕人妻91| 天天影视91看看| 天天影视综合网欧美精品| 天天澡天天狠天天天做| 欧美日日人人天天| 欧美中文字幕男人天堂久久精品| 久久国产AⅤ| 亚洲一区制服诱惑| 日韩在线视频1234| 日操粉逼逼| 欧美色图片| 亚洲一二三| 九九色综合| 精品国产91内射久久| 亚洲欧美天| 韩日男人的天堂| 国产区91柔拿会所技师| 伊人操| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 思思热一热婷婷热一热| 成人一级性爱| 91综合站| 超碰色大香蕉| 色拍偷亚洲| 日韩精品99999| 久久成人午夜精品影院 | 国产伦精品一区二区三区视频女| 蜜乳Av成人片网站| 人妻少妇精品| 久久久久久久综合,国产| 精品一区96| 九热视频| 深田咏美亚洲精品福利社| 亚洲日韩人妻中文字幕一区| 亚洲综合嫩| 欧洲小说色图视频另类| 亚洲成a人v欧美综合天堂下载 | 日本精品五区| 精品四五区| 免费看欧美美女黄色大片 | 亚洲国产欧美中文永久| a片偷拍视频| 极品色综合| 青青草在线视频播放器| 校园春色家庭伦理欧美激情| 91综合国产精品| 国内黄色精品| 婷婷国产精品九区| 特级大荫道BBwBBwBBW| 五月婷婷六月色| 欧亚免费视频| 午夜高清成人在线视频| 俺去俺来也在线www| 狠狠操夜夜| 国产极品粉嫩馒头一线天av| 97视频网站| 大香蕉久久| 91性感在线| 欧美天天综合网版| 91免费看一区二区三区| 神马九九| 性色生活片久久毛片婬片免费放女人一级毛片| 国产精品麻豆免费视频| 午夜操逼不卡| 无码国产Av| 成人麻豆av电影网站| 国产乱伦亚洲色图高清无码| 黄色片一区二区三区四区五区| 亚欧高清| 亚洲av淫乱| 久久五月天婷婷| 九九aV| 激情六月婷婷| 射丝袜高跟鞋99| 天美一二三在线观看Av| 日韩精品影视| 亚洲情色综合| 涩综合导航| 岛国黄| 国产三级中文有码在线视频| 影音先锋国产精品| 欧美一区二区情色| 另类av综合久久| 色悠久久久av| 91综合色噜噜| 强奸乱伦av电影| 欧美在线播放aaaa| 欧美日韩理论一区| 久久久熟女一区| 日韩97在线| 日韩无码极品| 9999免费精彩视频| 四虎永久在线精品免费网址 | 先锋影音av先锋一区| 操逼天美3区| 国产精品久久伊人| 少妇毛片久久| 女人18精品一区二区三区| 美女网站91| 天堂俺去俺来也www久久婷婷| 国产亚洲精品第一最新| 美女97超碰| 夜夜嗨免费视频| 久久午夜色播影院免费高清| 无码免费精品高清| 快点操死我| 九九九九97| 欧洲黄色网| 亚洲中文一区二区三区视频| 久久熟妇五十路一区| 色69大色97香蕉| 日韩精品字幕| 天综合网| 久久久久久久久久久久97| 中国操逼无码| 亚洲 日韩 欧美 国产综合体| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 日韩99神马视频播放片在线播放| 亚洲熟久久| 97天天日| 超碰av在线| 嗯嗯啊啊好大好爽| 99亚洲国产精品色一区二区三区| 久久大香蕉| 成年人免费观看网站| 日本精品一级二级三级| 五月婷婷激情| 超碰 欧美| 蜜乳Av成人片网站| 欧美韩国你懂得在线 | 超碰97综合| 在线观看精品国产免费| 97公开久久| 欧美组图日韩亚洲中文字幕| 日本天天操| 97精品视频在线播放| 国产精品免费日韩| 久久国模av| 国内毛片热久久思思热| 97人肏| 美女91| 丁香五月婷婷五月| 黑人在线91| 337p大胆噜噜噜噜噜91Av| 中文字幕欧美日本乱码一线二线| 国产高清免费不卡av| 久草资源在线视频官方总站日韩丝袜美腿 | 欧美牲| 亚洲精品819| 91精品老女人| 97精品国产97久久久久久户外免费| 日韩欧美女求操每天更新| 熟妇操花| 久久久久久999| 亚洲av强奸乱伦| 偷偷人人精品女女久久| 一区二区三区精品黑丝白丝酒店对鸡 | 啪啪综合网| 刺激性视频黄页| 欧美激情久操网| 91在线限制级| 成人亚欧免费视频| 婷婷五月天色网| 99ri视频| 亚洲男人天堂av| 极品粉嫩一区二区| 台湾成人无码AV| 国产熟女自拍| 加勒比大香蕉视频在线| 国产强奸乱伦欧美| 啊啊啊不要啊啊受不了了视频在线| 四虎国产精品永久地址入口| 一本大道久| 国产少妇肉丝在线观看| 啪啪啪东京| 亚洲熟妇AV日韩熟妇在线| 丁香婷婷久久| 玖玖爱在线视频免费观看| 亚洲精品蜜桃久久久久久久| 手机看片1025| 黄色AV免费| 天天操天天7| 九九热精品| 夜夜草天天| 玖玖爱综合网| 久久本道| 国产精品无码论坛| 久久久久国产精品久久久| 亚洲综合性感在线| 996热| 国产精品一二三区18| 亚洲人久久久网| 五月丁香色婷婷| 成人AV超碰免费在线| 日本精品一区二区三| 超碰79人人乐| 日本理论在线| 日本精品网站在线中文| 四虎在线视频| 色踪合AV| 国产嫩草精品A88AV在线| 职场同事知名国产国产精品久久欧美日韩 | 搡老女人老妇女AAA一VU麻豆| 婷婷8月天青娱乐| 午夜后入| 熟女丰满人妻一区| 欧美一级色| 精品少妇人妻av久久免费| 精品传媒在线一区| 色哟哟av| 日产成人久久| 综合91网| 99热导航| 三级片大波波| 五月黑AⅤ| 2024人人操人人摸| 色综合久久88色综合久久天天| 日韩欧美亚洲自拍偷拍| 98超碰欧美| 天天综合网亚洲综合网| 新视频sss国产| 蜜桃视频精品一区二区三区| 亚洲麻豆精品二区三区| 涩五月婷婷| 国产精品视频精品一二| 91强热人妻| 国产一级内射无挡观看| 日本性交操一区二区不卡系列| 9久热这里只有精品| 午夜视频久久久| 青青青草伊人精品| 97欧美色综合| 亚洲九九爱| 国产成人天堂| 九九九九免费视频| 91少妇通奸网站| 色眯眯av| 国内外激情在线| 99久久久| 婷婷久月| 中国AV美女| 伊人一区二区在线播放| 尤物网址| 性开放中文AV高清无码免费看| 亚洲成人av电影在线| 377p欧洲日本亚洲大胆| 日本免费人成视频播放120秒| 欧美aa一级片| 美国aaaaa一级黄片| 激情小说成人日本无码一| 亚洲系列第一页| 香蕉人人操tv| 99热精品在线| 亚洲成人一二三区| 性爱欧美五月| 国产精品一区二区麻豆| 久久久久白虎| 成人一二| 综合久久六月久久婷婷| 久热大香蕉| 国产丝袜美女诱惑| 夜夜嗨绯色| 少好三P| 伊人网高清| A级国产欧美激情在线| 在线有码中文字幕| 综合色99| 色盈盈影院| 久热99999| 9118禁| 少妇啪啪自拍| 欧美亚洲手机在线| 免费一级精品啪啪视频| 91精品国产麻豆国产自产在| 91原创在线观看| 少妇专区一二三四五| 亚洲影视高清三级-草1024榴社区入口-品爱AV| 天堂成人网| 操迟操逼在巾线Fre看| 国产大学生高潮在线播放| 色999人与兽| 亚洲少妇激情一区二区三区| 国产深喉视频一区二区| 多乙久久久久久| 日韩在线视频1234| 羞答答AV中文字| 欧美AAAA黄片| 亚洲综合九九| 色眯眯av| 色欲久久久久综合网| 在线观看日韩av不卡| 淫色网综合| 国产尤物在线三区| 欧美精品一区二区少妇免费A片 | 天堂射| 亚洲美女AV无码| 精品一二三区久久AAA片| 禁十八久久| 91丝袜在线播放| 国产又操| 色踪合AV| 人人操人人插人人摸人人干| 婷婷国产精品九区| 91丝袜美女视频| 人人干人人搞人人摸| 天天α片| 91精品国产91久久福利| 啊啊啊啊一区| 97资源亚洲| 岛国成人av在线播放网址| 97精品综合久久网| 先锋影音av先锋一区| 中文字幕二区日韩天堂 | 99无码视频| 91色射| 偷拍自拍在线视频观看| 欧美夜夜骑视频| 老熟女乱伦一区| 日本精品人妻少妇一区二区| 欧美日韩中文视频播放| 国产精品色色| 国产精品久久久久久久久久久久久久吹| 日韩乱伦影音先锋| 加勒比东京热五月天天堂网| 亚洲第一精品在线视频| 先锋音影AV| 欧美91视频| 九九九精品一区二区无码| 国产又黄又爽又刺激久久久久久| 国产精品久久久久久夜夜夜| 国产一级舔足在线观看| 一区,二区,三区网站| 人人操人人爽人人操人人| 国产精品情侣啪啪| 无码一区免费在线不卡| 熟啊v色欧美热| 亚洲无码太久| 330dv亚洲成年视频网| 国产探花精品在线| 国产精品一二三| 激情网五月天| 久久久久久网址| 人妻精品一区二区全免费| 无码精品久久| 中文字幕人乱码中文字的预防方法 | 91精品91久久久中77777| 一二三区精品视频| 日韩美女久久一区二区三区| 亚洲精品乱码线路中文字幕| 秋霞鲁丝午夜无码一区二区三| 伊人久操| 人妻精品一区二区| 热久久九九热| 日本午夜精品理论片A级APP发布| 性欧美91| 久久九九一区二区三区成人| 人妻一区视频| 熟妇人妻精品一区二区| 强上我不卡卡| 久久鲁干| 色波多| 久久是精品| 中文伊人大香蕉视频| 成人a级高清视频在线观看| 国内成人圈中文字幕无码视频| 99精品在线| 欧美激情性久久久久久| 风间由美日韩欧美久久| 久久9 9 9精品| 日本精品高清一二区一本到| 四虎精品永久在线播放| 欧美91久久久久| 九色97| 国产尤物AV尤物在线观看不卡| 亚洲男人天堂AV| 人妻内射一区二区在线视频| 人妻啊啊人妻啊| 日韩精品 视频一区二区| 超碰人妻久久| 九热超碰| 久久、1234| 丁香五月激情综合| 中文字幕成人理论在线| 国产在线能看的你懂的| 揉揉揉夜夜| 日影院久久婷婷夜夜网| 吻戏激情性巴克| 在线中文字幕极品av| 人人么人人操| 一起草视频在线| 青久久| 欧美日韩国产电影| 熟女啪啪视频| 国产亚洲在线观看| 国产92麻豆天美精品色欲5| 国产无马在线| 国产深夜福利| 黄色成年| aV中文麻| 日日爽熟女| 欧美一区二区三区成人性生活| 好爽,再快点啊哈嗯嗯嗯嗯| 色狠狠色| a在线观看| 一起草精品人妻| 3P乱轮视频| 免费的黄片有限公司| 亚洲欧美国产中文视频| 91天天综合| 亚洲天天操| 91黄站| 久久九九97| 人妻少妇无码| 综合情欲网| 97超碰国产亚洲精品| 极品AV网站在线观看| 白丝少妇一区二区| 操学生天天| 加勒比综合九九99视频在线播放| 日本不卡码黄色| 欧美中文字幕男人天堂久久精品| 韩国久久97| 天天综合网一91网| 69精品在线| 97 亚洲 日韩 欧美 在线| 日本久久久久久久久| oumeisetu综合| 国模限制级电影| 小草精彩毛片| 日本一片一区| 欧洲与亚洲欧美精品中文字幕| 日韩噜噜69| 欧美传媒一区| 激情综合 婷婷五月 红杏| 欧美日韩亚洲少妇寂寞影院正在播放 | 干b在线性社区| 无码视频一区二区| www.男人天堂| 婷婷人妻激情| 国产精品熟女一区二区三区| 中文字幕精品免费一区二区| 女同女同恋久久级三级| 久久人人爽爽人人爽人人片αV| 国产一区二区精品久久99| 无码高清专| 五月丁香色综合| 夜夜爽妓女| 天天综合网~91综合网| 综合欧美色图| 国产中出内射一区二区| 日本 色 导航| 99在线观看| 蜜臀AV一区二区三区激情综合| 黄色不卡视频| 亚洲图片小说欧洲| 欧美日韩大香蕉| 伊人久操| 精品国产网站| 久热大香蕉网站| 色妇综合网| 中文字幕乱在线伦视频中文字幕乱码在线| 99久久精品国产高潮| 综合色图,成人综合网| 国产成自自拍在线观看| 一区二区三区四区五区久久久久久| 97极品无码| 欧美黑人精品在线播放| 人妻丝袜无 码视频专区| 99抽插| 久草这里只有精品 | 日韩熟女精品无码专区一区二区| 亚洲精品人伦一区二区| 欧美色图综合| 丁香九月激情啪| 91网站18在线| 亚洲男人天堂av| 中国探花熟女| 夜夜福利| 神马久久久久| 中文字幕 码精品视频网站| 精品人妻一区二区乱码一区二区| 欧美春色| 亚洲精品第一| 一区二区 电影 亚洲| 俞拍久久国应视频| 亚洲日韩成人性爱视频| 国产午夜福利视频在线| 后入国产| 亚洲一区中文字幕一区| 91久久18禁| 久久性爱视频免费看| 九九AV| 色69大色97香蕉| 欧美大香蕉同搞| 好吊色一区| 97爱爱| 在线黄页看毛片| 99热在线只有精品| 色噜噜人妻丝袜a∨先锋影| 亚洲激情天堂网| 欧美操人视频| 综精品久久久aaaa| 97超碰中文在线| www.夜夜操| 香港久久久| 日亚韩精品视频二区三| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 精品人妻美妇91job| ...日韩成人一区二区三区字幕| 肏逼福利网站| WWW4虎| 91少妇| 亚洲不卡不卡中文字幕不卡| 女优大全 - 91n| 国产刺激视频| 97爱综合| 后入内射蜜桃臀| 另类亚洲一区二区三区| 大香蕉中文aV在线| 亚洲激情综合另类男同| 亚洲精品1区| 视频黄色国产一级| 久久久久96| 久热婷婷| 精品黄色电影| 影音综合网| 伊人五月天婷婷| 99蜜桃臀亚洲成人在线观看| 亚洲国产一区二区入口| 日韩综合97P| 欧美日韩性爱视屏免费看了| 欧美日韩制服| 按摩中文字幕| 蜜乳AV.COM| 色网综合网| 99热最新网址| 中文字幕99999| 五月天综合网| 综合欧美日韩在线观看| 日韩欧美麻豆| 一二三啪啪专区| 亚欧成人综合影院| 一本色道久久综合亚洲二区三区| 狠狠操天天干| 国产精品亚洲色婷婷久久久| 91 丝袜在线观看| 中文久久爆乳| 精品无码欧美三级| 综合网97| 色色色网站| 久久精品日韩| 午夜噜噜噜| 久久久久久久久久久久久9999| 日本三级一区二区 在线| 九九九国产精品| 久热伊人99re| 中文字幕免费看大片| 欧美天天综合网| 日韩噜噜69| 久久婷婷视频| 国产黄色在线播放观看| 99AV| 97免费免费视频网| 99ri视频| 又粗又长又爽在线观看| 精品人妻久久久久一区二区三区| 综精品久久久aaaa| 久草视频分类在线| 1级午夜影院费免区| 另类图片五月天| 欧美日本久久精品一区 | 色97国产69香蕉| 日本丝袜美腿人妻九九| 人人考人人摸人人干| 久久黄片国产一区二区| 国内精品a| 91社区拍啪人妻| 亚洲AV无码久久久国产精品| 深喉吞精| 欧洲精品网| 情色日播放AV| 日本人人操人人操| 亚洲国产精品V?在线播放| 欧美色图99| 先锋音影AV| 九九天堂| 男人的天堂2019AV| 国产无码一二三区| 成人日韩3| 国产高清亚洲日韩一区| 97中文综合| 亚洲九九视频在线观看| 伊人青青草久久| 黑操B| 婷婷综合激情| 人人操人人叉人人插人人| 人人贴人人摸| 69XX一中文字幕人妻91 | 九九热五区| 日本一本一区二区三区四区五区欧美日韩中文字幕| 欧美日日操| 欧美精品久久久久久久丰满| 蜜臀久久99精品久久久久久| 骚熟女AV网| 97超色| 欧美久久久| 日本最新免费韩国1区2区视频播放| 按摩中文字幕| 久久黄黄| 精品视频日日夜夜| 97资源制服丝袜| 看日韩美女二区三区免费操逼视频| 欧美综合区| 日本欧美国内在线| 欧美成人性爱视频大全| 黄色性爱网网| 91人妻尻屄视频| 极品美女福利在线观看| 艹比视频国产精品| 欧美日韩 强奸乱伦| 日本视频一区二区三区| 日本www操操操| 深夜激情无码| www.夜夜操| 麻豆精品久久久久久久| 久久国产精品一级二级三级| 99精品丰满人妻无| 精品国产一区二区三区久久久蜜臀| 一区黄二区黄| 五月天久久婷婷亚洲| 青青国产在线拍揄自揄拍| 精品亚洲俞拍视频一区| 91丝袜在线视频| 99久在线精品99re8热视频在线| 亚洲日韩少妇一道本视频| 亚洲的天堂网| 91精品久久久久久| 啊啊啊啊啊好多水| 乱伦日本中文自拍| 日韩性爱视频在线免费观看| 亚洲熟女性高潮久久久| 色yeye成人免费视频| 去干网最新版| 国产一区96在线| 久久久久久波多野吉衣高潮| 操曰本熟女| 九九九国产| 明星性猛交ⅹxxx乱大交| 99这里只有精品国产| 99性爱在线观看| 丁香五月综合| 安徽熟妇视频| 自拍第一页| 久久久亚洲| 久久九九视频九九视频| 中文字幕在线日亚州9| www.四虎在线| 日韩淫色网| 91精品91久久久久77777俄罗斯老妇姓x| 国产无码精品无码| 秋霞蝌科网日本一区| 青青草日韩无码| 91中文精品日韩欧美在线 | 91亚洲情色| 国产一在线观看| 人妻AV 中文字幕的| 国产女主播视频在线观看| 亚洲色图图片| 国语对白在线播放视频| 女人妻一区| 91中文字幕在线观看| 国产在线综合福利网站| 亚洲性爱无码乱伦av| 熟妇女人妻呻吟久久AV| 欧美后入式| 国产黄色小视频网站| 激情四射五月天| 亚洲天天影视综合网| 99热在线播放| 亚洲欧美一区二区三区一猛片| ,国产乱人伦精品一区二区三区| 天堂精品| 精品国产无码中文| 大香蕉碰碰| 久热网| 亚洲国产成人精品久久久国产成人一区二区三. | 久久精品一区二区三区不卡| 亚洲日韩欧美一区二区| 亚洲?V高清一区二区三区尤物| 96久久精品一二三区色欲| 99re95| 久久男人的天堂| 中文字幕成人| asc国产精品| 久久久久免费看少妇A片特黄| 麻豆久久视频在线地址| 午夜操操操| 永久免费发布性爱网| 91天天综合网,天天综合网| 亚洲高清91| 九九黄色视频在线观看| 国产精品一区二区后入| 91成人高清在线观看| 成人影 天天操 亚洲| 97天天操| 亚洲五月丁香花狠狠干一区二区三区| 免费国产| 国产1769在线| 亚洲精品一区二区免费在线观看| 国产一区二区成人av在线播放| AV天堂丝袜| 性色亚洲| 国产视频三区四区| 九七超碰| 亚洲熟妇丝袜在线观看| 屁股久久久久久| 欧美夜夜狠| 日韩9区| 五月丁香激情综合| 亚洲丝袜综合| 天综合网| 国产精品白领在线观看| 岛国小电影| 无遮挡男女激烈动态图| 亚洲男人天堂2012| 91精品无码久久久久久久| 亚洲色图欧美色图制服丝袜| 超碰在线人人射| 尤物av网站| 成人麻豆av电影网站| 欧美少妇高潮久久91| 久久久无码av精| 国产97在线播放| 色色亚洲| 草草电影院| 性老妇一区二区三区| 伦伦成年午夜免费视频| 日本顶级天天操狠狠操夜夜操中文字幕| 亚洲无码一二三区| 欧美同性恋 的搜索结果 - 91n| 玖玖色综合| 亚洲色图欧美| 躁躁日曰躁2020| 欧美性巨大╳╳╳╳╳高跟鞋| av草草在线电影| 污啪啪啪视频| 亚洲春色欧美激情自拍| 99热日| 九九热在线视频| 伊人五月天婷婷| 精品中文一区二区| 99精品在线| 狠狠色伊人亚洲综合网站色| 精品一区二区三区蜜桃臀www| av天堂5| 成人五月天丁香激情综合| 九九九九九九九九九九九九九九九女| 婷婷五月天激情网| 91处女在线观看| a片亚洲一本通视频| 99欧美| 国产AAAAAABBBBB| 啊啊啊水好多| 美女淫穴| 99精品久久| 十八禁视频一区二区| 日韩专区久久久| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 国内毛片婷婷六月色| 91美女片在线| 无码男人天堂| 情色AV电影| 日韩激情中文字幕有码| 女人天堂av在线播放| 亚洲国产精品久久久久婷婷老年 | 天天做天天爱夜夜爽毛片试看| 天欧美在线| 啊啊啊啊啊操我视频| 自拍鲍鱼一区在线高清观看免费| 国产成人91一区二区三区| 天天碰久久入| 久久、1234| 人妻啊啊人妻啊| 国产精品成人蜜臀AV在线| 无码久久亚洲高清,| 国产白丝网站| 久操影视| 情色五月天久久久| 大香蕉色十月| 人妻-91porn| 欧美一级久久久丰满| 91狠狠综| 九久久九九久视频| 青青草无码视频| 白丝jkav| 日韩精品高清资源在线| 97人人操人人干| 爆操无码| 美国一区二区三区视频| 88xx成人精品视频| 揉揉日日日日| 国产97av| 亚洲成人在线资源| 少妇丝袜在线观看AV| 亚洲色图加勒比| 夜色五月天| 亚洲成av人片色午夜乱码| 亚洲精品国产专区在线观看| 中文字幕丰满子伦无码专区在线视频最新| 香蕉av一区二区三区| 欧美情色男人的天堂| 久久发布国产伦子伦精品| 大香蕉男女超碰精品在线| 国产sv美女内射| 啪啪啪男女亚洲中文字幕99| 少妇高潮喷水无套久久久久久| 97精品久久久久中文字幕| 中文字幕乱码人妻一区二区三区,99精品| 日韩欧美视频青青| 91精品久久久久久综合五月天| 日本123区操B视频| 亚洲AV无码黄色强奸| 欧美亚洲日本视频久久久| 家庭乱伦性爱av| 国产精品自在线发布| 大香蕉视频一二三区| 亚洲色图尤物视频 | 免费超碰97久久| 日本精品免费一区二区三区四区| 神马久久中文字幕| 激情亚洲天堂| 免费成人在线熟妇网| AA丁香综合激情| 91无码中出人妻视频| 乱精品一区字幕二区| 极品色社| 人人污日韩一区二区| 亚洲色9| 精吧天堂| 91精品国|