Программа для замены слов (переменных) в .docx файле на другие

Требуется помощь от комьюнити по достаточно нетривиальной задаче. Дело в том, что необходимо разработать одну программку, которая бы принимала на вход строку и записывала бы её вместо другой строки в word-файл (формата .docx). Грубо говоря, реализовать запись в ворд документ. Например, есть шаблон договора, где есть поле "ФИО: (и здесь какое-нибудь слово, которое надо заменить)". Пользователь вводит ФИО и соответственно эта информация попадает в docx документ. На просторах яндекса я нашёл следующий, код, он успешно читает данные с файла, однако как-то оперировать этими данными я не совсем понимаю, ведь parse_docx("hello.docx").unwrap() имеет тип данных вот такой '()'. Также как возможно реализовать замену через крейт docx-rs может с ним кто-то работал? Есть ещё один крейт, это просто docx, однако как я выяснил он не работает. Помогите кто чем сможет, а может если вы знаете простые решение на другие форматы документов, например .pdf или .rtf, то пожалуйста скажите об этом.

use std::io::Read;
use docx_rs::*;
use serde_json::Value;

fn main() {
    let content = parse_docx("hello.docx").unwrap();
    // let some = content.to_string();
}

fn read_to_vec(file_name: &str) -> anyhow::Result<Vec<u8>> {
    let mut buf = Vec::new();
    std::fs::File::open(file_name)?.read_to_end(&mut buf)?;
    Ok(buf)
}

fn parse_docx(file_name: &str) -> anyhow::Result<()> {
    let data: Value = serde_json::from_str(&read_docx(&read_to_vec(file_name)?)?.json())?;
    if let Some(children) = data["document"]["children"].as_array() {
        children.iter().for_each(read_children);
    }
    Ok(())
}

fn read_children(node: &Value) {
    if let Some(children) = node["data"]["children"].as_array() {
        children.iter().for_each(|child| {
            if child["type"] != "text" {
                read_children(child);
            } else {
                println!("{}", child["data"]["text"]);
            }
        });
    }
}

Ответы (0 шт):