【问题标题】:Extracting Sinhala Characters from a PDF File using PDFTextStream使用 PDFTextStream 从 PDF 文件中提取僧伽罗语字符
【发布时间】:2014-11-06 10:43:21
【问题描述】:

我正在尝试获取僧伽罗语 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 中的确切内容?

【问题讨论】:

    标签: java pdf unicode


    【解决方案1】:

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

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

    【讨论】:

    • 这将是问题 - 不,请参阅我的回答,PDF 声称有关所绘制字形的虚假信息。
    【解决方案2】:

    这是什么原因

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

    例如

    标题

    使用这些运算符生成:

    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
    

    即使用 WinAnsiEncodingTrueType 字体,没有 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;%sl iudcjd§ ckrcfha .eiÜ m ;%h"。

    我怎样才能得到 pdf 中的确切内容?

    使用 OCR。

    【讨论】:

    • 无法解码(字符串替换)?
    • 解码(字符串替换)是不可能的? - 当然,您可以创建一个程序,首先将每个嵌入字体的每个字形显示给一个人然后输入匹配的字符;之后,该程序可以使用人工提供的信息使用字符替换自动提取页面内容。但请注意:每种字体都可能有自己的实际编码,并且字体可能是在每页的基础上定义的。
    • 此外,字体文件可以包含有关字形正确字符的信息,因此也许通过查看嵌入的字体,程序也可以获得这些信息。但不要指望这一点,嵌入到 PDF 中的字体通常被剥离为基本要素,而映射字形->字符不是必需的。
    猜你喜欢
    • 1970-01-01
    • 2013-07-08
    • 2011-10-03
    • 2020-01-28
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多