【问题标题】:Itext7 bare bones hello world example - how?Itext7 最基本的 hello world 示例 - 怎么样?
【发布时间】:2020-12-28 12:15:58
【问题描述】:

所以我从https://github.com/itext/itext7/releases/latest 下载了编译好的itext jar 文件 并将它们放在与 iText 示例 C01E01_HelloWorld.java 相同的文件夹中,但是当我运行时

javac C01E01_HelloWorld.java

我明白了

$ javac C01E01_HelloWorld.java 
C01E01_HelloWorld.java:3: error: package com.itextpdf.kernel.pdf does not exist
import com.itextpdf.kernel.pdf.PdfDocument;
                              ^
C01E01_HelloWorld.java:4: error: package com.itextpdf.kernel.pdf does not exist
import com.itextpdf.kernel.pdf.PdfWriter;
                              ^
C01E01_HelloWorld.java:5: error: package com.itextpdf.layout does not exist
import com.itextpdf.layout.Document;
                          ^
C01E01_HelloWorld.java:6: error: package com.itextpdf.layout.element does not exist
import com.itextpdf.layout.element.Paragraph;
                                  ^
C01E01_HelloWorld.java:25: error: cannot find symbol
        PdfWriter writer = new PdfWriter(dest);
        ^
  symbol:   class PdfWriter
  location: class C01E01_HelloWorld
C01E01_HelloWorld.java:25: error: cannot find symbol
        PdfWriter writer = new PdfWriter(dest);
                               ^
  symbol:   class PdfWriter
  location: class C01E01_HelloWorld
C01E01_HelloWorld.java:28: error: cannot find symbol
        PdfDocument pdf = new PdfDocument(writer);
        ^
  symbol:   class PdfDocument
  location: class C01E01_HelloWorld
C01E01_HelloWorld.java:28: error: cannot find symbol
        PdfDocument pdf = new PdfDocument(writer);
                              ^
  symbol:   class PdfDocument
  location: class C01E01_HelloWorld
C01E01_HelloWorld.java:31: error: cannot find symbol
        Document document = new Document(pdf);
        ^
  symbol:   class Document
  location: class C01E01_HelloWorld
C01E01_HelloWorld.java:31: error: cannot find symbol
        Document document = new Document(pdf);
                                ^
  symbol:   class Document
  location: class C01E01_HelloWorld
C01E01_HelloWorld.java:34: error: cannot find symbol
        document.add(new Paragraph("Hello World!"));
                         ^
  symbol:   class Paragraph
  location: class C01E01_HelloWorld
11 errors

我也试过

javac -cp /home/user01/itext/demo/ C01E01_HelloWorld.java

即-cp 指向 iText jar(和 C01E01_HelloWorld.java)的位置,结果相同。 如何让导入行知道和使用 iText jar 文件?

或者这不能以简单的方式完成,需要eclipse或maven或?

所以我运行以下没有错误

javac -cp kernel-7.1.13.jar:layout-7.1.13.jar:io-7.1.13.jar C01E01_HelloWorld.java 

如果我遗漏了任何 jar 文件,则会导致与丢失 jar 相关的错误。但是当我尝试时

java C01E01_HelloWorld 

我明白了

Error: Unable to initialize main class C01E01_HelloWorld
Caused by: java.lang.NoClassDefFoundError: com/itextpdf/layout/element/IBlockElement

我也试过

java -cp kernel-7.1.13.jar:layout-7.1.13.jar:io-7.1.13.jar C01E01_HelloWorld

略有不同

Error: Could not find or load main class C01E01_HelloWorld
Caused by: java.lang.ClassNotFoundException: C01E01_HelloWorld

所以下一步会产生

$ java -cp kernel-7.1.13.jar:layout-7.1.13.jar:io-7.1.13.jar:. C01E01_HelloWorld
Exception in thread "main" java.lang.NullPointerException at C01E01_HelloWorld.main(C01E01_HelloWorld.java:21)

我的来源是

/*package tutorial.chapter01;*/

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import java.io.File;
import java.io.IOException;

/**
 * Simple Hello World example.
 */
public class C01E01_HelloWorld {
    
    /* public static final String DEST = "results/chapter01/hello_world.pdf";  */
    
    public static final String DEST = "hello_world.pdf";
    
    public static void main(String args[]) throws IOException {
        File file = new File(DEST);
        file.getParentFile().mkdirs();
        new C01E01_HelloWorld().createPdf(DEST);
    }
    
    public void createPdf(String dest) throws IOException {
        //Initialize PDF writer
        PdfWriter writer = new PdfWriter(dest);

        //Initialize PDF document
        PdfDocument pdf = new PdfDocument(writer);
        
        // Initialize document
        Document document = new Document(pdf);

        //Add paragraph to the document
        document.add(new Paragraph("Hello World!"));

        //Close document
        document.close();
    }
}

