如何在iOS项目中集成MuPDF 1.3

3
iOS内置了PDF渲染引擎,但是它无法解决"透明度平铺"的问题。因此,我尝试将MuPDF 1.3集成到项目中。 我尝试引用MuPDF项目,但失败了。 然后我为每个架构构建了调试静态库,并在构建不同架构的二进制文件时使用"Library Search Paths"和"Other Link Flags"来分离链接的库,但XCode仍然显示"Undefined symbols for architecture armxxx"。 最后,我构建了发布版本的MuPDF静态库,应该兼容所有架构,但XCode仍然显示与以前相同的问题。 有没有人成功地集成和编译过MuPDF 1.3?请给我一些提示。 非常感谢。

你解决了这个问题吗? - Bagusflyer
是的,我已经构建了MuPDF的发布版本静态库,并将其与所有第三方要求和“JavaScriptCore.framework”一起添加到“链接二进制文件库”中。 - Steven Huang
2个回答

1

当我使用这个CocoaPod时,仍然会收到这个错误消息:“您必须使用启用了位码的Xcode设置(ENABLE_BITCODE)重新构建它,从供应商获取更新的库或为此目标禁用位码。对于架构arm64”,当运行“pod install”时。我更改了位码设置,但没有任何变化,仍然是同样的错误...如果您知道我还能尝试什么,我会非常感激。 - Tunerx
1
@Tunerx 我刚刚推送了一个新版本的pod(1.8.1),它引入了mupdf的1.8版本,这解决了那个问题。(我的答案链接的示例应用程序也已更新,并且现在可以使用位码进行构建。) - JosephH
@JosephH - 这个库支持Swift吗? - Mak13

1

抱歉回答晚了,但这可能会在将来有助于他人。由于我需要将MuPDF库集成到我的(Swift)项目中,我生成了静态fat库并将其集成到Xcode中。

以下是一份逐步快速教程:

如何构建静态fat库:

  1. git clone --recursive git://git.ghostscript.com/mupdf.git
  2. 进入 mupdf/platform/ios 目录
  3. 使用 Xcode 打开 MuPDF.xcodeproj 文件。
  4. 将 MuPDF 目标的 scheme 配置为 Release
  5. 在 iPhone 模拟器上构建并运行应用程序。
    • 这将生成适用于平台 i386x86_64 的库。
  6. 在真实的 iPhone 设备上构建和运行应用程序 - 使用您自己的 bundle id、证书和配置文件。
    • 这将生成适用于平台 armv7arm64 的库。
  7. 进入 mupdf/build/ 目录
    • 您将找到两个包含所有构建库的文件夹:release-ios-i386-x86_64release-ios-armv7-arm64
  8. 现在,您需要创建带有所有 4 种架构的 fat 库,以及 mupdf 和其所有依赖项的库。
以下是代码,用于将MuPDF集成到您的项目中:

lipo -create ./*/libcurl.a -output 'libcurl.a' ; lipo -create ./*/libfreetype.a -output 'libfreetype.a' ; lipo -create ./*/libjbig2dec.a -output 'libjbig2dec.a' ; lipo -create ./*/libjpeg.a -output 'libjpeg.a' ; lipo -create ./*/libmujs.a -output 'libmujs.a' ; lipo -create ./*/libmupdf.a -output 'libmupdf.a' ; lipo -create ./*/libopenjpeg.a -output 'libopenjpeg.a' ; lipo -create ./*/libz.a -output 'libz.a'

请注意保留HTML标签。
  1. 将以下文件添加/导入到您的项目中:
    • mupdf/include/mupdf中的所有头文件
    • mupdf/platform/ios/classes中的所有obj-c类
    • mupdf/platform/ios中的common.[h,m]文件
  2. 添加/导入之前生成的fat库(8个文件)
  3. 通过添加路径到您的库文件来配置Library Search Path
    • 例如:$(inherited) $(PROJECT_DIR)/External/MuPDF/lib/

现在,您应该能够构建并运行包含库的应用程序。 使用示例项目了解库的工作原理或任何在线教程。

专业提示:

最终的fat库总体上很大(约46mb)。 您可以轻松地通过导入以下内容来减小应用程序的最终大小:

  1. 在一个发布文件夹下,只有来自 mupdf/build/release-ios-armv7-arm64 的 lib.a。
  2. 在一个调试文件夹下是来自 mupdf/build/ 的大型生成的通用库。
  3. 为不同的 DebugRelease 配置设置不同的 Library Search Path

完成后,您将能够在每个模拟器和设备上Debug构建和运行。但只能在设备上进行Release。最终,您需要将您的应用程序通过AppStore发布,它只能在真实设备上运行。没有必要包含调试模拟器架构的静态库。

这是我Xcode项目中所有导入文件的截图:

enter image description here


你尝试过使用CocoaPods导入它吗?Joseph上面的例子看起来不错,但我正在尝试使用Swift,但是我无法弄清楚如何做。 - Henrique da Costa
嗨,实际上我没有时间,而且Joseph在我还得处理MuPDF之后才发布了这个pod。 PS:我在一个Swift项目中集成了MuPDF,它运行良好 :) - Kevin Delord

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接