返回

使用iText 7手动设置识别源语言

见解分享

在大多数情况下,Google 翻译 API 可以准确识别文本的源语言。然而,我们收到了俄罗斯用户关于无法正确识别俄语文本的反馈。经测试确认,确实如此。因此,我们在 iText 7 中添加了手动设置源语言的功能。

值得注意的是,此功能不仅要满足边缘情况,还要避免影响大多数用户。目前,我们的逻辑是这样的:

对于大多数用户来说,Google 翻译 API 的自动语言检测已经足够准确。因此,默认情况下,iText 7 不会提示用户手动设置源语言。

对于那些遇到问题的用户(例如,使用俄语文本的用户),iText 7 提供了一种便捷的方法来手动设置源语言。用户可以通过调用 setLanguage 方法指定源语言。

import com.itextpdf.io.source.ByteArrayOutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.codec.Base64;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class ManualLanguageDetection {

    public static void main(String[] args) throws IOException {
        // 创建一个字节数组输出流,用于存储生成的 PDF 文档
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        // 创建一个 PDF 写入器,将字节数组输出流作为其输出目标
        PdfWriter writer = new PdfWriter(baos);

        // 创建一个文档对象
        Document document = new Document();

        // 打开 PDF 写入器
        writer.open();

        // 设置 PDF 文档的源语言为俄语
        writer.setLanguage("ru");

        // 向 PDF 文档添加一个段落
        document.add(new Paragraph("Привет, мир!"));

        // 关闭 PDF 文档
        document.close();

        // 将 PDF 文档转换为 Base64 编码的字符串
        byte[] pdfBytes = baos.toByteArray();
        String base64Pdf = Base64.encodeBytes(pdfBytes);

        // 输出生成的 Base64 编码的 PDF 文档
        System.out.println(base64Pdf);
    }
}