我需要解析一个pdf文档。我有一个java程序来解析pdf文件。(当我解析pdf时,我使用了pdf中那些段落的字体信息。我不会将其转换为文本,因为如果我将pdf转换为文本文件,我将丢失我的字体信息。因此,我直接使用ApachePDFBox用字体信息解析pdf。我使用以下代码加载pdf文件
String inputFile = "/home/Desktop/CTT/bcreg20130702a.pdf";
File input = new File(inputFile);
pd = PDDocument.load(input);
现在我需要编写一个map reduce程序来解析pdf文档。我不能直接使用pdf文件作为mapreduce程序中map()函数的输入。我使用wholefileinputformat将整个文档作为一个单独的split传递,但它提供了byteswritable(值)和filename(键)。
我还有那个pdf的sequencefileformat。
如何将pdfbox与这个sequencefileformat或wholefileinputformat一起使用?它应该保留它的字体信息也。没有字体信息,我不能解析我的pdf。
3条答案
按热度按时间lbsnaicq1#
map reduce需要来自hdfs的输入路径。因此,您可以将本地文件上载到某个路径/文件夹中的hdfs(使用javaapi),并将其用作map reduce的输入。
8qgya5xd2#
您说您正在使用自己的自定义inputformat(wholefileinputformat)而不是byteswriteable使用pddocument对象作为Map值,并在wholefilerecordreader(custome reader)的nextkeyvalue()中将pdf的全部内容加载到pddocument中。还要确保ur issplitable()返回false,以便加载整个pdf。
eiee3dmh3#
您可以创建一个sequencefile来包含pdf文件。sequencefile是二进制文件格式。您可以将sequencefile中的每个记录都制作为pdf。为此,您将创建一个从writable派生的类,该类将包含pdf和您需要的任何元数据。然后可以使用任何javapdf库(如pdfbox)来操作pdf。