使用PDFTextStream从PDF文件中提取僧伽罗语字符

时间:2014-09-12 09:33:24

标签: java pdf unicode

我正在尝试获取僧伽罗语中的pdf内容(例如:http://archives.dailynews.lk/2001/pix/GazetteS14-01-03.pdf)。

我在计算机中保存了pdf并使用了以下代码。

import java.io.IOException;

import com.snowtide.pdf.OutputTarget;
import com.snowtide.pdf.PDFTextStream;

public class ExtractTextAllPages {
    public static void main (String[] args) throws IOException {
        String pdfFilePath = "/home/chamila/semester7/fyp/gazette/GazetteS14-01-03.pdf";
        PDFTextStream pdfts = new PDFTextStream(pdfFilePath); 
        StringBuilder text = new StringBuilder(1024);
        pdfts.pipe(new OutputTarget(text));
        pdfts.close();
        System.out.printf("The text extracted from %s is:", pdfFilePath);
        System.out.println(text);
    }
}

但我得到的输出就像是跟随。

Y%S ,xld m%cd;dka;%sl iudcjd§ ckrcfha .eiÜ m;%h                 1
wxl 1"844 – 2014 ckjdß ui 03 jeks isl=rdod – 2014'01'03

^rcfha n,hmsg m%isoaO lrk ,§'&

I jeks fldgi : ^IIw& jeks fPoh - m<lsÍï
;k;=re - wenE3;=

                 Y%S ,xld fmd,sia fomd3;fïka;=j
.............................

这是什么原因?如何获得pdf中的确切内容?

2 个答案:

答案 0 :(得分:3)

这是

的原因

相关文档根本不包含正确文本提取的信息。更糟糕的是,它包含误导性信息。

例如

头条

enter image description here

使用这些运算符生成

BT
/TT4 1 Tf
19.2 0 0 32 184.205 938.105 Tm
-0.0006 Tc
0.1376 Tw
(Y%S ,xld m%cd;dka;%sl iudcjd§ ckrcfha .eiÜ m;%h) Tj
ET

(即使用字体 TT4 ,使用特定字符和字间距在某个大小的某个位置绘制序列Y%S ,xld m%cd;dka;%sl iudcjd§ ckrcfha .eiÜ m;%h。)

字体 TT4 现声称:

/Subtype/TrueType
/FontDescriptor 66 0 R
/LastChar 255
/Widths[...]
/BaseFont/CKAKNH+FMAbabldBold
/FirstChar 32
/Encoding/WinAnsiEncoding
/Type/Font

即。使用 WinAnsiEncoding TrueType 字体,但没有 ToUnicode 映射。

因此,文本提取器被认为绘制为标题的序列Y%S ,xld m%cd;dka;%sl iudcjd§ ckrcfha .eiÜ m;%h表示字符“Y%S,xld m%cd; dka;%sl:iudcjd§ckrcfha.eiÜ m;%h“,因此PDFTextStream会返回该字符串。

显示的字形显示不同字符的事实是由于嵌入的字体文件具有这些字形的图形绘制指令,这些字形看起来完全不同于“Y%S,xld m%cd; dka;%slijudjj§ckrcfha.eiÜm ;%H”

如何获得pdf中的确切内容?

使用OCR。

答案 1 :(得分:0)

根据snowtide文档(http://downloads.snowtide.com/javadoc/PDFTextStream/2.3.2/index.html?pdfts/examples/XMLFormExport.html),PDFTextStream支持所有单字节和双字节Unicode字符集。

据我所知,大多数sinhala字符都是三个字节。这将是问题