groovy - NiFi从PDF提取到文本
问题描述
使用 3 个处理器来执行此操作
- 获取文件
- 执行脚本
- 放置文件
在执行脚本处理器中——使用 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
有没有办法解决这个问题?
解决方案
问题出现在这行代码中:
s.writeText(doc, new OutputStreamWriter(outputStream))
您正在创建内部具有缓冲区的 OutputStreamWriter,该缓冲区在调用OutputStreamWriter.flush()
or时传输到底层输出流OutputStreamWriter.close()
。您的代码中没有调用这些方法。
关闭完成后,您可以使用 groovy 方法withWriter
关闭编写器:
outputStream.withWriter{w-> s.writeText(doc, w) }
推荐阅读
- android - 启动应用时自动播放音乐
- reactjs - 反应如何放一个
2 .map 之间? - sql - 需要在多个表上使用 join/subQuery 按数据分组
- azure - Azure DevOps accessing two Key Vaults with duplicate secret names
- powershell - RegAsm 是否需要源操作员?
- flutter - 有没有办法更改默认的材料颜色定义?
- r - 如何在 ggplot2 中使用 Adobe Creative Cloud 字体
- python - 在 dm discord.py 中等待来自同一作者的消息
- java - 比较 keycloak 的 freemarker 模板中的属性/字符串
- reactjs - 扩展 React-FC Generic Typescript-Component (Ant-Design Select)