如何使用java/scala获取pdf文件的图示符?

如何使用java/scala获取pdf文件的图示符?,java,scala,pdf,pdfbox,Java,Scala,Pdf,Pdfbox,我在devanagiri有一个pdf文件。某些图示符的映射方式不正确。我想从pdf文件中提取所有这些标志符号,并将它们映射到正确的unicode。如何提取pdf文件的图示符 OP在一条评论中澄清说,他本质上想要的是字形ID,而不是它们被ToUnicode映射到的字符。由于所讨论的字体具有标识-H编码,字形ID与字符代码一致 文本图示符的字符代码包含在由文本剥离器处理的TextPosition对象中。因此,您必须在仍然有这些TextPosition对象的方法中将自己的代码添加到剥离器中 最后一个方

我在devanagiri有一个pdf文件。某些图示符的映射方式不正确。我想从pdf文件中提取所有这些标志符号,并将它们映射到正确的unicode。如何提取pdf文件的图示符

OP在一条评论中澄清说,他本质上想要的是字形ID,而不是它们被ToUnicode映射到的字符。由于所讨论的字体具有标识-H编码,字形ID与字符代码一致

文本图示符的字符代码包含在由文本剥离器处理的
TextPosition
对象中。因此,您必须在仍然有这些
TextPosition
对象的方法中将自己的代码添加到剥离器中

最后一个方法是
writeString(String,List)
,默认情况下,该方法忽略第二个参数,并使用第一个字符调用
writeString(String)

相反,您不能忽略第二个参数,而应检查它,例如:

PDDocument document=PDDocument.load(资源);
PDFTextStripper剥离器=新的PDFTextStripper(){
@凌驾
受保护的void writeString(字符串文本、列表文本位置)引发IOException{
用于(TextPosition TextPosition:textPositions){
writeString(String.format(“%s%s”、textPosition.getUnicode()、Array.toString(textPosition.getCharacterCodes()));
}
}
};
//脱扣器。设置端口BYPOSITION(真);
String text=stripper.getText(文档);
System.out.printf(“\n*\n*singNepChar.pdf\n*\n%s\n”,文本);
(测试
testExtractFromSingNepChar

此示例仅输出每个提取的字符以及从中提取的字符代码。您可以对给定数据进行任何评估,例如,根据字符代码和您可能拥有的其他信息映射到Unicode

实际上,您手头有更多的信息,尤其是
TextPosition
还包含文本的字体对象(通过
getFont
)。由于不同字体的字符代码可能不同,因此此信息可能对您很重要

对于示例文档,输出为

*
*singNepChar.pdf
*
क[1399] [3]ख[1400] [3]ग[1401] [3]घ[1402] [3]ङ[1403] [3]च[1404] [3]छ[1405] [3]ज[1406] [3]झ[1407] [3]ञ[1408] [3]ट[1409] [3]ठ[1410] [3]ड[1411] [3]ढ[1412] [3]ण[1413] [3]त[1414] [3]थ[1415] [3]द[1416] [3]ध[1417] [3]न[1418] [3]प[1420] [3]फ[1421] [3]ब[1422] [3]भ[1423] [3]म[1424] [3]य[1425] [3]र[1426] [3]ल[1428] [3]व[1431] [3]श[1432] [3]ष[1433] [3]स[1434] [3]ह[1435] [3]क्ष[6979] [3]त्र[7074] [3]ज्ञ[6980] [32]
ऄ[1383] [3]अ[1384] [3]आ[1385] [3]इ[1386] [3]ई[1387] [3]उ[1388] [3]ऊ[1389] [3]ए[1393] [3]ऐ[1394] [3] [3]ओ[1397] [3]औ[1398] [32]ऄ[1383]ं[1381] [3]ऄ[1383]ः[1382] [32]
[32]
[32]
[32]
[32]
[32]
[32]
[32]
[32]

(注意,我的输出是十进制的,而您的评论中的数据是十六进制的。)

我确信您不会找到很多人愿意下载您提供的不受信任的文件。此外,您还可以添加您自己进行的搜索以及搜索结果。到目前为止你尝试了什么?对于您的用例,您排除了哪些不可能的情况?什么东西没有完全按照你想要的方式工作?当您陷入困境时,我们很乐意帮助您,但可能没有人会为您完成所有工作:)“我想提取所有这些图示符”-提取这些图示符是什么意思?您想从字体文件中获取字形轮廓吗?可以从源代码下载的DrawPrintTextLocations.java开始,PDFBox回答中提到“ToUnicode”。@mkl,我在这个pdf中有这些信息:->क, ->ख.....-ज्ञ.使用toUnicode map i.i->nd等将这些字符正确映射到适当的unicode ID。然而之后ज्ञ, 下一个角色अ 映射到的glyph ID不是正确的unicode映射अ, 然后आ 映射到अ 及इ 到आ. 我已经使用PDFBEFUGER来获取此信息。Pdfdebugger使用java对象来表示glyph。我想提取这些符号。你能帮我吗?在这个pdf文件中,我有一个字符串“सुन" 分居स[1434] , नु[1418]。我开始制作自己的字形ID到字符的映射,但在本例中ु's字形ID丢失。应该是स[1434], न[1441], ु[1418]。我如何得到这个答案?因为你也将这个问题发布为一个问题,我回答。