Long story short, I want to build a system that reorders some components in a document file (be it a docx or odt, I don’t have a hard constraint atm).

So my problem input should be a document file, and I need to be able to approximate the number of pages consumed by this document file, I also need to be able to get the height of individual components (like a single paragraph or a table) to have the data I need to rearrange so I can make the document have less pages.

I don’t have a hard constraint on the programming language of the tool either (Python preferred), I prefer not embedding LibreOffice into my system.

Also I’m willing to hear other solutions (maybe my input is not the optimal thing I can use for this problem).

Thanks in advance!

  • Red1C3@lemmy.worldOP
    link
    fedilink
    English
    arrow-up
    3
    ·
    11 months ago

    Yeah my main is issue is trying to figure out how many pages it spans, I’ve looked at some docx and odt libs, none did seem to have an API related to getting the number of pages nor the height of some component (except for stuff with fixed heights like images…).

    The underlying issue is that I want to create an exam paper with the least papers possible per exam, so I guess that at least I should be able to get the height of each question of the exam and rearrange them (using an algorithm) in a fashion that uses less papers.

    • Lupec@lemm.ee
      link
      fedilink
      arrow-up
      4
      ·
      edit-2
      11 months ago

      Is using something like typst to generate your exams an option? There’d be a learning curve but it’s full of utilities to format and arrange content and whatnot so it feels like it could be a cleaner way of achieving what you want. Plus, it’d make iterating easier and give you more consistency over time going forward

      • Red1C3@lemmy.worldOP
        link
        fedilink
        English
        arrow-up
        1
        ·
        11 months ago

        Not really no, I need something that I can embed into my application, rather than 3rd party software, my application must work offline too :/

    • Turun@feddit.de
      link
      fedilink
      arrow-up
      2
      ·
      edit-2
      11 months ago

      How about generating latex source code, compiling it and getting the page count of the generated PDF? Reorder your set of questions and see if the result is better or worse. Optionally do it in a smart way to reduce the number of PDF compilations you have to do. (Simulated annealing comes to mind for example.)

      I think it would be easier to find a library to find the last line on a PDF page than it is to parse unzipped odt files and basically write a layout engine that does the same as libre office just to get the number of pages.

      Maybe you can even get Tex to put it in the log during compilation. That would be the most convenient option and seems reasonable to achieve.

    • ericjmorey@programming.dev
      link
      fedilink
      arrow-up
      2
      ·
      11 months ago

      Use Google Apps Script to open the document in Google Docs, read the number of pages that Google Docs renders, closes the document, then delets the document (optional).

      • Red1C3@lemmy.worldOP
        link
        fedilink
        English
        arrow-up
        1
        ·
        11 months ago

        I need to automate the process to use it during an algorithm, this is far from practical.

        • ericjmorey@programming.dev
          link
          fedilink
          arrow-up
          1
          ·
          edit-2
          11 months ago

          My suggestion was to automate the process using Google Apps Script using an algorithm. You’ve not given a lot of details about what you actually want to do but for what you did give, Google Apps Script would let you automate the task.