I keep running my head into a wall working on a project and I am hoping you guys can help me. I have created a database that contains the addresses of contacts. What I need to accomplish is generating paper reports of these addresses. So, for example, I may have 25 addresses on one report related by some other data point. I figured that I should easily be able to pull info from my database and fill a PDF template with it that I could then print out, but this has proven harder than expected.
So far, I’ve tried airtable and notion (I know, but I was temporarily having server issues and I need to get this project done) I’ve also tried baserow and nocodb, and yet I can’t seem to figure out how to generate printable reports from my data.
Does anyone else know of an option? I’ve seen a recommendation for creating a spreadsheet or word document as a template that you then copy/paste your data into, but that feels… inelegant? Would something like appsmith or budibase be capable of this? Or is there some other (preferably self-hosted) software to accomplish this? I appreciate any help you can give me.
I managed to find the format of docx files and setup an automated invoice generation for my customers. A docx file is actually a zip file, which you can unzip, change fields in the text with sed, zip to a new file and then convert to pdf (libreoffice plugin) before sending/printing. That’s on Linux though.
When you want I can dig up that code. Querying the database and sending to a printer shouldn’t be Yhe main issue I guess.
I’d love to take a look at that if possible
Ok, will post it tomorrow.
Oh, 1st of all, I have to make a small correction, I use an odt as base document.
You run this in the directory with the odt file and a temp directory t
cd t unzip ../${document_template}.odt sed -i "s/ReplaceThis/${var1}/g" content.xml sed -i "s/ReplaceThisToo/${var2}/g" content.xml zip -r ../${document_target}.odt . cd ../ libreoffice --headless --convert-to pdf:writer_pdf_Export ${document_target}.odt
The file content.xml is the actual text of the document, the rest is just the dressing (formatting). What you need to do is make sure the text you want to replace (ReplaceThis in the example) is unique apart from the spots where you want the text to be replaced. Check the content.xml to be sure, but be warned, the content.xml is a 2 line file with line 1 being the xml header. (it’s a terrible layout of the xml) Use an file editor you know well to find the words you want to replace. Also, be warned, correcting small typos in the odt results in garbage in the content.xml. You need to replace the whole word as 1 action. (Editing history has it’s uses, but is an issue here)
Instead of converting it to file you can print it as well. (DDG result)
libreoffice --headless --print-to-file --printer-name the_printer_name --outdir /tmp ${document_target}.odt lpr -U username /tmp/filename.ps -P the_printer_name rm /tmp/filename.ps