4 ms·
I think this is great but you might need to think about your point of difference. I suspect you have a product here but it might need some refining. I asked C
by xupybd 2y ago
I think this is great but you might need to think about your point of difference.
I suspect you have a product here but it might need some refining.
I asked Claude to create me something to do this. It worked first go.
import json
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib import colors
def create_pdf_from_json(json_file, pdf_file):
# Read JSON data
with open(json_file, 'r') as file:
data = json.load(file)
# Create PDF document
doc = SimpleDocTemplate(pdf_file, pagesize=letter)
elements = []
# Add title
styles = getSampleStyleSheet()
elements.append(Paragraph("JSON Data Report", styles['Title']))
elements.append(Paragraph("\n", styles['Normal']))
# Create table data
table_data = [["Key", "Value"]]
for key, value in data.items():
table_data.append([str(key), str(value)])
# Create table
table = Table(table_data, colWidths=[200, 300])
table.setStyle(TableStyle([
('BACKGROUND', (0, 0), (-1, 0), colors.grey),
('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
('ALIGN', (0, 0), (-1, -1), 'CENTER'),
('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
('FONTSIZE', (0, 0), (-1, 0), 14),
('BOTTOMPADDING', (0, 0), (-1, 0), 12),
('BACKGROUND', (0, 1), (-1, -1), colors.beige),
('TEXTCOLOR', (0, 1), (-1, -1), colors.black),
('ALIGN', (0, 0), (-1, -1), 'CENTER'),
('FONTNAME', (0, 1), (-1, -1), 'Helvetica'),
('FONTSIZE', (0, 1), (-1, -1), 12),
('TOPPADDING', (0, 1), (-1, -1), 6),
('BOTTOMPADDING', (0, 1), (-1, -1), 6),
('GRID', (0, 0), (-1, -1), 1, colors.black)
]))
elements.append(table)
# Build PDF
doc.build(elements)
if __name__ == "__main__":
create_pdf_from_json("input.json", "output.pdf")
- its_down_again 2y agoThat's awesome! Mind sharing the prompt you used? I'm working on something pretty similar but a little more complex—looking to convert from an Excel sheet to Markdown or JSON.
- xupybd 2y agoSure, here is the prompt. Can you write me a program that can generate formatted PDFs from JSON? Preferably using the simplest of tools
- rovr138 2y agoIf it was just that, I'd probably load onto a pandas df, then export the df to json. There's other ways, but this would be a simple enough way. Check, - https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html https://pandas.pydata.org/pandas-docs/stable/reference/api/p... - https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_json.html https://pandas.pydata.org/pandas-docs/stable/reference/api/p... Try something like, import pandas as pd file_path = 'excel_file.xlsx' df = pd.read_excel(file_path, sheet_name='WORKSHEET NAME') df.to_json('output.json', orient='records', indent=4)
- rovr138 2y agoNot really. The code, as is, doesn't run. `data` isn't defined. It missed loading the json into it. Edit here, I've been testing some models today. It's a great solution, easy to fix. I like the package it chose. My head is simply on evaluating things and code. Criticizing the model and output, not directed at you.
- patafemma 2y agoThanks for the feedback! You're absolutely right: simple cases like rendering lists, tables or key-value pairs are straightforward and can be done with many different tools without much effort. But the devil is in the details. Where it gets tricky is handling more complex data structures: deeply nested objects and arrays, different date formats, varying element types and adapting the layout based on the structure. SnazzyPDF's layout engine automates those decisions. The configuration options are still limited but that's what I'm focusing on improving next.