久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(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 客戶端里完成 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)境搭建、依賴選型、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ù)器端文檔處理管線的標(biāo)配。Windows 上的情況就完全不一樣了。官方只發(fā)布源碼基本不維護(hù) Windows 的預(yù)編譯包。你在網(wǎng)上能找到的一些所謂Windows 版 Poppler要么是第三方愛(ài)好者編譯的舊版本要么打包方式來(lái)路不明版本功能和依賴狀態(tài)都不可控。對(duì)于要進(jìn)生產(chǎn)環(huán)境的工具鏈來(lái)說(shuō)這種不確定性往往就是最大的風(fēng)險(xiǎn)點(diǎn)。所以自己編譯不只是為了有得用更是為了把依賴版本、功能開(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 幾乎是性價(jià)比最高的選擇。它內(nèi)置了輕量級(jí)的 Splash 渲染后端也可以接 Cairo 這種工業(yè)級(jí) 2D 繪圖庫(kù)靈活度比大多數(shù)同類項(xiàng)目高一個(gè)量級(jí)。其次自己編譯意味著可以按需定制。我實(shí)際做項(xiàng)目時(shí)需要裁掉用不到的功能模塊來(lái)縮小體積也需要把 JPEG2000 支持、色彩管理、數(shù)字簽名這類可選項(xiàng)明確打開(kāi)。這些在別人編譯好的二進(jìn)制里根本做不到。做二次開(kāi)發(fā)的同學(xué)還有個(gè)隱藏需求帶調(diào)試符號(hào)的版本。線上程序崩潰時(shí)能定位到庫(kù)內(nèi)部的行號(hào)和只能看到一堆地址是完全兩種調(diào)試體驗(yàn)。還有個(gè)很多人忽略的點(diǎn)預(yù)編譯二進(jìn)制的動(dòng)態(tài)鏈接依賴通常是一筆糊涂賬。Windows 下跑 Linux 風(fēng)格的開(kāi)源程序DLL 版本對(duì)不上是家常便飯。自己從源碼編譯至少能清楚它鏈了哪些庫(kù)、每個(gè)庫(kù)什么版本排障的時(shí)候能順著依賴圖一步步查。說(shuō)白了自己編譯的隱性收益是可控性這在把庫(kù)往正式系統(tǒng)里集成時(shí)比什么都重要。1.3 兩條主流編譯路線怎么選在 Windows 10 上編譯 Poppler業(yè)內(nèi)實(shí)踐下來(lái)主要有兩條路線一條是 MSYS2 加 MinGW-w64 工具鏈另一條是 Visual Studio 加 vcpkg 包管理。這兩條路線我都實(shí)際跑過(guò)最終長(zhǎng)期用的是 MSYS2 方案下面把取舍理由和對(duì)比情況攤開(kāi)說(shuō)。對(duì)比項(xiàng)MSYS2 MinGW-w64Visual Studio vcpkg依賴獲取pacman 一鍵安裝依賴天然兼容vcpkg 可裝但版本組合要自己調(diào)編譯速度較快依賴現(xiàn)成無(wú)需重復(fù)構(gòu)建首次要全量編依賴時(shí)間翻幾倍與 MSVC 工程集成C ABI 可直接用C 接口需適配原生無(wú)縫調(diào)試體驗(yàn)最好可復(fù)現(xiàn)性高腳本化容易中依賴庫(kù)版本易變總體工作量低中高M(jìn)SYS2 的核心優(yōu)勢(shì)是把一整套 POSIX 生態(tài)平移到了 Windows 上。Poppler 的大量依賴——fontconfig、glib、cairo 這些——骨子里是為 Linux 設(shè)計(jì)的在 MSYS2 里它們的 pkg-config 文件現(xiàn)成CMake 或 Meson 能自動(dòng)找到所有依賴幾乎不需要針對(duì) Windows 做特殊適配。vcpkg 路線不是說(shuō)走不通而是你要為每個(gè)依賴分別編譯不同配置工程量明顯更大而且個(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 和依賴包一次配齊2.1 安裝 MSYS2 和基礎(chǔ)工具鏈MSYS2 的安裝本身沒(méi)什么門檻從項(xiàng)目官網(wǎng)下載安裝包一路下一步即可。裝完之后你會(huì)在開(kāi)始菜單里看到好幾個(gè)入口 shell包括 MSYS2 MSYS、MSYS2 MinGW64、MSYS2 MinGW32。這里藏著一個(gè)新手最容易踩的坑編譯 Poppler 以及它的絕大多數(shù)依賴必須用 MinGW64 那個(gè) shell因?yàn)槲覀円傻氖窃?64 位 Windows 程序。簡(jiǎn)單解釋一下這個(gè)環(huán)境的角色分工MSYS 環(huán)境像一層翻譯層提供 Unix 風(fēng)格的命令和路徑但它產(chǎn)出的程序帶有 MSYS 運(yùn)行時(shí)依賴脫離 shell 后在純凈 Windows 上很難跑起來(lái)。而我們真正要的是 MinGW-w64 工具鏈生成的原生程序所以一切操作都以 MinGW64 shell 為準(zhǔn)。很多人第一次在這里犯迷糊以為在哪個(gè) shell 里裝 gcc 都一樣結(jié)果編出來(lái)的庫(kù)要么是 32 位要么帶了額外的運(yùn)行時(shí)依賴后患無(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)建但它的某些輔助腳本和依賴構(gòu)建過(guò)程仍會(huì)調(diào)用這些 POSIX 工具缺了它們會(huì)在莫名其妙的環(huán)節(jié)報(bào)錯(cuò)到時(shí)候排查起來(lái)很頭疼。2.2 依賴包怎么選每個(gè)是干什么的Poppler 的構(gòu)建依賴可以分成三類核心渲染類、字體處理類、可選增強(qiáng)類。用 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ǔ)依賴 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 接口接入不裝的話得在配置階段關(guān)掉相應(yīng)選項(xiàng)。Cairo 是高級(jí)渲染后端pdftocairo 工具能把 PDF 頁(yè)面轉(zhuǎn)成 PNG、SVG、PS 等格式依賴的就是它。如果你只需要簡(jiǎn)單文本抽取這兩個(gè)確實(shí)可不開(kāi)但只要涉及把 PDF 頁(yè)面變成一張圖Cairo 和 GLib 就是標(biāo)配。裝完后順手驗(yàn)證一下依賴是否齊全pkg-config --modversion freetype2 fontconfig cairo glib-2.0 libopenjp2如果每個(gè)都輸出了版本號(hào)說(shuō)明依賴準(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 的安裝目錄指向別處的話優(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ì)第三方依賴的兼容性還沒(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 路線新版本直接上 Meson 更省心。下面兩條路線我都會(huì)講你按手里源碼的版本對(duì)號(hào)入座。3.2 老版本路線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ò)掃描類 PDF 全靠它。LCMS 是色彩管理做出版、設(shè)計(jì)類工具的務(wù)必開(kāi)普通辦公文檔場(chǎng)景關(guān)掉可以省兩個(gè)依賴。配置完成后CMake 會(huì)輸出一段報(bào)告列出啟用的組件花十秒鐘掃一眼確認(rèn)想要的都在里面。如果某個(gè)選項(xiàng)被標(biāo)成 disabled八成是依賴沒(méi)裝全回頭補(bǔ)裝對(duì)應(yīng)包重新配置即可。然后執(zhí)行構(gòu)建cmake --build . -j 6-j后面是并行任務(wù)數(shù)按 CPU 核數(shù)合理設(shè)置別盲目拉滿。編譯 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 新版本路線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 是用于訪問(wèn)遠(yuǎn)程 PDF 的選項(xiàng)絕大多數(shù)本地處理場(chǎng)景用不到關(guān)掉能少拉兩個(gè)依賴。Meson 有個(gè)非常實(shí)用的特性配置完成后會(huì)輸出一份詳細(xì)的功能檢測(cè)清單哪個(gè)庫(kù)找到了、哪個(gè)庫(kù)版本太老、哪個(gè)組件被強(qiáng)制關(guān)閉全部列得清清楚楚。如果某個(gè)你想用的功能旁邊標(biāo)著 NO順著它的依賴名補(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)建路線編譯過(guò)程中如果報(bào)錯(cuò)第一反應(yīng)別急著去搜索引擎復(fù)制報(bào)錯(cuò)原文先看報(bào)錯(cuò)發(fā)生在哪個(gè)階段。絕大多數(shù)問(wèn)題就兩類頭文件找不到、鏈接符號(hào)找不到。前者基本是依賴沒(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_*一類鏈接錯(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這里我想專門展開(kāi)一下undefined reference這類鏈接錯(cuò)誤。Windows 下用 MinGW 鏈接時(shí)庫(kù)的鏈接順序是敏感的被依賴的庫(kù)要放在依賴它的庫(kù)后面。Poppler 依賴數(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)題典型的就是兩類缺 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 程序名查看它依賴哪些 DLL然后從 MSYS2 安裝目錄的bin文件夾里把對(duì)應(yīng)文件拷貝到程序所在目錄。想省事的話也可以把所有 bin DLL 一股腦拷過(guò)去就是目錄會(huì)有點(diǎn)亂。字體找不到是更隱蔽的問(wèn)題。Poppler 渲染 PDF 時(shí)需要知道系統(tǒng)裝了哪些字體它在 Windows 上默認(rèn)通過(guò) fontconfig 做字體發(fā)現(xiàn)。fontconfig 依賴一個(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 路徑帶盤符和反斜杠路徑里有空格時(shí)QProcess 的 setArguments 方法會(huì)自動(dòng)處理引號(hào)但千萬(wàn)別手寫(xiě)拼參數(shù)字符串——引號(hào)轉(zhuǎn)義在 Windows 上非常容易出錯(cuò)這是老程序員踩過(guò)無(wú)數(shù)次的坑。另外pdftoppm 這類工具默認(rèn)把輸出寫(xiě)到當(dāng)前工作目錄如果程序啟動(dòng)目錄不是預(yù)期目錄輸出就會(huì)跑到奇怪的地方。穩(wěn)妥做法是每次調(diào)用前用 setWorkingDirectory 明確指定輸出目錄。還要特別注意一點(diǎn)在圖形界面程序里調(diào)用這些命令行工具時(shí)別在 UI 線程里同步等待。一個(gè)幾百頁(yè)的大 PDF 轉(zhuǎn)圖片可能要幾十秒界面直接卡死是用戶完全無(wú)法接受的。封裝成異步任務(wù)或者丟到線程池里體驗(yàn)會(huì)好很多。我用下來(lái)最順手的方式是 QtConcurrent 跑轉(zhuǎn)換邏輯配合信號(hào)槽把結(jié)果回調(diào)到 UI 線程刷新預(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ì)比能直觀看出渲染效果的差異。驗(yàn)收時(shí)有幾個(gè)重點(diǎ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)證類應(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 就不依賴一堆 DLL。代價(jià)是可執(zhí)行文件體積從幾 MB 漲到幾十 MB某些依賴回調(diào)插件的功能在靜態(tài)模式下不可用。我的習(xí)慣是給工具類程序做靜態(tài)編譯圖省事給庫(kù)文件做動(dòng)態(tài)編譯方便后續(xù)升級(jí)。編譯 Poppler 這事我第一次完整跑通花了兩三天最耗時(shí)間的其實(shí)不是執(zhí)行構(gòu)建命令的那幾分鐘而是反復(fù)在依賴版本、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)的依賴包把構(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
返回資訊列表
99热这里只有精品18| 国产精品秘 福利姬在线观看| 97碰碰色| 天美国产精品| 中文字幕一区二区视频在线观看| 午夜精品久久久久久久男人的天堂| 亚洲涩涩| 超碰国产精品久| 亚洲成?V人片在线观看福利| 国产精品久久久久久久久久久久久久久久| 精品视频一区二区| 91痴汉| 国产亚洲美日韩Aⅴ中文字幕无码成人| 亚洲性少妇| 亚洲AV操| 加勒比综合网| 97超碰国产亚洲精品| 女人高潮大叫一级毛片| 欧美懂色综合网| 欧美图片色综合| 十八禁av无码免费网站APP| 久操免费观看| 国产精品日日摸夜夜添骚逼| 一本大道久| 亚洲视频,小说| JIZZJIZZ国产精品喷水| 操逼啊啊啊91| 精品对白久久不卡| 香蕉综合网| 日韩欧美中文字幕搭讪巨乳美人妻视频| 九九九九88| 综合久久久久久久综合网| 日本不卡一二区| 久久久九九| 中文字幕一区 二区三四五 区日 日骚| 色网在线视频观看免费| 一级特黄aaa大片在线观看成人一级片在线观看 | 精品999一区二区| 99re这里只有精品2| 婷婷激情四射| 91骚妇| 国产又爽又黄| 婷婷五月天成人网| 无码精品人妻一区二区三区妖精| 日婷婷| 亚洲高潮影院| 天天射夜夜| 免费看污网址| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 欧美在线大香999| 四虎影视 亚洲无码| 97超碰总站| 久久久久久久久久久久久久9999| 亚洲密乳AV| 校园春色综合| 加勒比中文av| 99这里有精品| 久久久av爱| 欧亚不卡| 综合网亚洲| 93人人操人人| 亚洲av噜噜噜噜噜噜| 中文字幕aⅴ在线视频| 亚洲精品视频在线| 婷婷激情五月| 女人香蕉久久毛毛片精品| a在线视频免费观看| 草莓精品视频在线免费观看| 色九九九九| 天天干18禁| 久久超碰大香蕉| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 被男人吃奶很爽的毛片| 欧美色交| 爱丝福利| 一区二区激情国产熟女 | 五月天偷拍| 超碰1024久久| 日本阿v天堂在线观看| 国产一区二区三区,在线观看观看| 久久久婷婷| 亚洲天堂人妻熟妇视频| 国产理论视频在线播放| 乱论91| 色黄色美女大长腿午夜视频| 1024人妻熟女一区二区三区| 无码精品啪啪啪一区二区三区三州| 久久久久久久一级黄色打同平台| 91N五十路| www.狠狠| 日韩传媒在线| 色综合天天爱去电影网| 又黄又粗又硬又长又大| 夜夜嗨免费视频| 天天影视综合色| 国产精品一区二区黄片| 日本成人A片免费看| 秋霞午夜视频一区二区| 成人小电影网站tex| 91伊人| 91天美传媒在线观看| 亚洲偷拍自拍在线视频| 91n处女在线观看| 国产精品99久久久www| 91free福利| 国产这里只有精品| 美女黑人91神马| 少妇熟女视频一二三区| 在线洲亚线| 久久久久亚洲熟妇熟女| 无码操逼视频一下| 日本成人免费一区二区三区| 精品黑人一区二区| 97免费在线视频在线观看| 啊啊啊啊啊啊啊国| 97操综合| 自拍偷拍2025在线观看| 东京热av男人的天堂| 极品出轨视频网站| 婷婷中文网| 先锋音影AV| 久久产精品一区二区三区电影| 天天亚洲| 91超碰人人| 人妻无码一区二区三区久久99| 91麻豆天美| 无码日韩网站| 欧美天天综合站| 中国AV美女| 人妻天天爽夜夜爽精品2| 校园春色综合| 成人精品久久久午夜福利| www.97在线| 人妻天堂网| 亚洲国产精品久久久久久久久久| 少妇综合| 超碰这里有精品| 懂色av色欲av蜜臀av| 久久草视频污视频| av日韩在线观看电影| 肥臀熟女一区二区三区视频| 熟妇亚洲一区二区三区| 日韩性爱小视频在线观看| 国产欧美成人精品| 亚洲日本韩国极品一区二区| 精品无码久久久久久久杏吧| 欧美亚洲激情一二三| 日本人妻A片成人免费看片| 97色五月天完| 色欲无码人妻日韩欧美精品| 亚洲色交| 深爱伊人影院| 欧美精品久久96人妻无码| 粉嫩在线一区二区懂色| 成人无遮挡毛片免费看| 国产一二三福利视频网| 97一区二区三区视频| 大香蕉啪啪啪| 狠狠操夜夜| 懂色av一区二区三区天美传媒| 久久超碰98| 欧美精品1区2区3区| 丰满人妻被猛烈进入中| 中文字幕版| 日本亚洲嫩草影院啪啪| 欧美天堂第二区| 国产青一二三| 久久久久成人蜜桃精品| 久久东京热久久| 欧美A√综合网| 欧美日韩91| 免费中文在线| 欧美在线干| 欧美激情性爱视频网站| 一级做a爰片性色毛片久久| 少妇特黄一区二区三区| 啊啊啊啊啊啊啊网址在线观看| 国语对白在线播放视频| 欧亚在线视频| 色噜噜狠狠色综无码久久合欧美| 亚洲电影中字一区二区| 色香欲综合| 啊啊啊啊啊啊在线| 欧美一区二区福利在线| 黄页网站免费高清在线观看| 五月婷网站| 大香网站| 婷婷综合| 1二区9| 国产第二页| 天天综合网亚洲综合网| 91色宗合| 国产精品无套内谢| 婷婷丁香五月激情啪啪| 奸色色 男人天堂 天天射| 999 久久久| ...日韩成人一区二区三区字幕| 手机看片1024你懂的国产| 亚洲精品日日夜夜52| 欧美成人性爱视频大全| 久久久久久久78| 国产精品乱码久久久久久久| 天操老女人| 韩国一级做a久久久久| 天堂性色| 在线欧美69V免费观看视频| 啊…啊…操我用力操我| 5252色欧美在线男人的天堂| 91P0RNY大屁股人妻| 国产精品视屏| 青娱乐国产盛宴视频| 大香蕉伊人一区在线观看| 蜜臀va69| 91精品国产91熟女| 玖玖爱免费观看视频| 中文字幕av久久爽Av| 亚洲综合影片| 口爆综合网| 激情婷婷丁香网| 男人的天堂午夜av| 色偷偷色偷偷欧美日韩| 日韩三A大片在线观看| 国产精品乱码久久久、久久| 日本一区视频在线观看| 青青草无码视频| 亚洲无无码αⅴ每日更新| 欧美亚洲国产自久久| 一本色道综合久久欧美日韩精品| 精品国产自在在线99| 久久系列| 九九视品黄色| 国产一区二区三区白丝| 蜜屁Av| 亚洲阿v天堂无码z2018| 熟女高潮精品一区二区| 男人的天堂在线有码| 亚洲美女av无码| 91 国产丝袜在线放观看| 国产偷人伦激情在线观看| 日韩一区二区熟女| 91free福利| 夜色91| 亚洲欧美setu| h色99999| 国模吧 一区二区三区| 综合夜夜| 中国91AV| 青青操视频在线| 人妻加勒比东京热| 日韩欧美加勒比| 涩五月婷婷| 怡春院久久| 91色图片| 九九热免费国产视频婷婷伊人五月 | 天天看高清麻豆| 丝袜美腿校园春色| 五月天激情国产综合婷婷婷| 色色福利| 日本欧美一区二区三区免费| 中文字幕精品一区欧美| 夜夜爽夜夜爽| 人妻aa| 九九热九九| 超碰天天操你比| 亚洲日韩av一区二区三区百合| 亚洲成人一区二区精品| 日本日逼高清| 乱伦图av| 黄色小视频日本txt| 亚洲天天做日日做天天谢日日| 欧美亚洲图片| 亚洲欧洲日本精品中文a∨| 91美| 免费av在线播放二区| 欧美色性情| 韩日欧亚a级| 九九热国产| 九九九九一区| 亚洲男人的天堂va亚洲男人社| 99最新日韩偷拍视频| 亚洲熟女偷拍在线观看| 欧美97av| 无遮挡男女激烈动态图| 国产欧美精选激情视频| 大香蕉一人在线| 超碰综合97在线| 亚洲丝袜综合| 免费啪啪av| 国产成人bd在线观看| 围产精品一区二区三区视频播放| 在线人人人人人人精品超| 一级A片女人高潮叫床| 夜色AV无码手机在线影院| 久久精品电影| 先锋影音av先锋一区| 免费成人在线观看91| 午夜天堂啪啪| 欧美美女在线高潮999| 天天插夜夜爽| 水多多映视AV| 色五月婷婷久久| 久久久久久久78| 超碰天天去日穴| 一级岛国大片| 好看的91视频| 国产品精品自在在线午夜免费| 探花在线免费观看视频国产一区| 欧美日韩国产中文精品字幕自在自线,| 亚洲91色在线| 国产日韩无码一区二区三区久久区| 日韩精品一区二区日韩| 久久久熟妇熟女国产| 天久久久噜噜噜久久国产精品爽爽| 亚洲日韩人妻中文字幕一区| 九一亚洲国产免费| av黄图片在线观看| 亚洲色图激情小说| 91精品人妻一区二区三区蜜桃| 日本熟女免费視颖| 欧美日韩国产电影| 免费一级特黄特色大片在线观看看| 麻豆AV一区二区| 97国产超碰| 99色在线| 欧美1区二区三区公司| 欧美情色男人的天堂| 91在线视频国产网站| 婷婷色一区| JuliaAnn丝袜熟女系列| 蜜臀AV成人精品蜜臀AV久久| 无码动漫av中文字幕| 人妻一区久久二区三区色播| 日韩亚洲中文有码视频| 又黄又硬又粗又长国产视频| 91在线色综合| 国产精品点击进入在线影院高清| 亚州综合AⅤ| 97婷婷色| 操婢日韩| 思思久热在线精品66| 好湿好紧好爽 视频| 亚洲欧综合另类无码一区| 国产白丝网站| 91久久久老司机| 99热自拍| 青娱乐日韩无码| 亚洲激情在线观看一区| 91少妇人妻| 国产精品久久久久久久久久久久久久久| 久久久久九九九| 欧美日韩在线视频网站| 91色花堂| 亚洲精品乱码久久久久久蜜桃麻豆| 国产性刺激| 亚洲av无线观看| 一级黄色视频网| 天天综合网网欲色| 78精品在线| 偷拍亚洲情色| 久久人妻少妇| 婷婷人妻激情| 夜夜躁狠狠躁日日躁av| 欧美日本不卡在线| 九九热精品视频六| 丝袜美腿操av| 高清视频一区| 亚州欧美色图| 亚洲欧美成人网站AAA| 高清不卡 中文 人妻| 操香逼| 欧美性,亚州色| 啊啊啊好爽快点啊啊啊嗯嗯| 内射白嫩美女| 粉嫩少妇自慰在线| 伊人久久亚洲色欲综合网站| 快播久久人人aV| 好湿好紧视频| 欧洲在线性爱视频| 麻花传媒免费网站在线观看| 国产白嫩漂亮KTV在线| 无码黑人精品一区二区三区三| 操逼大黄片| 午夜福利免费精品视频| 五月天色综合| 1024手机看片欧美日韩| 青青青青青手机视频| 69精品| A级国产欧美激情在线| 欧美黄片视频在线观看免费| 日韩一级二级| 性爱AV天堂| 在线视频资源| 久久69精品久久久久久久| 亚洲综合九九| 骚女高跟AV在线| 天天噜| 2020中文在线一区二区三区| 亚洲天堂无码| 久久久久ab| 亚洲成人AB| 91被操| 91中文在线| 蜜臀无码一区二区| 亚洲制服aⅴ中文字幕| 五月婷婷色色| 欧美人妻一区二区| 免费久久一级毛片大黄| 热天堂一区二区| 97伦综合| av中文在线| 天堂麻豆天美| 大香蕉乱级| 欧美日韩m| 后入国产| 天天透伊人| 上床啊啊啊| 日日碰狠狠添天天爽超| 91青青在线| 激情综合婷婷| 国产精品96| 天天日天天插| 欧美伊人久久综合网| 吉川爱美98堂在线| 在线人成亚洲视频免费观看| 国产夜夜艹| 亚洲精品性爱片| 福利风月五月天影院| 天美传媒精品一区二区| 偷拍欧美激情| 国产精品亚洲一级av第二区| 偷拍2020| 丝袜美腿欧美| 国产女同视频在线播放| 久久是精品| 思思热在线观看| 成人五月天丁香激情综合| 色av中文字| 亚洲精品乱码线路中文字幕| 日夜尻逼网| 色色五月婷婷| 国产精品视频麻豆入口| 丰满人妻一区二区三区四区| 99re95| 五月综合久久| 人人操人人大香蕉| 摸奶性爱视频网站在线免费播放| 天天综合,91入口| 久都青青视频 | 新怡红院| 99精品人人爽| 久久久久9| 亚洲精品久久久久久久久豆丁网| 国产欧美一区激情交| 三级特黄60分钟播放| 欧美劲爆第一页| 少妇内射视频| 超碰欧美COM| www.91欧美| 国产a级精品| 少妇99成人麻豆| 国产黄色av大片网站| 免费啪啪av| 中文字幕av亚洲精品| 91精品国产91久久久久久久久久久久| 9 7超碰在线免费观看| 亚洲精品视频二区| 激情婷婷五月天| 岛园激情| 日本丝袜人妻内射| 日韩一级成人毛片免费观看 | 成人情色综合网| 欧美淫乱视频| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 97久久精品不卡| 九九九精品一区二区无码| 屌妞视频久久久久久久久久久久| 久草精品国产蜜臀| 亚洲资源网| 日韩无码服务区| 青青五月天| 人人人干干人人干| 东京热视频网| 亚洲精品无码成人久久久99| 骚人妻少妇视频| 少妇毛片久久| 日韩人妻网站| 精品久久久久久AV无码| 在线观看一卡二卡| 欧美精品二区视频在线| 欧美色图中文字幕| 睡产熟女乱伦| 国产精品欧美在线观看 | 亚洲高清男人天堂| α√在线| 亚洲阿v天堂在线| 人妻熟妇久草在线| 人妻碰碰碰碰碰碰| 人人操人人操人人操人人操人人操人人人11.CM | AA特级绝黄| 中国91AV| 99色骚| 精品久久久久久亚洲| 亚洲伊人久久综合97| 久久↗↗| 青草香蕉网| 亚洲精品 大香蕉| ,成人免费啪啪视频| 国产精品久久泡妞网站| 久久久国产精品人妻丝袜| 激情综合五月| 精品人体无圣光凹凸| 九九热免费国产视频婷婷伊人五月| 婷婷五月天综合网| 91免费看中出视频| 精品国产91久久久久久一区黄无| 国产午夜在线观看| 美女黄站| 高清国产精品福利网站| 亚洲婷婷综合网| 欧美日韩激情无码专区| AAAAAAAAA黄片| 97干97色| 果冻传媒A片一二三区| rion磁力链接| 日日躁天天躁狠狠躁| 午夜激情床戏激情| 国产精品色色| 亚洲少妇喷视频看| 欧美男人一区| 依人大香蕉| 超碰久久中文| 超碰 av 女人天堂| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 97国产中文| 欧美亚洲宗合色性图| 欧美中字二区| 亚洲清纯唯美| 96精品久久| 欧美黄色手机在线观看| 日韩性爱免费观看视频| AAAAAAAAA黄片| www.色婷婷色综合| 激情网五月天| 国产专区路线| 久久中久文96| 天天看天天日| 台湾成人无码AV| 大香蕉黄色一区| 91N欧美| 99在线视频播放| 国产国产亚洲一二三久久| 亚洲揄拍网| 91精品人妻一区二区三区蜜臀| 久久亚洲熟妇在线视频| 色狠狠综合噜一二三区| 白丝1区2区3区| 午夜亚洲WWW湿好大| 五月天色综合| 欧美97在线欧| 久久久影院| 一区二区三区免费视频入口| 3P乱轮视频| 午夜a成v人电影| 精品超碰国产| 国产理论视频在线播放| 大香蕉78| 精品无码久久久| 国产日比| 久色99999| 亚洲精品一二牛牛| 婷婷激情四射| 熟妇高潮二区三区| 青青伊人这里只有精品| 情色av电影| 东京热一区二区中文字幕| 日本 欧美 国产一区| 久久精品99久久久久久| 色翁荡息又大又硬又粗又爽| 久久精彩视频9| 99久久99久久免费精品蜜臀| 婷婷99狠狠躁天天躁| 97在线播放| 天天爽夜夜操| 天美传媒婬乱在| 国产精品一二三区福利| 欧美天天弄| 精品久久久久瑟瑟| 亚洲āv网址在线观看| 99国产精品久久久久久久成人热| 在线视频97| 久久夜嗨| 大色综合网| 欧美三四五区| 老女人爆菊| 国产精品亚洲高清在线| 午夜福利在线合集| 久久婷婷五月综合| 欧美Ⅴ性爱| 女性91网站| 18禁久极品美女久久哦哟呀!| 中精品一区二区三区| 神马久久午夜| 婷婷久久综合久| 五月天伊人| 婷婷五月天AV| 综合久久婷婷| 干婷婷综合网| 女人被添高潮免费视频| 国产综合网站在线播放| 欧中美三级一区二区三区| 日本久久女同性恋视频| 天堂俺去俺来也www久久婷婷| 日韩精品视频在线观看一卡二卡| ,国产乱人伦精品一区二区三区| 久久这里| 日本操逼视频在线| 六月激情婷婷| 粉嫩久久久久| 立川理惠被中出无码| 黄片aaaaa一区| 嗯嗯啊啊用力视频免费| 蜜臀久久99精品久久久久久成人小说 | 九九AV| 日本人人操人人操| 香蕉久久精品| 中文字幕一区二区视频在线观看| 欧美性爱系列| 久久日本熟女精品一区| 人人操人人93| 久久久精品国产亚洲伊人| 国内一区二区三区| 黄片com.| 亚洲欧洲色情高清| 人人看黄色视频| 欧美亚洲性爱一区二区| 不卡视频一区蜜桃视频| 99久久9| 亚洲成人帖图| 图片区小说区| 精品二区三四区五电影| 日欧亚洲二三区大片不卡| 久偷拍| 98人妻精品一区二区色欲| 天天影视网综合少妇| 色老大| 久久五月丁香| 人妻精品一区二区三区| 色九九综合| 中文字幕一区二区无码成人| 乱老女人一区二区视频| 欧洲一区二区| 日韩中文欧美| 中文久久久| 日本淫色网| 97色伦97色伦国产欧美| 一区 欧美 日韩 麻豆| 日韩操p| 91在线丝袜视频| 亚洲自拍天堂| 欧美在线综合| 婷婷久久五月| 丰满少妇一区二区三区免费看| 男人的天堂啪啪啪啪啪蜜桃不卡| 国产传媒一区二区三区| 午夜久久一区二区无码中出| 91人精品妻入口| 欧美乱妇狂野欧美在线视频| 在线观看色视频| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 99久热| 色吧5亚洲| 97一区二区三区视频| 操逼操操操91| 激情综合网激情综合| 精品一区二区三区四区女 | 蜜臀一二三区| 99re这里只有精品中心播放| 18啪啪手机免费性爱| 老鸭窝日丰县女人| 日本在线一二| 在线观看不卡一区二区三区| 97视频在线观看网站| 男人的天堂啪啪啪啪啪蜜桃不卡| J?P?NESEHD熟女熟妇伦| 亚热日本熟女| 人妻啊啊人妻啊啊| 精品亚洲国产成人精品| 992视频一区| 婷婷激情一区二区三区俺也去| 国产成人亚洲精品无码古代早漏男| 蜜臀在线网站| 国产a级精品| 欧美精品久久久久久久久88| 欧美资源| 日本道日本道中文字幕日本道最新日本道在线观看 | 台湾成人无码AV| 亚洲一区二区av| 久久久久亚洲精品| 久久极品一区二区| 国产熟女完整版中字 | 久久色激情一区二区三区| 口爆吞精在线观看| 久久超碰国产一区二区三区| 欧美激情一| 97亚洲资源| 蜜臀av一区二区三区免费观看| 人人看人人爰人人操| 青草成人免费视频一COm| 日本久久999| 亚洲男人的天堂一区二区| 欧美黄色片AAAAA| 一级性爱啪啪视频| 久久久久9999| 久久在肏| 99在线精品观看视频中文| 一牛一区二区三区久久| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 日日噜噜夜夜狠狠视频无| 亚洲人码13| 日韩天堂av电影在线观看| 国产精品熟女丝袜一区二区| 91精品国产日韩欧美综合| 综合伊人网12色| 人妻天堂网| 熟妇人妻一二三区免费| 欧美激情久久久久| 欧美大战久久久伊人| 亚洲男人天堂2012| 北条麻妃99精品青青久久| www.zbzhongsen.com| 亚洲砖码砖专无区2023| 九九干| 天天色,天天干,天天干| 最新av中文字幕高清| 亚洲精品国语在线播放| 无码人妻一区二区三区免费九色| 这里都是精品| 嗯嗯不要视频| 大香蕉淫人| 96超碰网| 色色九区| 大奶的诱惑| 夜色综合| 91丨人妻丨国产丨丝袜| 97久久国产| 97超碰日韩| 久久这里只有精品9| 男人的天堂Va| 风韵犹存大大大大香蕉 | 亚洲激情久久| 人妻少妇一区二区| 爱爱动态120秒| 加勒比无码一区二区三区| 蜜臀av一区二区三区免费观看| 色优久久| 久久国产精品一级二级三级| 欧美熟爽综合| 亚洲国成人情色好看电影| 欧洲射精91| 在线97在线| 亚洲青色欧美| 九九九九九九九| 精品丰满熟妇人妻一区| 99热这里都是精品| 亚洲图片欧美| 少妇熟女1区2区3区| 日韩黄色片子| 少妇高潮对白在线观看| 国内精品伊人久久久久影院会| 国产亚洲国产超碰| 亚洲男人bt天堂| 国产一区麻豆免费观看| 青娱乐手机日韩在线视频| 偷拍片久久| 青青草原伊人网| 蜜桃狠狠色伊人亚洲综合网站| 亚洲成人黄色在线观看| 国产精品自在线发布| 亚洲自拍一区夜夜操| 9999亚洲电影| 中文字幕第7页| 国产精品999aaa| 日韩Va亚洲va欧美Ⅴa久久| 极品尤物在线观看| 厕所偷拍在线| 狠狠爱AV| av亚欧| 在线视频日韩欧美国产| 青青草九九九九九| 曰韩少妇无码| 午夜精品久久一区二区| 成人aⅴ一区二区三区| 久久久精品国产亚洲AV无码| 国产精品一二三区福利| 亚洲 欧美日韩 另类| 婷婷日韩一区二区三区中文字幕在线| 60秒试看最爽10分钟网站| 久久国模av| 熟妇女伦乱视频| 久久 国产 无码| 色五月网址| 97这里都是精品| 欧美姓爱综合网| 精品在线观看视频在线| 欧美大香蕉在线观看| 久热这里| 亚瑟国产精品久久无码| 爽爽淫人网| 亚洲drav色图| 成人97人人超碰人人| 激情专区综合| 欧美熟女逼久久久久久| 97免费视频在线观看| 日韩欧美字幕亚洲一区二区| 粉嫩AV一区夜夜嗨| 超碰99re| 九九色综合| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 啊v在线观看视频| 精品国产久热在线观看| 国产女同性恋视频| 凹凸视频在线一区二区| 丁香五月天堂网| 亚州五月| jizzjizz欧美| 色综合99999| 成人麻豆av电影网站| 又黄又爽在线观看视频 | 国产黄色 A 片免费看| 精品国产72| 水多多映视AV| 久久久啊啊| 96一区二区| 亚洲情色第一页| 东北女人操逼| 亚洲性爱高潮影院| 精品黄色电影| 精品久久視頻在线| 亚洲综合影院| 婷婷综合激情| 美女啊啊啊啊啊啊| 欧美视频在线第3页| 九九热精品视频六| 水澄无码AV| 色九久| 国产精品久久发布| 人妻干天天| 日韩av在线精品观看| 曰韩欧美国产传媒麻豆第一区| 美女十八禁| 婷婷日韩一区二区三区中文字幕在线| 亚春色色| 国产亚洲 中文欧美久久| 国产精品自拍视频| 午夜激情床戏激情| 翔田千里AⅤHD无码| 男人的天堂色偷偷青青草视频婷婷网| 国产美女自拍AV| 丝袜夫妻自拍| 自怕偷自怕亚洲精品| 欧美综合网1| 国产精品宅男免费| 日本熟妇人妻一区二区三区| 亚洲五月天激情| 日韩一级久久毛片| 欧美在线视频播放| wwwcaobibi| 91天堂| JULIA人妻风俗店中出电影| 一区二区免费电影久久| 大香蕉欧美国产日韩高潮| 黄片在线免费在线观看| 伊人久久AV诱惑悠悠| 国产伦精品免编号公布| 黄色激情电影在线观看| 91日日夜夜| 久久日韩毛| 美国aaaaa一级黄片| 日日躁天天躁狠狠躁| 高清不卡国产| 亚洲一卡2卡3卡4卡乱码网站| 一本大道青青| 亚洲天堂久久| 亚洲国产欧美一区二区潘金莲| 国产AV天美传媒一区二区三区| 综合婷婷| 亚洲精品国产专区在线观看| 情色大香蕉| 日日黄色三级网站| 亚洲精品一区中文字幕乱码| 久久久久久人妻一区精品色欧美| 91在线观看,天天综合| 伊人久久青青草| 超碰成人国产| 少妇啪啪自拍| AV女优男人的天堂| 啊啊啊好疼| 毛片视频白嫩| 久久激情视频| 国产三区免费在线观看| 亚洲爽图| 91美女视频。| 久久香蕉超碰97国产精品| 日韩成人网址| 天天草夜夜草高潮片| 青娱乐妇女性生活| 91久久久久久久| 啊啊啊啊啊在线观看网址 | 嗯嗯啊啊好大好爽| 怡红院怡春院| 亚洲最大91网| 丁香五月综合| 亚欧性爱无码| 99re这里只有精品2| 久久美国毛片| 欧美 日韩 另类 亚洲| 久久性爱视频| 午夜大香蕉| 亚洲福利中文字幕在线| 亚洲国产ⅴ高清在线观看| 亚洲无码视频免费在线观看网址!| 久久精品综合| 97爱啪| 日本最新1区2区3区| 91在线色| 青青草大香蕉在线视频| 四月丁香婷婷| 久久久com| 精人妻一区二区三区| 亚洲综合小视频小说在线观看| 夜夜高潮夜夜爽高清视频一| 久操黄色视频| 中文字幕精品一区二区精品| 婷婷五月成人| 日韩无码专区| 亚洲激情网一二三四区| 67914亚洲精品| 伊人五月天| 人妻激情另类| 91精品黄在线观看| 日本99久久| 天天天天操| 婷婷丁香五月综合| 欧美拳交在线播放| 九九久久一区二区三区| 你操综合| 欧美超碰96| oumeisetu综合| 国产精品经典一卡久久久 | 亚洲AV无码久久精品蜜桃小说| 中文字幕少妇色 | 亚洲欧美国产中文字幕| 性性欧美| 五十路人妻在线| 97在线播放 | 亚洲一本大道中文字幕无码在线| 男生女生啊啊啊啊| 久久久久久久久久久999| 久久久专区| 国产熟女少妇一区| 午夜天天碰综合视频| 97天天做| 久久久少妇诱惑精品视频| 亚洲中文sv| 蜜臀久久99精品久久久久久婷婷| AAAA级日本片免费视频| 久久日韩精品一区二区| 操逼片中文| 欧美丰满熟妇XXXX性ppX人交| 五月天色五月| 日韩精品熟妇| 麻豆天美在线喷水AV| 欧美高清16| 熟妇xxxxx性春色| 日本天天操| 嗯嗯啊啊视频在线看| 亚洲 欧美 小说| 欧美人妻另类在线| av三级电影在线播放| 欧美色就是色| 国产综合网站在线播放 | 五月婷婷AV| 超91综合网| 青青欧洲黑| 综合色好色| 国产亚洲性生活视频播放| 九九性爱网| 99在线精品视频| 亚洲Av噜噜一区二区三区妖精| 亚洲春色欧美| 亚洲国产一级黄色视频| 国产又操| 欧美日韩一干二干| 亚洲资源吧| 欧美少妇一区二区三区| 东京热熟女亚洲视频网站| 蜜区区视频79 | 国产毛片片精品天天看视频| 美女写真| 日本女厕偷拍| 狠狠色五月亚洲91| 黄页视频网站野外| 色91综合网| 婷婷人妻激情| 加勒比在线视频一区二区三区| 欧美黑人猛交春色影视大全| 秋霞福利网| 色哟哟AⅤ| 欧洲色| 97欧美日韩中文| 成人小说另类在线| 在免费jIzzjIzz在线视频| 任我爽视频在线观看| 天堂亚洲精品| 国产精品极品美女视频| 久久精品老司| 国产精品白领在线观看| 丰满的三级少妇欧美久久久| 日韩精品电影| 日日夜夜精品| 德国一二三不卡| 九七超碰| 久久亚洲不卡| 91亚洲网站| 成人黑料社久久| 久草久日| 日日日日做夜夜夜夜无码| 日日天天久久啊啊aaa| 狠狠操狠狠操操| 色婷婷电影| 91亚洲图片| 久久天堂婷婷网| 色欲色香天天天综合网www-亚洲综合国| 国产v亚洲v日韩v欧美v片另类| 婷婷在线播放| 精品少妇高潮久久| 欧美性爱另类综合| 天天影视91看看| 免费一级特黄特色大片在线观看看| 亚洲色图a| 日韩免费三级黄片电影| 91 亚洲 欧洲| 伊人天天久久动态图| 欧美亚涩| 超碰色综合| 老女人爆菊| 国产精品内射婷婷一级二| 800zy一区二区| 97免费在线视频| 色婷婷综合久久久久中文一区二区| 国产一区二区三区高清视频| 天综合网| 免费av在线播放二区| 色色色色色色色色综合| 高清无码在线播放网站| 久久精品视频一区三区小泽玛利亚| 91小视频| 少妇人妻在线| 99热精品免费| 日韩操啪| 绑缚麻绳人妻寝取完整版| 欧美极品性爱天天射| 91精品少妇搡搡搡| 成人三级片无码| 色欧美综合| 国产精品视频播放| 久久精品国产亚洲AV高清演员表| 欧美72网页| 国产AV超爽| 校园春色综合网| 91久久久视| 亚洲欧洲综合视频在线| 日日骚中文字幕| 日本天堂网| 国产三区免费在线观看| 一区二区三区不卡视频| 国产天天骚| 国产尤物AV尤物在线观看不卡| 91色插| 日本少妇va7777| 美国一区二区免费视频| 射综合网| 久草精品一区 | 天美传媒AV在线| 色五月69夫妻| 亚洲成?V人片在线观看福利| 免费人成毛片乱码| 久久综合av| 天天看天天综合成人网| 奇米狠999| 五月丁香色综合| 激情小说日韩无码| 亚洲第一视频 欧美风情 日韩| 91暧暧| 黄网色一区二区三区四区精品| 看全色黄大色大片免费视频| 一区二三区四区视频大全套| 日韩精品中文字幕一| 亚洲在线| 大香蕉中文网| 综合欧美日韩在线| 久久超碰久| 九九黄色视频在线观看| 中文字幕乱码人妻二区三区| 91黄射| 99热18这里只有精品| 中文字幕丝袜人妻| av天堂影视中文在字幕在线中文 | 天天色,天天干,天天干| 欧美天天综合| 人人操人人操人妻人| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚| 丁香六月婷婷综合| 99re综合伊人| 国产97亚洲| 青青操在线亚洲视频观看欧美在线| 亚洲综合精品国产一区| 最新亚洲人成网站在线影院| 国产精品久久久久久久久久久久| AV99热18这里只有精品| 78p欧美| 九九热男人天堂| xxx0国产在线播放| 秋霞一级A片黄色视频| 久久久久久网址| 日本大香蕉综合网| 亚洲欧美啪啪| 亚洲一区制服诱惑| 五月天加勒比啪| 97bbn| 九九热超碰97亚洲最新香蕉| www.97在线| 国产怡红院| 日韩AV电影网站| 人妻少妇精品一区二区三区| 九九av| 91oumei| 亚洲va综合va国产va中文| 9久久精品| 狠狠狠狠狠狠| 在线黄页看毛片| 五月婷婷综合在线| 欧美后进式| 久久久影院| 五月婷婷色色| 久久极品一区二区| 天天操女人| 天天日天天舔东京热| 旡码电影特区| 一区 欧美 日韩 麻豆| 91处女视频在线观看| 一区二区三区成人| 精品二999| 俺也射| 大香蕉日韩| 久草午夜| 中日韩免费看男女操逼大全| 男女猛烈无遮掩视频免费软件| 少妇人妻好深太紧了vr91|