【问题讨论】:

  • 据我所知,如果您需要外部 jar,那么您需要一个包管理器,即 maven 或 gradle。我建议从 maven 开始。最好也有一个ide。我建议想法社区版。易于设置和运行
  • 出现这个错误的原因是java找不到itext的jar文件。您的位置可能已关闭。尝试给出一个绝对路径作为位置。此外,如果您将代码开发为项目/其中包含包,那么您绝对应该尝试使用 ide。那会容易得多
  • 试试javac -cp itext.jar C01E01_HelloWorld.java
  • @vanje itext 7 不再是一个大罐子了,代码被分成了多个罐子。
  • 更新了初始线程,可能有一些进展,但一次尝试没有成功。我曾尝试使用 Eclipse 关注 youtube itext helloworld,但在我的 ecliplse 中没有看到与 vid 中关于 pom 文件的选项相同的选项。

标签: java itext7


【解决方案1】:
  1. 安装一个不错的 IDE,比如 IntelliJ IDEA Community Edition。
  2. 克隆包含示例的 GitHub 存储库:
git clone https://github.com/itext/i7js-jumpstart
  1. 在 IntelliJ 中,打开刚刚克隆的 repo 目录中的pom.xml。 IntelliJ 会询问您是否要将其作为 Maven 项目打开。
  2. 在 IntelliJ 中,左侧是项目中所有文件的树形视图。转到文件src/main/java/tutorial/chapter01/C01E01_HelloWorld.java
  3. 运行示例(main 方法)。

【讨论】:

  • re 3. 我可以选择以项目或文件形式打开而没有提及 maven?重新 4. 这会出现一个横幅,上面写着左边的 Project JDK is not defined 和右边的 Setup SDK。如果我单击 Setup SDK,它会显示 Detected SDK's java-11-openjdk version 11.0.9 default-jvm version 11.0.9 和“添加 SDK”选项,然后显示 Download JDK JDK Intellij Platform Plugin SDK Android SDK 在 C01E01_HelloWorld 的右上角.java 它有 10 个错误和 3 个警告
  • 作为项目打开。而且您可能需要在 IntelliJ 中安装 Maven 扩展,最好在 JetBrains 论坛上询问以确保。或者在 Stack Overflow 上搜索。这是基本的 Java 开发,假设经验丰富的 Java 开发人员已经知道如何设置他们的开发工具。
  • 谢谢,我会调查一下,我已经用 java 好多年了,但从来没有相处过,或者它是完全不同的生态系统,真希望我可以 gcc ....
【解决方案2】:

所以我使用中提供的链接下载了 slf4j.api、slf4j-log4j12 和 log4j

SLF4J: Which .jar files does iText7 need exactly?

并且还从

下载了编译好的itext jar文件

https://github.com/itext/itext7/releases/latest

然后我跑了

javac -cp kernel-7.1.13.jar:layout-7.1.13.jar:io-7.1.13.jar:slf4j.api-1.6.1.jar:slf4j-log4j12-1.6.1.jar:log4j-1.2.16.jar C01E01_HelloWorld.java

然后

java -cp kernel-7.1.13.jar:layout-7.1.13.jar:io-7.1.13.jar:slf4j.api-1.6.1.jar:slf4j-log4j12-1.6.1.jar:log4j-1.2.16.jar:. C01E01_HelloWorld

最后我得到了所谓的简单 hello world pdf....

我已经尝试过 maven、eclipse 和现在的 IDEA,但未能按照教程或提示“只是”工作......然而

【讨论】:

  • 但这是 java 101:将所有必需的库添加到您的类路径中以运行程序...
  • 是的,但它们是 iText 库依赖项……需要更多搜索才能确定它们的名称以及获取它们的位置。
  • 好吧,iText 官方文档告诉您,最简单的入门方法是使用 Maven 或 Gradle 之类的依赖管理器。如果您想以不同的方式进行操作,则假定您是 Java 专家并且知道自己在做什么......
  • 在某些宇宙中都是正确的。我不是 Java 专家,显然不知道自己在做什么,我尝试了以下示例、教程和指南:maven、eclipse 和 IDEA,但到目前为止都失败了……对于 Hello World 示例,我不知道认为它应该那么难,也应该能够尽可能简单地完成。如果您选择一个库(或所谓的简单示例),您应该收到有关其特定依赖项的健康警告。
  • 对不起。我希望其他人能够帮助您。
猜你喜欢
  • 2013-04-16
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
相关资源
最近更新 更多