【问题标题】:Import itext-7 in android gradle在 android gradle 中导入 itext-7
【发布时间】:2017-09-22 06:46:51
【问题描述】:

在gradle中添加以下内容后,我正在尝试将itext-7添加到android

编译'com.itextpdf:root:7.0.0'

我仍然找不到 itext 的类,例如 PDFWriter 等。

如果有适用于 Android 的 itext-7 的单独版本以及如何添加它,请告诉我。

P.S:我已经成功添加了 itext-5,但我现在想使用 itext-7

【问题讨论】:

    标签: android pdf gradle itext itext7


    【解决方案1】:

    根工件只是一个父 pom,根本不包含 iText 7 类。

    如果您想包含所有 iText 7 Core 功能,您应该尝试

    compile 'com.itextpdf:itext7-core:7.0.2'
    

    如果这不能开箱即用(例如,由于 Android 中缺少 Java 类),或者如果您只是想要更精简的安装,请注意,与 iText 5 相比,较新的 iText 7 不是作为一个大 jar 分发的但作为一组模块。

    对于 Maven,您将使用以下依赖项(或更可能是它们的子集);您可以轻松地从它们构建 gradle compile 语句:

    <dependencies>
    
        <!-- always needed -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>kernel</artifactId>
            <version>7.0.2</version>
        </dependency>
    
        <!-- always needed -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>io</artifactId>
            <version>7.0.2</version>
        </dependency>
    
        <!-- always needed -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>layout</artifactId>
            <version>7.0.2</version>
        </dependency>
    
        <!-- only needed for forms -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>forms</artifactId>
            <version>7.0.2</version>
        </dependency>
    
        <!-- only needed for PDF/A -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>pdfa</artifactId>
            <version>7.0.2</version>
        </dependency>
    
        <!-- only needed for digital signatures -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>sign</artifactId>
            <version>7.0.2</version>
        </dependency>
    
        <!-- only needed for barcodes -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>barcodes</artifactId>
            <version>7.0.2</version>
        </dependency>
    
        <!-- only needed for Asian fonts -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>font-asian</artifactId>
            <version>7.0.2</version>
        </dependency>
    
        <!-- only needed for hyphenation -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>hyph</artifactId>
            <version>7.0.2</version>
        </dependency>
    
    </dependencies>
    

    (developers.itextpdf.com 上的Getting started with iText 7

    至于 Android:目前 iText 7 与 Android 兼容,您遇到编译错误 iText 7 开箱即用在具有 Android API 级别 24 或更高级别 (Android Nougat) 的设备上使用。如果您想支持在较低版本的 Android 上运行的设备,您可以编写一个 Xamarin 应用程序,它可以在任何版本的 Android 上运行,但 Xamarin 意味着用 .NET 编写。

    【讨论】:

    • @hannes 为什么把“mere”改成“more”?这没有任何意义,不是吗?
    【解决方案2】:

    你需要添加

    compile 'com.itextpdf:io:7.0.2'
    compile 'com.itextpdf:kernel:7.0.2'
    compile 'com.itextpdf:layout:7.0.2'
    

    可能更多,具体取决于您可能需要的组件。有关完整列表,请参阅 http://developers.itextpdf.com/itext-7 - 它采用 Maven XML 格式,但您应该能够适应 Gradle。

    至于 Android:目前 iText 7 与 Android 兼容,您遇到编译错误 iText 7 开箱即用在具有 Android API 级别 24 或更高级别 (Android Nougat) 的设备上使用。如果您想支持在较低版本的 Android 上运行的设备,您可以编写一个 Xamarin 应用程序,它可以在任何版本的 Android 上运行,但 Xamarin 意味着用 .NET 编写。

    【讨论】:

    • 糟糕,你的速度更快... ;)
    • 你更冗长了。 :)
    • @mkl 如果您添加有关与 Android 不兼容的部分,那么我将删除我的答案。你的答案更好。
    • 非常感谢。是的,“与 android 不兼容”的部分在这里至关重要。
    • 别忘了吃饭!
    【解决方案3】:

    如果您想包含所有 iText 7 Core 功能,您应该尝试

    implementation 'com.itextpdf:itext7-core:7.1.8'
    

    【讨论】:

    • 是否需要许可证?
    • 某些功能确实需要许可证
    • 水印需要许可证吗?当我尝试添加水印时,它不起作用,并且在日志消息中显示消息,如未找到许可证文件。
    【解决方案4】:

    由于这是 Google 的顶级搜索结果,我想添加一个技巧以使其在 Android 上运行

    我目前正在使用

    在 Android 上运行 iText 7.1.5
    minSdkVersion 22
    targetSdkVersion 28 
    

    编辑 XFA PDF 没有问题

    诀窍是设置你的 gradle 版本和调试

     buildTypes {
            debug {
                minifyEnabled true
            }
            release {
                minifyEnabled true
            }
    

    这将删除未使用的类,并且在大多数情况下,它还将删除依赖于 API 24 或 API 26 的代码,从而允许您的应用编译

    下一个技巧是将其添加到您的 app.gradle

    android {
        packagingOptions {
            pickFirst 'com/itextpdf/io/font/*'
            pickFirst 'com/itextpdf/io/font/cmap/*'
        }
    

    删除生成的警告。

    在生产环境中使用之前,请务必小心谨慎并进行大量测试

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 2013-05-11
      相关资源
      最近更新 更多