NiFi从PDF提取到文本

时间:2019-03-14 18:17:22

标签: groovy apache-nifi

使用3个处理器来完成

  1. GetFile
  2. ExecuteScript
  3. PutFile

在“执行脚本”处理器中-使用groovy脚本,并遵循下面此链接中的步骤。它可以正常工作,但不会提取最后几页/最后一页的最后几行。尝试使用不同的Pdf文件并遇到相同的问题。

   import org.apache.pdfbox.pdmodel.*
import org.apache.pdfbox.util.*

def flowFile = session.get()
if(!flowFile) return

def doc, info
def s  = new PDFTextStripper()

flowFile = session.write(flowFile, {inputStream, outputStream ->
 doc = PDDocument.load(inputStream)
 info = doc.getDocumentInformation()

        s.writeText(doc, new OutputStreamWriter(outputStream))
    } as StreamCallback
)
flowFile = session.putAttribute(flowFile, 'pdf.page.count', "${doc.getNumberOfPages()}")
flowFile = session.putAttribute(flowFile, 'pdf.title', "${info.getTitle()}" )
flowFile = session.putAttribute(flowFile, 'pdf.author',"${info.getAuthor()}" );
flowFile = session.putAttribute(flowFile, 'pdf.subject', "${info.getSubject()}" );
flowFile = session.putAttribute(flowFile, 'pdf.keywords', "${info.getKeywords()}" );
flowFile = session.putAttribute(flowFile, 'pdf.creator', "${info.getCreator()}" );
flowFile = session.putAttribute(flowFile, 'pdf.producer', "${info.getProducer()}" );
flowFile = session.putAttribute(flowFile, 'pdf.date.creation', "${info.getCreationDate()}" );
flowFile = session.putAttribute(flowFile, 'pdf.date.modified', "${info.getModificationDate()}");
flowFile = session.putAttribute(flowFile, 'pdf.trapped', "${info.getTrapped()}" );   
session.transfer(flowFile, REL_SUCCESS)

http://funnifi.blogspot.com/2016/02/executescript-extract-text-metadata.html

是否可以解决此问题?

2 个答案:

答案 0 :(得分:0)

问题似乎在以下代码行中

s.writeText(doc, new OutputStreamWriter(outputStream))

您正在创建OutputStreamWriter,该内部具有一个缓冲区,该缓冲区在调用OutputStreamWriter.flush()OutputStreamWriter.close()时传输到基础输出流。您的代码中没有调用这些方法。

您可以使用常规方法withWriter在关闭完成后关闭编写器:

outputStream.withWriter{w-> s.writeText(doc, w) }

答案 1 :(得分:0)

我转载了您的代码,但收到以下错误:

unable to resolve class PDFTextStripper(). This is jars file in path of module directory:
jempbox-1.8.12.jar
fontbox-1.8.12.jar
commons-logging-1.1.1.jar 

在我看来,缺少依赖性。