【问题标题】:How to draw a rectangle with iText and Kotlin in an Android App如何在 Android 应用中使用 iText 和 Kotlin 绘制矩形
【发布时间】:2018-08-11 00:37:16
【问题描述】:

我几乎没有发现在 Android Studio 中将 iText/iTextG/iTextpdf 与 Kotlin 结合使用。只有这个还是错误的指令:
https://developers.itextpdf.com/itextg-android

但是,如果您将依赖项设置为 5.5.10 而不是 5.5.11,则它可以工作。我能够创建一个 PDF,在其中写一些文本段落并放置一张图片。 但我不知道如何绘制一个矩形。 (以及如何将图像和文本放置到特定坐标)。

【问题讨论】:

  • 该文档不正确。 iTextG 的 5.5.11、5.5.12 和 5.5.13 版本尚未上传到 Maven Central。这仍然在积压中。同时使用您已经使用的 5.5.10 版本。所以只剩下你关于矩形的问题了。

标签: android pdf kotlin itext


【解决方案1】:

由于 Kotlin 中的东西看起来有点不同,起初我很难应付这些差异,这里是 Kotlin 中的示例。

pdfFile = File(docsFolder.absolutePath, "PDF-Document" + kalender.time.toString() + ".pdf")
val output = FileOutputStream(pdfFile!!)
val document = Document()
val writer = PdfWriter.getInstance(document, output)
document.open()
// This will give you a small orange rectangle at the left bottom of the page 
canvas.setRGBColorFill(0xFF, 0x45, 0x00)
canvas.rectangle(10.0, 10.0, 60.0, 60.0)
canvas.fill()
document.close()

您可以执行此操作以及其他所有操作。绘制线条、放置图像和文本。文本可以在列中,图像可以适合表格单元格。通常我不得不在 Documentation 中阅读两次,@Joris 已经设置了链接。 如果你像我一样不熟悉 Java/Kotlin、iText 和 Android 编程,我建议暂时忘记 Android。 iText 也可以在 IntelliJ IDEA 中使用,它可以为您提供更快的体验。因为在这种情况下,您可以直接在桌面上编译、运行和查看生成的 PDF。一开始你必须经常编译和检查结果。之后很容易移植必要的代码。 但是这样做你可能会对限制感到有些不安,你必须处理 Android 开发内部的问题。

  • 你必须留在 iText5,没有适用于 Android/Java/Kotlin 的 iText7
  • 您无法从文件系统中的任何位置访问文件
  • 要放置图像,您需要放置其 ByteArrayOutputStream 的实例。丑陋的 5 行代码,为您希望在 PDF 中包含的每张图片。

但是,嘿,它有效而且是免费的。

【讨论】:

    【解决方案2】:

    可以通过访问画布并在其上执行绘图操作来在页面上的特定位置绘制矩形。

    Document document = new Document(new Rectangle(200, 120));
    
    // step 2
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(RESULT));
    
    // step 3
    document.open();
    
    // step 4
    PdfContentByte canvas = writer.getDirectContent();
    
    // state 1:
    canvas.setRGBColorFill(0xFF, 0x45, 0x00);
    
    // fill a rectangle in state 1
    canvas.rectangle(10, 10, 60, 60);
    canvas.fill();
    canvas.saveState();
    

    有关在绝对位置添加内容的更多信息,请查看文档:https://developers.itextpdf.com/examples/itext-action-second-edition/chapter-3

    【讨论】:

    • iText 文档中的所有内容——与其说是真正的文档,不如说是问题的集合——都是用 Java 编写的。几周前,我还没有准备好将 java 示例改编为 kotlin。经验教训: * 选择 Android 设备作为起点是个坏主意 * 执行第一步要快得多,可能是 Intellij IDEA 中的完整 Design * 如果您在php 多年来创建几个 PDF 文档,您会问自己为什么 iText 如此复杂 * 因此,网站可能是更好的解决方案,但不能在 App-Store 上出售
    猜你喜欢
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多