IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Window下编译qtpdfium -> 正文阅读

[C++知识库]Window下编译qtpdfium

系统环境:windows11

Qt版本:Qt5.15.2

源代码路径:https://codeload.github.com/kkzi/qpdf/zip/2681018e300738d6da9a9f89f06c93fc3ef17831

下载下来后,直接用MSVC2019编译器的CMake环境编译,顺利通过。但是使用Mingw编译器编译的时候,却出现了一堆错误。错误就不截图了,现在已经把坑全部填平,懒得再返回去了。接下来直接贴出要修改的地方

1.修改qpdf\CMakeLists.txt

#在代码
set(CMAKE_DEBUG_POSTFIX d)
#后面,添加下面代码

if(CMAKE_COMPILER_IS_GNUCXX)
    set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}") #设置编译C++文件时,使用c++11
    message(STATUS "optional:-std=c++11")
endif(CMAKE_COMPILER_IS_GNUCXX)

IF (WIN32)
    MESSAGE(STATUS "Now is windows")
    add_compile_options(-shared -fPIC) 
ELSEIF (APPLE)
    MESSAGE(STATUS "Now is Apple systens.")
ELSEIF (UNIX)
    MESSAGE(STATUS "Now is UNIX-like OS's. Including aPPLE os x  and CygWin")
    add_compile_options(-std=c++11 -shared -fPIC) #linux下必须要添加编译选项-fPIC,要不然提示错误
ENDIF ()

?2.修改qpdf\src\3rdparty\CMakeLists.txt

#注释掉下面代码
#if(MSVC)
#    list(APPEND PDFIUM_SOURCES
#        pdfium/core/fxge/win32/fx_win32_device.cpp
#        pdfium/core/fxge/win32/fx_win32_dib.cpp
#        pdfium/core/fxge/win32/fx_win32_dwrite.cpp
#        pdfium/core/fxge/win32/fx_win32_gdipext.cpp
#        pdfium/core/fxge/win32/fx_win32_print.cpp
#    )

#    list(APPEND PDFIUM_HEADERS
#        pdfium/core/fxge/win32/dwrite_int.h
#        pdfium/core/fxge/win32/win32_int.h
#    )
#endif(MSVC)

#添加下列代码
IF (WIN32)
    add_definitions(-DCOMPILE_SAL_MINGW) #增加预编译宏,等下在代码修改里要用到
    MESSAGE(STATUS "Now is windows")
    list(APPEND PDFIUM_SOURCES
        pdfium/core/fxge/win32/fx_win32_device.cpp
        pdfium/core/fxge/win32/fx_win32_dib.cpp
        pdfium/core/fxge/win32/fx_win32_dwrite.cpp
        pdfium/core/fxge/win32/fx_win32_gdipext.cpp
        pdfium/core/fxge/win32/fx_win32_print.cpp
    )

    list(APPEND PDFIUM_HEADERS
        pdfium/core/fxge/win32/dwrite_int.h
        pdfium/core/fxge/win32/win32_int.h
    )

ELSEIF (APPLE)
    MESSAGE(STATUS "Now is Apple systens.")
ELSEIF (UNIX)
    MESSAGE(STATUS "Now is UNIX-like OS's. Including aPPLE os x  and CygWin")
ENDIF ()

3.修改代码:qpdf\src\3rdparty\pdfium\core\fxge\win32\fx_win32_dwrite.cpp?

#
# 修改函数:HRESULT(__stdcall* FuncType_DWriteCreateFactory)为下面
# 大概位置14行
#

#ifdef COMPILE_SAL_MINGW
typedef HRESULT(__stdcall* FuncType_DWriteCreateFactory)(
    _In_ DWRITE_FACTORY_TYPE,
    _In_ REFIID,
    _Out_ IUnknown**);
# else
typedef HRESULT(__stdcall* FuncType_DWriteCreateFactory)(
    __in DWRITE_FACTORY_TYPE,
    __in REFIID,
    __out IUnknown**);
#endif

#
# 修改函数:HRESULT STDMETHODCALLTYPE DrawGlyphRun(const FX_RECT& text_bbox为下面
# 大概位置120行
#

#ifdef COMPILE_SAL_MINGW
  HRESULT STDMETHODCALLTYPE DrawGlyphRun(const FX_RECT& text_bbox,
                                         __in_opt CFX_ClipRgn* pClipRgn,
                                         __in_opt DWRITE_MATRIX const* pMatrix,
                                         FLOAT baselineOriginX,
                                         FLOAT baselineOriginY,
                                         DWRITE_MEASURING_MODE measuringMode,
                                         _In_ DWRITE_GLYPH_RUN const* glyphRun,
                                         const COLORREF& textColor);
# else
  HRESULT STDMETHODCALLTYPE DrawGlyphRun(const FX_RECT& text_bbox,
                                         __in_opt CFX_ClipRgn* pClipRgn,
                                         __in_opt DWRITE_MATRIX const* pMatrix,
                                         FLOAT baselineOriginX,
                                         FLOAT baselineOriginY,
                                         DWRITE_MEASURING_MODE measuringMode,
                                         __in DWRITE_GLYPH_RUN const* glyphRun,
                                         const COLORREF& textColor);
#endif



#
# 修改函数:STDMETHODIMP CDwGdiTextRenderer::DrawGlyphRun(为下面
# 大概位置431行
#

#ifdef COMPILE_SAL_MINGW

STDMETHODIMP CDwGdiTextRenderer::DrawGlyphRun(
    const FX_RECT& text_bbox,
    __in_opt CFX_ClipRgn* pClipRgn,
    __in_opt DWRITE_MATRIX const* pMatrix,
    FLOAT baselineOriginX,
    FLOAT baselineOriginY,
    DWRITE_MEASURING_MODE measuringMode,
    _In_ DWRITE_GLYPH_RUN const* glyphRun,
    const COLORREF& textColor) {
# else
STDMETHODIMP CDwGdiTextRenderer::DrawGlyphRun(
    const FX_RECT& text_bbox,
    __in_opt CFX_ClipRgn* pClipRgn,
    __in_opt DWRITE_MATRIX const* pMatrix,
    FLOAT baselineOriginX,
    FLOAT baselineOriginY,
    DWRITE_MEASURING_MODE measuringMode,
    __in DWRITE_GLYPH_RUN const* glyphRun,
    const COLORREF& textColor) {
#endif

?4.修改代码qpdf_cmake\src\3rdparty\pdfium\core\fxge\win32\fx_win32_gdipext.cpp


# 694行

m_Functions[i] = GetProcAddress(m_hModule, g_GdipFuncNames[i]);

# 修改成

m_Functions[i] = (void*)GetProcAddress(m_hModule, g_GdipFuncNames[i]);


# 709行

GetProcAddress(m_GdiModule, "AddFontMemResourceEx");

# 修改成

(void*)GetProcAddress(m_GdiModule, "AddFontMemResourceEx");


# 711行

GetProcAddress(m_GdiModule, "RemoveFontMemResourceEx");

# 修改成

(void*)GetProcAddress(m_GdiModule, "RemoveFontMemResourceEx");

?修改完毕,可以执行run cmake,build,run,然后就可以打开pdf啦。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:11:57  更:2022-04-24 09:12:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 21:47:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码