You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Rust的lopdf crate读取PDF时遇Unicode mismatch日志问题求助

解决lopdf读取PDF时的Unicode mismatch日志问题

一、关闭Unicode mismatch日志

这些日志是lopdf库在处理字符映射时输出的调试信息(属于debug级别),可以通过Rust日志系统过滤关闭:

1. 环境变量快速控制

运行程序时设置RUST_LOG环境变量,过滤掉lopdf的低级别日志:

# 只保留info及以上级别日志,lopdf仅输出error级内容
RUST_LOG=info,lopdf=error ./your_program

2. 代码内配置日志

如果使用env_logger crate,在程序启动时初始化并设置过滤规则:

use env_logger::Builder;
use log::LevelFilter;

fn main() {
    // 初始化日志,限制lopdf仅输出error级内容
    Builder::new()
        .filter_level(LevelFilter::Info)
        .filter_module("lopdf", LevelFilter::Error)
        .init();

    // 你的PDF读取逻辑
    let reader = std::io::Cursor::new(buffer);
    let doc = lopdf::Document::load_from(reader).unwrap();

    let mut output = PagePlainTextOutput::new();
    output_doc(&doc, &mut output).unwrap();
    println!("Output {:?}", output);
}

需要在Cargo.toml中添加依赖:

[dependencies]
env_logger = "0.10"
log = "0.4"
lopdf = "0.32"
pdf_extract = "0.8"

二、替代的PDF读取方案

如果不想处理日志问题,可尝试更稳定的第三方PDF文本提取库:

1. 使用pdfium-render(基于Google PDFium引擎)

use pdfium_render::prelude::*;

fn main() -> Result<(), PdfiumError> {
    // 初始化PDFium
    let pdfium = Pdfium::new(
        Pdfium::bind_to_library(Pdfium::pdfium_platform_library_name())?
    );

    // 加载PDF并提取文本
    let document = pdfium.load_document_from_bytes(&buffer, None)?;
    let mut full_text = String::new();

    for page in document.pages() {
        full_text.push_str(&page.text()?);
        full_text.push('\n');
    }

    println!("Output {}", full_text);
    Ok(())
}

依赖配置:

[dependencies]
pdfium-render = "0.11"

2. 使用poppler绑定(成熟PDF处理库)

use poppler::Document;

fn main() {
    let document = Document::from_data(&buffer, None).unwrap();
    let mut full_text = String::new();

    for i in 0..document.n_pages() {
        let page = document.page(i).unwrap();
        full_text.push_str(&page.text().unwrap());
        full_text.push('\n');
    }

    println!("Output {}", full_text);
}

依赖配置:

[dependencies]
poppler = "0.18"

内容的提问来源于stack exchange,提问作者Ansh Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:13:13