当前位置: 首页 > 知识库问答 >
问题:

iText错误:java.io.ioException:找不到拖车

龚联
2023-03-14

我正在创建一个web应用程序,它将使用iText填充PDF表单。为了创建PDF表单,我首先使用Microsoft Word创建一个模板,将其保存,然后在Adobe Acrobat Xi Pro中打开该文件,添加表单字段,并将其保存为PDF。问题是PDF没有用拖车保存,所以当我执行以下操作时:

PdfReader reader = new PdfReader(templateName);

它抛出一个异常“java.io.ioException:trailer not found”。我知道我可以读一个PDF如果它有一个预告片,因为我试过阅读其他PDF。所以看来问题是Acrobat没有在我的PDF中添加预告片。即使我尝试在Acrobat中从头开始创建一个PDF表单,它也不会与预告片一起保存。

我一定有一个旧版本的iText,因为当我下载最新版本时,我能够阅读我的PDF文件。然而,在读取文件并对其进行盖章之后,我在关闭盖章时遇到了一个异常。代码如下所示:

PdfReader reader = new PdfReader(templateName);
FileOutputStream os = new FileOutputStream(outputPath);
PdfStamper stamper = new PdfStamper(reader, os);
AcroFields acroFields = stamper.getAcroFields();

List<String> fields = getFieldNames(getContextCd());
for (String field : fields) {
    acroFields.setField (field, StringUtil.checkEmpty(request.getParameter(field)));
}

stamper.setFormFlattening(true);
stamper.close();

我得到的错误是:

java.lang.AbstractMethoderRror:javax.xml.Parsers.DocumentBuilderFactor.SetFeature(Ljava/lang/String;z)V(位于com.itextpdf.xmp.impl.xmpMetaparser.createdocumentBuilderFactory(xmpMetaparser.java:423)(位于com.itextpdf.xmp.xmp.xmp.xmpMetaparser)(位于com.itextpdf.xmp.xmp.xmpMetaparser.java:71)(位于

我添加到类路径中的唯一一个jar文件是itextPDF-5.5.2.jar。我还需要别的罐子吗?

共有1个答案

汤枫
2023-03-14

我的解决方案会奏效的...假设1:pdf缺少拖尾,它被放置在resources/xxx下,并且在构建之后,它被移动到classess/xxx假设2:您试图从类路径读取pdf,并试图从这个pdf文件路径创建PdfReader对象。

如果上面的假设是正确的,下面是一个解决方案,然后进行推理:转到pom文件或任何构建配置文件,并更改设置以排除.pdf文件在构建期间被过滤。我们希望pdf从resources/xxx移动到classess/xxx,而不需要构建活动进行任何操作。如下所示:

<build>
        <resources>
          <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                **<exclude>**/*.pdf</exclude>**
            </excludes>
          </resource>
        </resources>

需要解释吗?好的。当资源正在从resources/xxx移动到classess/xxx时,不管它们是什么类型的文件,它们都是由构建过程解释的。在为PDF执行此操作时,需要使用trailer和EOF标记。如果不是,生成工具会向pdf内容添加额外的字符,以报告任何试图使用此pdf的代码出现的问题。如果我们从构建活动中跳过PDF的过滤,那么即使缺少了拖车,同样的PDF也会起作用。

希望这有帮助!

 类似资料:
  • 我不能安装任何需要的包。错误消息如下所示 我还尝试了包,得到了完全相同的结果。 路径: Make:GNU Make 3.81安装在中(来自官方的Debian包) 分册:Debian 6.0.8 ARCH:AMD64 构建-基本包:已安装 节点:从源手工构建 安装非GYP软件包:正常工作

  • 能不能有人,请建议我做错了什么,我们可以如何解决这个问题。我们有一个实用程序方法,它写入输出流并创建一个新的pdf附件。

  • 问题内容: 我有一个由Eclipse生成的.jar,我无法在其他计算机(与Windows XP)上运行。出现“找不到主类。程序将退出”消息。那台计算机可以在Netbeans生成的另一个.jar上正常运行,所以我想JRE并不是问题。我更新了JRE,但没有改变。问题是什么? 更新:我忘了提,我做了一个可运行的jar文件。在另外两台计算机上,它可以正常工作(win 7和XP),但在特定计算机上则不能。

  • 问题内容: 所有, 我的类路径已设置为以下文件夹: 我所有的Java文件和类文件都在中列出的文件夹下。 但是在运行in 文件夹时出现以下错误: 谁能帮我理解这里的原因? 问题答案: 您在包装内。您应该坐在包根目录中。上一个文件夹。 然后使用重新执行它。 就是说,您不应该使用环境变量。您的当前也是无效的。未加引号的路径名中有空格。另外,该文件夹不应放在类路径中。只需使用like这样的参数(坐在包根文

  • 问题内容: 我试图安装Python软件包: 但是我收到了一个神秘的错误消息: 如果我尝试手动安装软件包,也会发生相同的情况: 问题答案: 对于Windows安装: 在运行进行软件包安装时,Python 2.7搜索已安装的Visual Studio2008。你可以通过在调用之前在环境变量中设置正确的路径来欺骗Python使用更新的。 根据安装的Visual Studio版本执行以下命令: Visua

  • 这里有一个类似的答案:如何在Java中将函数作为参数传递? 但提供的正确答案不起作用。我有一门课: 在函数内部我试图将传递到,但我得到的错误是: 找不到符号 符号:类Callable 我不知道为什么。 另外,我尝试使用返回类型字符串作为xMethod,您能传递一个返回类型不同的函数吗?