Я создаю инструмент, который может взять файл JSON, а затем создать из него PDF с помощью Go
Вот пример моего JSON:
[{"Name":"Ollie","Age":"25","Comment":"This is my comment"},{"Name":"Amy","Age":"28","Comment":"Another comment"},{"Name":"Joey","Age":"19","Comment":"Comment from Joey"},{"Name":"James","Age":"23","Comment":"James' comment"},{"Name":"Richard","Age":"20","Comment":"Richard has also made 24"}]
У меня есть кое-что, что работает с использованием файлов CSV, но теперь я хочу также иметь возможность принимать файлы JSON
Пакет, который я использую для создания PDF-файлов, - это gofpdf.
Одна из проблем заключается в том, что мне нужно передать JSON в структуру для ее чтения, структура имеет собственный настраиваемый тип - потому что я использую настраиваемый тип, я не могу передать значения в функции gofpdf, чтобы сделать PDF
Я просто хочу иметь возможность передавать значения из моей структуры (которые объявлены как строки) как строки в функциях:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"time"
"github.com/jung-kurt/gofpdf"
)
Вот моя структура:
type Person struct {
Name string `json:"Name"`
Age string `json:"Age"`
Comment string `json:"Comment"`
}
func main() {
data, err := ioutil.ReadFile("csv-to-json.json")
if err != nil {
fmt.Println(err)
}
//create variable people which is array of Person structs
var People []Person
//Take the data object (json file) and place into the People array of struct
json.Unmarshal(data, &People)
fmt.Println(People[:])
pdf := NewReport()
pdf = CreateTableJSON(pdf, People[:])
if pdf.Err() {
log.Fatalf("Failed creating PDF report: %s\n", pdf.Error())
}
err = SavePDFJSON(pdf)
if err != nil {
log.Fatalf("Cannot save PDF: %s|n", err)
}
}
func CreateTableJSON(pdf *gofpdf.Fpdf, table []Person) *gofpdf.Fpdf {
for _, str := range table {
НИЖЕ ГДЕ Я БОРЮ. str должен иметь тип строки
pdf.CellFormat(20, 7, str, "1", 0, "C", false, 0, "")
pdf.Ln(-1)
}
return pdf
}
//Create function that generates a new pdf report
func NewReport() *gofpdf.Fpdf {
pdf := gofpdf.New("P", "mm", "Letter", "")
pdf.AddPage()
pdf.SetFont("Arial", "B", 28)
pdf.Cell(40, 10, "My title for the PDF (New)!")
pdf.Ln(12)
pdf.SetFont("Arial", "", 11)
pdf.Cell(40, 10, time.Now().Format("Mon Jan 2, 2006"))
pdf.Ln(12)
return pdf
}
func SavePDFJSON(pdf *gofpdf.Fpdf) error {
return pdf.OutputFileAndClose("pdf_from_json.pdf")
}
Итак, я могу читать данные из файла JSON и выводить строки на консоль, но я не могу использовать эти данные в функциях генерации PDF, так как мне пришлось создавать пользовательские типы, а параметры функции ожидая струн. Может кто-нибудь помочь мне здесь? Мне нужен эквивалент этого:
pdf.CellFormat(20, 7, **TOSTRING(str)**, "1", 0, "C", false, 0, "")
Я бездельничал уже около 3 часов, но безуспешно
заранее спасибо

Вам необходимо реализовать (p *Person) String() string, чтобы вы могли получить строковое представление Person.
Например:
func (p *Person) String() string {
return fmt.Sprintf("%s age %d says %q", p.Name, p.Age, p.Comment)
}
// ...
pdf.CellFormat(20, 7, str.String(), "1", 0, "C", false, 0, "")
Спасибо за вашу помощь в этом, это сработало блестяще