bokuweb / docx-rs

:memo: A .docx file writer with Rust/WebAssembly.
https://bokuweb.github.io/docx-rs/
MIT License
341 stars 59 forks source link

Stack Overflow ! . #748

Closed Shrav108 closed 1 week ago

Shrav108 commented 1 month ago

I am generating a report after doing some calculations. After adding an image and 3 tables, I am getting stack overflow. What to do ?



[(exit code: 0xc00000fd, STATUS_STACK_OVERFLOW)](error: process didn't exit successfully: `target\debug\word.exe` (exit code: 0xc00000fd, STATUS_STACK_OVERFLOW))```
bokuweb commented 1 month ago

@Shrav108 thanks for your report.could you please reproduced step?

Shrav108 commented 1 month ago

Here is the code :

use docx_rs ::*;
use chrono;
use std::fs::*;
use std::io::Read;

fn main() -> Result<(), DocxError>
{
    println!("{:?}", chrono::offset::Local::now());
    let path = std::path::Path::new("./hello_.docx");
    let file = std::fs::File::create(path).unwrap();
    //let file_ = Box::new(std::fs::File::create(path).unwrap());

    let mut img    = File::open("SCHB.png").unwrap();
    let mut buf = Vec::new();
    let _ = img.read_to_end(&mut buf).unwrap();
    let pic = Pic::new(&buf).size(100000 * 50 , 100000 * 25 );

    let input_table = Table::new(vec![TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Sl. No.")).align(AlignmentType::Center).bold()),
                                                                TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Parameter")).align(AlignmentType::Center).bold()),
                                                                TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Value")).align(AlignmentType::Center).bold()),
                                                                TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Units")).align(AlignmentType::Center).bold())]),

                                            TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("1.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Oil Pressure")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("bar")).align(AlignmentType::Center))]),

                                            TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("2.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Kinematic Viscosity")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("cst")).align(AlignmentType::Center))]),

                                            TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("3.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Oil Density")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("kg/m3")).align(AlignmentType::Center))]),

                                            TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("4.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Bearing Gap")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("µm")).align(AlignmentType::Center))]),

                                            TableRow::new(vec![TableCell::new().width(600, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("5.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Number of Pairs")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("integer")).align(AlignmentType::Center))]),

                                            ]).align(TableAlignmentType::Center);

    let load_table =Table::new(vec![TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Sl. No.")).align(AlignmentType::Center).bold()),
                                                                TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Parameter")).align(AlignmentType::Center).bold()),
                                                                TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Value")).align(AlignmentType::Center).bold()),
                                                                TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Units")).align(AlignmentType::Center).bold())]),

                                            TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("1.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Width")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("mm")).align(AlignmentType::Center))]),

                                            TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("2.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Length")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("mm")).align(AlignmentType::Center))]),

                                            TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("3.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Land Width")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("mm")).align(AlignmentType::Center))]),

                                            TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("4.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Radius")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("mm")).align(AlignmentType::Center))]),

                                            TableRow::new(vec![TableCell::new().width(600, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("5.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Gamma")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("ratio")).align(AlignmentType::Center))]),

                                            TableRow::new(vec![TableCell::new().width(600, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("6.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Leak Ratio")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("ratio")).align(AlignmentType::Center))]),
                                            ]).align(TableAlignmentType::Center);

    let preload_table = Table::new(vec![TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Sl. No.")).align(AlignmentType::Center).bold()),
                                                                TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Parameter")).align(AlignmentType::Center).bold()),
                                                                TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Value")).align(AlignmentType::Center).bold()),
                                                                TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Units")).align(AlignmentType::Center).bold())]),

                                            TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("1.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Width")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("mm")).align(AlignmentType::Center))]),

                                            TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("2.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Length")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("mm")).align(AlignmentType::Center))]),

                                            TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("3.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Land Width")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("mm")).align(AlignmentType::Center))]),

                                            TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("4.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Radius")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("mm")).align(AlignmentType::Center))]),

                                            TableRow::new(vec![TableCell::new().width(600, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("5.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Gamma")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("ratio")).align(AlignmentType::Center))]),

                                            TableRow::new(vec![TableCell::new().width(600, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("6.")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Leak Ratio")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                                               TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("ratio")).align(AlignmentType::Center))]),
                                            ]).align(TableAlignmentType::Center);

    let diam_table = Table::new(vec![TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Sl. No.")).align(AlignmentType::Center).bold()),
                                            TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Parameter")).align(AlignmentType::Center).bold()),
                                            TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Value")).align(AlignmentType::Center).bold()),
                                            TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Units")).align(AlignmentType::Center).bold())]),

                        TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("1.")).align(AlignmentType::Center)),
                                           TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Supply Hole Diameter 'DS'")).align(AlignmentType::Center)),
                                           TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                           TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("mm")).align(AlignmentType::Center))]),

                        TableRow::new(vec![TableCell::new().width(700, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("2.")).align(AlignmentType::Center)),
                                           TableCell::new().width(1800, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("Collector Hole Diameter 'D1'")).align(AlignmentType::Center)),
                                           TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("")).align(AlignmentType::Center)),
                                           TableCell::new().width(1000, WidthType::Nil).add_paragraph(Paragraph::new().add_run(Run::new().add_text("mm")).align(AlignmentType::Center))]),

                        ]).align(TableAlignmentType::Center);

     Docx::new()
    .add_paragraph(Paragraph::new().add_run(Run::new().add_text("Preloaded Self-Compensated Hydrostatic Bearing Sizing Report").bold().size(24))
                                   .align(AlignmentType::Center))
    .add_paragraph(Paragraph::new().line_spacing(LineSpacing::new().after_lines(10)))
    .add_paragraph(Paragraph::new().add_run(Run::new().add_text("Project : ").size(20)).align(AlignmentType::Left))
    .add_paragraph(Paragraph::new().add_run(Run::new().add_text("Date   : ").size(20)).align(AlignmentType::Left))
    .add_paragraph(Paragraph::new().line_spacing(LineSpacing::new().after_lines(10)))
    .add_paragraph(Paragraph::new().add_run(Run::new().add_image(pic).text_border(TextBorder::new().border_type(BorderType::Dashed))).align(AlignmentType::Center))
    .add_paragraph(Paragraph::new().add_run(Run::new().add_text("  Bearing-Restrictor  ").size(20).italic()).align(AlignmentType::Center))
    .add_paragraph(Paragraph::new().line_spacing(LineSpacing::new().after_lines(10)))
    .add_paragraph(Paragraph::new().add_run(Run::new().add_text("General Inputs").size(20)).align(AlignmentType::Left))
    .add_table(input_table.align(TableAlignmentType::Center))
    .add_paragraph(Paragraph::new().line_spacing(LineSpacing::new().after_lines(10)))
    .add_paragraph(Paragraph::new().add_run(Run::new().add_text("Preload Pad Inputs").size(20)).align(AlignmentType::Left))
    .add_table(preload_table.align(TableAlignmentType::Center))
    .add_paragraph(Paragraph::new().line_spacing(LineSpacing::new().after_lines(10)))
    .add_paragraph(Paragraph::new().add_run(Run::new().add_text("Load Pad Inputs").size(20)).align(AlignmentType::Left))
    .add_table(load_table.align(TableAlignmentType::Center))
    .add_paragraph(Paragraph::new().line_spacing(LineSpacing::new().after_lines(10)))
    .add_paragraph(Paragraph::new().add_run(Run::new().add_text("Restrictor Inputs").size(20)).align(AlignmentType::Left))
    .add_table(diam_table.align(TableAlignmentType::Center))
    .build()
    .pack(file)?; 

    Ok(())
}
Shrav108 commented 1 month ago

Could any one tell what is the reason for the overflow. I tried to Box all variables, but it still overflows.