From e98f7efa52abdc1ba22fea514232fdaff3b00ab2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Untersch=C3=BCtz?= Date: Thu, 9 Apr 2026 23:09:45 +0200 Subject: [PATCH] Initial commit: added Markdown to IHK Chemnitz PDF converter with core structure and features, including YAML config, Goldmark parser, and PDF renderer. --- README.md | 47 ++++ config.go | 15 ++ go.mod | 11 + go.sum | 11 + img-000.png | Bin 0 -> 53545 bytes img-001.png | Bin 0 -> 3815 bytes img-002.png | Bin 0 -> 3725 bytes img-003.png | Bin 0 -> 3739 bytes main.go | 61 +++++ markdown_parser.go | 222 ++++++++++++++++++ pdf_renderer.go | 549 +++++++++++++++++++++++++++++++++++++++++++++ projektarbeit.pdf | Bin 0 -> 47562 bytes report.md | 84 +++++++ test.png | Bin 0 -> 292 bytes toc_pages.txt | 98 ++++++++ 15 files changed, 1098 insertions(+) create mode 100644 config.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 img-000.png create mode 100644 img-001.png create mode 100644 img-002.png create mode 100644 img-003.png create mode 100644 main.go create mode 100644 markdown_parser.go create mode 100644 pdf_renderer.go create mode 100644 projektarbeit.pdf create mode 100644 report.md create mode 100644 test.png create mode 100644 toc_pages.txt diff --git a/README.md b/README.md index e69de29..50a5f2a 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,47 @@ +# Markdown to IHK Chemnitz PDF Converter + +Dieses Tool konvertiert Markdown-Dateien in professionelle Projektdokumentationen, die den formalen Anforderungen der **IHK Chemnitz** (IT-Berufe, Stand 2020/2026) entsprechen. + +## Features + +- **IHK-konforme Formatierung**: Automatische Einhaltung von Seitenrändern (30mm links, 40mm Korrekturrand rechts), Schriftarten und Zeilenabständen. +- **Paging in Tabellen**: + - **Tabellen-Pagination**: Automatisches Wiederholen der Kopfzeile auf Folgeseiten. + - **Fortsetzungs-Markierung**: Kennzeichnung von umgebrochenen Tabellen mit "(Fortsetzung)". + - **Tabellen-Fußzeile**: Seitennummerierung und Projektdaten in einer sauberen Tabellenstruktur am Seitenende. +- **Diagramme via Kroki**: Unterstützung für Mermaid, PlantUML und andere Formate direkt im Markdown. +- **Automatisierte Verzeichnisse**: + - Inhaltsverzeichnis mit korrekter Paginierung (römisch/arabisch). + - Literaturverzeichnis (sortiert). + - Anlagenverzeichnis. +- **Metadaten**: Einfache Konfiguration von Schüler- und Projektdaten via YAML-Frontmatter. + +## Installation + +Stellen Sie sicher, dass [Go](https://golang.org/) installiert ist. + +```bash +git clone https://github.com/ihk-markdown-renderer +cd MarkdownToIHKChemnits +go mod tidy +``` + +## Benutzung + +1. Erstellen Sie eine `report.md` mit YAML-Frontmatter (siehe Beispiel). +2. Führen Sie den Konverter aus: + +```bash +go run . -i report.md -o projektarbeit.pdf +``` + +## Projektstruktur + +- `main.go`: Einstiegspunkt und Orchestrierung. +- `markdown_parser.go`: AST-Parsing und Integration der Goldmark-Extensions. +- `pdf_renderer.go`: FPDF-Logik für IHK-Layout, Tabellen-Paging und Fußzeilen. +- `config.go`: Konfigurationsstrukturen. + +## Lizenz + +MIT diff --git a/config.go b/config.go new file mode 100644 index 0000000..d12db3e --- /dev/null +++ b/config.go @@ -0,0 +1,15 @@ +package main + +type Config struct { + Student struct { + Name string `yaml:"name"` + Profession string `yaml:"profession"` + Company string `yaml:"company"` + Supervisor string `yaml:"supervisor"` + } `yaml:"student"` + Project struct { + Title string `yaml:"title"` + Period string `yaml:"period"` + Subtitle string `yaml:"subtitle"` + } `yaml:"project"` +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..f7b17cc --- /dev/null +++ b/go.mod @@ -0,0 +1,11 @@ +module MarkdownToIHKChemnits + +go 1.26.1 + +require ( + github.com/go-pdf/fpdf v0.9.0 // indirect + github.com/yuin/goldmark v1.8.1 // indirect + github.com/yuin/goldmark-meta v1.1.0 // indirect + gopkg.in/yaml.v2 v2.3.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..1ab40c3 --- /dev/null +++ b/go.sum @@ -0,0 +1,11 @@ +github.com/go-pdf/fpdf v0.9.0 h1:PPvSaUuo1iMi9KkaAn90NuKi+P4gwMedWPHhj8YlJQw= +github.com/go-pdf/fpdf v0.9.0/go.mod h1:oO8N111TkmKb9D7VvWGLvLJlaZUQVPM+6V42pp3iV4Y= +github.com/yuin/goldmark v1.8.1 h1:id2TeYXe5FpqwLco0Pso4cNM5Z6Okt4g7kDw9QBMhTA= +github.com/yuin/goldmark v1.8.1/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= +github.com/yuin/goldmark-meta v1.1.0 h1:pWw+JLHGZe8Rk0EGsMVssiNb/AaPMHfSRszZeUeiOUc= +github.com/yuin/goldmark-meta v1.1.0/go.mod h1:U4spWENafuA7Zyg+Lj5RqK/MF+ovMYtBvXi1lBb2VP0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/img-000.png b/img-000.png new file mode 100644 index 0000000000000000000000000000000000000000..b44b62ac0ef0cf877695ba6979fb576c25753ae7 GIT binary patch literal 53545 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%0D=b(n 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 s2ErifyW4gdfE literal 0 HcmV?d00001 diff --git a/img-001.png b/img-001.png new file mode 100644 index 0000000000000000000000000000000000000000..d82561612b820fc71cefaa6783f915b84ba97fef GIT binary patch literal 3815 zcmV$#TZO%&KmHq_~Lt3Q3%iW~_OK7asfg!r=(t z{15wX`($72upKi`8cC!?QWPaF;)Y(T(g$<{BuD@yi6THEGeYV>lLQ+-ewmfEWs%^X z+h*X5jccm3-#D~8hE3H6t zQh&dvv_f0`WYquLJEaxqiGbAilvXe=s=xb9X$8VE#(n&2uCzkTgCnkgdhe80SlnVu z`Kvvp74ivLgbn|(>y=hWj2AD&yN8L=>TS8Ou+8UQ{D;yCmso!AUTFpSB0z9^FV2)! z5G#V1`rA#V6@ZHfB$ep&-I3Djoo@jI*eX80_DU3&(Q&^0U(F&CFBGsgL8$ zZKc&yTVz1&oEE3hO{5Fj^30L>w5hauj0iT&k8&QlcUwv;AZ(G0P-4vC8>Q9ZBN`^+l9sJYBo^DR zl~%Wr`8NA-spEIYM8s_teR!j^g0)r2w-1z7Xxu{e za10sMi z>WP=beAyOKGnyHD`uY%F02ua4>$)}(jej8Lt=oME(;y&9>mscS+9Co-d`@xp;UfU? zp&W)$TOcAh78l2#U)KTnOJh32P7Amiw_L<2;%s;KJdo57wTV}nM7Y@G&dAxPlP`cU z4D*SRDN+a`A|@sXB(6*Ba%+A+P+C_zKWz$Y<*pw;YtN@Gaxqbd=oD@Lp|q|^POk?> zN85)=>$0?%i*bl6S*WMecd629!_~ zgJtQ7SnGVp$1)<~lY^x&TK{t3L@K%X5iPet;(- zPj1If5P7kFv>f0b2FGDFB5Iu4F{5g4By?#%=YH`|kw zdL&?HTk)u%RgPa@rWQ9n?s8l!v`2&1Y{U@fx=3CCu<_{|SqRbAn5__yw>y$4X%!kW zt@s3@miAiLwzxMS<{6%de3ua&5kOvz%=UhCdv=xx3(}~Grpdf;OuE$Qv4Er;ZzPZh z3CX~PtES}!Anx2I5_=I3d{|9J0~V7bGdWwA_|N{$zXUfyS*sZN=%QH_ut)R-hQ^cw#Q`W%Tz>TVL<_BE;#* z%ZZ6T(&7QnvzpIIlC!bAxj3P5E1l@=vnPbNQ@-2eA~sHi7~MtdA>Y1|4P=c3PlJ?i() z6&lz)t8FMEHE!$Wud1!U-ZfXxHxBQ)wr)(L1Z(#!pR_2W*OKv(tCTpv$0^xwZ5vYt^w9@lx%GP z-Z!J`ozvEBtwIq4ALoZJ=SDeW%^-R?V#Q_@B|ER&g)IO|tK&GAbXCUzhF`vS zN~?F9$najs>>kz!uvgvbz7%%*aSLFQZ2HCjs?z=$&&x$M!j z_7elrtP16Z^5}0Cl~!*P1}LGmRim_eoAF|NGV!O1js}Kgr8%)1d-Oy{nnTPv_I~MU zW3EYQ^{`wx$HIJLhHhZ`i4r)^c-sS9Ja(Qw`?Jnfhgl_YGpiM)6=t^1kDuy_q|mtK zCZ3EctaIq)ycA|bt2=>ZR41984OR90i|Vg##y}f#2MX%9uVEnVC$35$_-?6 zH??(Jn=(vh?Sn_NWtCmkR`<9S3)P-A+Un-ncuK2-)vLhrByedJl+;2)sK1qm<&MxYxyz%KX{feBEb^(DUFrAP1#)N3#qd*4ru$9n&h(}^TKG{<5eYtN zzB*m$@99VK{XJ2>G4G0wrOFAcJ^lIT{+$(dSK<~$PGCW2OUrtGV!)ZgR>+d~Kdkog z95T5h+D#*qlh6FzT0c*lysdQ(^v$%0Da)%rJ-`5HYtZACcn`SB>bjm+9WwR+C!p!) zRSbeB%7A;Kg=d(l#bz=7Tcu?H+-CI#-&WTs|KgvooSpyhx8=+DcC{sU%@s*xY+FrEybkL3}A6To8*XE(x z3bbTqK4dZKh^vz&(>(9FS-+ixKyV-s5j+t*H;$hM2m*o-l@+pJM7(DvF20VUc)ah^ zl}JDkh+{ZIr*Q`Wm7_TNj0gGXPm3WbEQpEeN)=WjQ1Ks#Knx;ckS|8|NE-iyh=ho| z2ndj@`2PNDOGE@>$&hD`I%>*NX4$1n6Cnw|fDJKAd^Hy@&U9-0tqh2$0fLAKTxzQM z8br+O%0oB{Z=^n5%Li~?NIY?;zg|-HnMH0NPlwPtOOl)o#B>N~ws}}m1C=Qh$Hg@+ z1n5D;o(X9AYQwYpb1k2Pea?B8KA3P0uA7xb6GCgel6phprLBWxir*O(S6c)k+tga) zMtPr!h|BZEil-ID*6afa?j&{w2%BkauxgTUJKgZD#FPG7oYr|Hr^R0OCA)uZZ=!um{D6I?ap|j$twZ5K&7=ql9rNrC6m@HCSZ7rg-zhWlje)OSX zE>G}QT7WdV*=@Dqgcy>^)VgJ(o_INKUECZkjTHw1IA57v1~hJ6qUA+I{3W$P9K=Tt z=b*H%(^f0UH{zCO!Nlt9mrW7zP{b`T}6Lp)uBYU|owVrx#TAueLZgUW@e52aNs zo)K|*yAzEc;>r4#PSe_9kQQ+D*rWuLOEJFUFvWZChu0l3bsjG*0UEb@SouVw0deQ7h=ltksn8uR&QQ# zIZ+m`J%Q5dtu5nH=l$gK5v3K*-W&N@<1kszo@pD>W#sAZ@{!nMdPFE2v8? zsE^l{ptJ&)ZzbdNq_lckmRsZ?^R$K=C;)fgE#}OSOCQhNzXu<~TnL z*=fG^cet4vvO^HJ{LFF$^~5l%V|5)$D>TZFKbpjimA=03Ha=g2(h9ZZ1-ijn&i9?x d-VIh5`+vudHHwg- literal 0 HcmV?d00001 diff --git a/img-002.png b/img-002.png new file mode 100644 index 0000000000000000000000000000000000000000..d2ab603fb75fe94b0848ddcc7de7275c3357af7b GIT binary patch literal 3725 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 literal 0 HcmV?d00001 diff --git a/img-003.png b/img-003.png new file mode 100644 index 0000000000000000000000000000000000000000..a23f7f9f5830694e16ea2d7408ae933747fa50c3 GIT binary patch literal 3739 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 0 { + dots := "" + dotWidth := r.pdf.GetStringWidth(".") + for i := 0; float64(i)*dotWidth < availableWidth; i++ { + dots += "." + } + r.pdf.CellFormat(availableWidth, lineHt, dots, "", 0, "L", false, 0, "") + } + + r.pdf.CellFormat(pageWidth+2, lineHt, pageStr, "", 1, "R", false, 0, "") + } +} + +func (r *IHKRenderer) RecordHeader(level int, title string) { + if r.numType != NumArabic { + return // Exclude front matter from TOC per IHK example + } + + displayPage := r.pdf.PageNo() - r.pageOffset + pageStr := strconv.Itoa(displayPage) + if displayPage <= 0 { + pageStr = "1" // Fallback + } + + r.tocItems = append(r.tocItems, TOCItem{ + Level: level, + Title: title, + PageStr: pageStr, + }) +} + +func (r *IHKRenderer) RecordTable(title string) { + displayPage := r.pdf.PageNo() - r.pageOffset + pageStr := strconv.Itoa(displayPage) + if displayPage <= 0 { + pageStr = "1" + } + r.tableItems = append(r.tableItems, TableItem{ + Title: title, + PageStr: pageStr, + }) +} + +func (r *IHKRenderer) RenderListOfTables() { + if len(r.tableItems) == 0 { + return + } + r.pdf.AddPage() + r.pdf.SetFont("Helvetica", "B", 14) + r.pdf.CellFormat(0, 20, r.tr("Tabellenverzeichnis"), "", 1, "L", false, 0, "") + r.pdf.Ln(5) + + totalWidth, _ := r.pdf.GetPageSize() + lm, _, rm, _ := r.pdf.GetMargins() + usableWidth := totalWidth - lm - rm + + r.pdf.SetFont("Helvetica", "B", 12) + r.pdf.CellFormat(usableWidth-20, 10, r.tr("Titel"), "", 0, "L", false, 0, "") + r.pdf.CellFormat(20, 10, r.tr("Seite"), "", 1, "R", false, 0, "") + r.pdf.Ln(2) + + r.pdf.SetFont("Helvetica", "", 12) + _, lineHt := r.pdf.GetFontSize() + lineHt *= 1.5 + + for _, item := range r.tableItems { + title := r.tr(item.Title) + pageStr := item.PageStr + titleWidth := r.pdf.GetStringWidth(title) + pageWidth := r.pdf.GetStringWidth(pageStr) + availableWidth := usableWidth - titleWidth - pageWidth - 4 + + r.pdf.CellFormat(titleWidth+2, lineHt, title, "", 0, "L", false, 0, "") + if availableWidth > 0 { + dots := "" + dotWidth := r.pdf.GetStringWidth(".") + for i := 0; float64(i)*dotWidth < availableWidth; i++ { + dots += "." + } + r.pdf.CellFormat(availableWidth, lineHt, dots, "", 0, "L", false, 0, "") + } + r.pdf.CellFormat(pageWidth+2, lineHt, pageStr, "", 1, "R", false, 0, "") + } +} + +func (r *IHKRenderer) RenderTitlePage() { + r.numType = NumNone + + // Temporary symmetrical margins for title page to ensure visual centering + oldLM, oldTM, oldRM, _ := r.pdf.GetMargins() + r.pdf.SetMargins(30, 20, 30) + + r.pdf.AddPage() + + r.pdf.SetFont("Helvetica", "B", 16) + r.pdf.CellFormat(0, 20, r.tr("Abschlussprüfung zum ..."), "", 1, "C", false, 0, "") + r.pdf.CellFormat(0, 10, r.tr(r.config.Student.Profession), "", 1, "C", false, 0, "") + + r.pdf.Ln(30) + r.pdf.SetFont("Helvetica", "", 12) + r.pdf.CellFormat(0, 10, r.tr("Projektarbeit von"), "", 1, "C", false, 0, "") + r.pdf.Ln(5) + r.pdf.SetFont("Helvetica", "B", 14) + r.pdf.CellFormat(0, 10, r.tr(r.config.Student.Name), "", 1, "C", false, 0, "") + + r.pdf.Ln(30) + r.pdf.SetFont("Helvetica", "B", 16) + r.pdf.MultiCell(0, 10, r.tr(r.config.Project.Title), "", "C", false) + + r.pdf.SetY(-80) + r.pdf.SetFont("Helvetica", "", 12) + r.pdf.CellFormat(60, 10, r.tr("Prüfungsperiode:"), "", 0, "L", false, 0, "") + r.pdf.CellFormat(0, 10, r.tr(r.config.Project.Period), "", 1, "L", false, 0, "") + + r.pdf.CellFormat(60, 10, r.tr("Ausbildungsbetrieb:"), "", 0, "L", false, 0, "") + r.pdf.CellFormat(0, 10, r.tr(r.config.Student.Company), "", 1, "L", false, 0, "") + + r.pdf.CellFormat(60, 10, r.tr("Projektbetreuer:"), "", 0, "L", false, 0, "") + r.pdf.CellFormat(0, 10, r.tr(r.config.Student.Supervisor), "", 1, "L", false, 0, "") + + // Restore margins for the rest of the document + r.pdf.SetMargins(oldLM, oldTM, oldRM) +} + +func (r *IHKRenderer) RenderDeclarationPage() { + r.numType = NumNone + r.pdf.AddPage() + + r.pdf.SetFont("Helvetica", "B", 14) + r.pdf.CellFormat(0, 20, r.tr("Erklärung"), "", 1, "C", false, 0, "") + r.pdf.Ln(10) + + r.pdf.SetFont("Helvetica", "", 12) + text := fmt.Sprintf("Ich versichere durch meine Unterschrift, dass ich diese Projektarbeit mit dem Thema „%s“ selbstständig, ohne fremde Hilfe angefertigt, alle Stellen, die ich wörtlich oder annähernd wörtlich aus Veröffentlichungen entnommen, als solche kenntlich gemacht und mich auch keiner anderen als der angegebenen Literatur oder sonstiger Hilfsmittel bedient habe. Die Projektarbeit hat in dieser oder ähnlicher Form weder der Industrie- und Handelskammer Chemnitz noch einer anderen Prüfungsinstitution vorgelegen.", r.config.Project.Title) + + r.pdf.MultiCell(0, 7.5, r.tr(text), "", "J", false) + + r.pdf.Ln(20) + r.pdf.CellFormat(0, 10, r.tr("Ort, Datum, Unterschrift (mit Vor- und Nachnamen)"), "", 1, "L", false, 0, "") +} + +func (r *IHKRenderer) RenderHeader(level int, title string) { + if level == 1 { + r.pdf.AddPage() // New page for major sections? Maybe optional. + } + r.RecordHeader(level, title) + r.pdf.SetFont("Helvetica", "B", 14) + r.pdf.Ln(5) + r.pdf.CellFormat(0, 10, r.tr(title), "", 1, "L", false, 0, "") + r.pdf.Ln(2) +} + +func (r *IHKRenderer) RenderParagraph(text string) { + r.pdf.SetFont("Helvetica", "", 12) + // Line height for 12pt is 12pt * 1.5 = 18pt. + // 18pt is approx 6.35mm. + r.pdf.MultiCell(0, 7.5, r.tr(text), "", "J", false) + r.pdf.Ln(4) +} + +func (r *IHKRenderer) RenderListItem(text string, bullet bool, index int) { + r.pdf.SetFont("Helvetica", "", 12) + prefix := "• " + if !bullet { + prefix = strconv.Itoa(index) + ". " + } + + currentX := r.pdf.GetX() + r.pdf.SetX(currentX + 10) + r.pdf.MultiCell(0, 7.5, r.tr(prefix+text), "", "J", false) + r.pdf.SetX(currentX) +} + +func (r *IHKRenderer) RenderTable(data [][]string) { + if len(data) == 0 { + return + } + + r.tableCount++ + tableTitle := fmt.Sprintf("Tab. %d", r.tableCount) + r.RecordTable(tableTitle) + + r.pdf.SetFont("Helvetica", "B", 10) + header := data[0] + + // Calculate column widths + numCols := len(header) + totalWidth, _ := r.pdf.GetPageSize() + lm, _, rm, _ := r.pdf.GetMargins() + usableWidth := totalWidth - lm - rm + colWidth := usableWidth / float64(numCols) + + // Function to render header with optional "(Fortsetzung)" + renderHeader := func(continued bool) { + r.pdf.SetFont("Helvetica", "B", 10) + title := tableTitle + if continued { + title += " (Fortsetzung)" + } + r.pdf.CellFormat(0, 10, r.tr(title), "", 1, "L", false, 0, "") + + r.pdf.SetFillColor(230, 230, 230) + for _, col := range header { + r.pdf.CellFormat(colWidth, 10, r.tr(col), "1", 0, "C", true, 0, "") + } + r.pdf.Ln(-1) + } + + renderHeader(false) + + r.pdf.SetFont("Helvetica", "", 10) + r.pdf.SetFillColor(255, 255, 255) + + for i := 1; i < len(data); i++ { + row := data[i] + + // Check for page break + _, pageH := r.pdf.GetPageSize() + _, _, _, bm := r.pdf.GetMargins() + if r.pdf.GetY()+10 > pageH-bm { + r.pdf.AddPage() + renderHeader(true) + r.pdf.SetFont("Helvetica", "", 10) + } + + for _, col := range row { + r.pdf.CellFormat(colWidth, 10, r.tr(col), "1", 0, "L", false, 0, "") + } + r.pdf.Ln(-1) + } + r.pdf.Ln(5) +} + +func (r *IHKRenderer) RenderImage(path string, caption string) { + r.pdf.Ln(5) + + info := r.pdf.GetImageInfo(path) + if info == nil { + // Try to register it first + r.pdf.RegisterImageOptions(path, fpdf.ImageOptions{ReadDpi: true}) + info = r.pdf.GetImageInfo(path) + } + + if info == nil { + r.pdf.CellFormat(0, 10, r.tr("[Fehler beim Laden des Bildes: "+path+"]"), "1", 1, "C", false, 0, "") + return + } + + // Calculate dimensions in mm + // 1 point = 0.352778 mm + imgW := info.Width() * 0.352778 + imgH := info.Height() * 0.352778 + + maxWidth := 140.0 + displayW := imgW + displayH := imgH + + if displayW > maxWidth { + ratio := maxWidth / displayW + displayW = maxWidth + displayH = displayH * ratio + } + + // Check if we need a new page + _, pageH := r.pdf.GetPageSize() + _, _, _, bottomMargin := r.pdf.GetMargins() + currentY := r.pdf.GetY() + + if currentY+displayH+15 > pageH-bottomMargin { + r.pdf.AddPage() + currentY = r.pdf.GetY() + } + + // Center horizontally + posX := 30.0 + (maxWidth-displayW)/2 + + r.pdf.ImageOptions(path, posX, currentY, displayW, displayH, false, fpdf.ImageOptions{ReadDpi: true}, 0, "") + + // Move Y after the image + r.pdf.SetY(currentY + displayH + 2) + + if caption != "" { + r.pdf.SetFont("Helvetica", "I", 10) + r.pdf.CellFormat(0, 10, r.tr(caption), "", 1, "C", false, 0, "") + } + r.pdf.Ln(5) +} + +func (r *IHKRenderer) StartMainBody() { + r.numType = NumArabic + // The current page is the last Roman page + // So the next page will be display page 1 + r.pageOffset = r.pdf.PageNo() +} + +func (r *IHKRenderer) StartFrontMatter() { + r.numType = NumRoman +} + +func (r *IHKRenderer) RenderBibliography() { + if len(r.sources) == 0 { + return + } + // RenderHeader(1, ...) already adds a page + r.RenderHeader(1, "Literaturverzeichnis") + r.pdf.Ln(5) + + r.pdf.SetFont("Helvetica", "", 12) + + // IHK Rule 2.8.1: Sort by author name + sort.Strings(r.sources) + + for _, source := range r.sources { + r.pdf.MultiCell(0, 7.5, r.tr("- "+source), "", "J", false) + r.pdf.Ln(2) + } +} + +func (r *IHKRenderer) RenderAppendices() { + if len(r.appendices) == 0 { + return + } + + // RenderHeader(1, ...) already adds a page + r.RenderHeader(1, "Anhang") + r.pdf.Ln(5) + + r.pdf.SetFont("Helvetica", "B", 12) + r.pdf.CellFormat(0, 10, r.tr("Anlagenverzeichnis"), "", 1, "L", false, 0, "") + r.pdf.SetFont("Helvetica", "", 12) + for i, app := range r.appendices { + r.pdf.CellFormat(0, 10, r.tr(fmt.Sprintf("Anlage %d: %s", i+1, app.Title)), "", 1, "L", false, 0, "") + } + + for i, app := range r.appendices { + r.pdf.AddPage() + r.pdf.SetFont("Helvetica", "B", 12) + r.pdf.CellFormat(0, 10, r.tr(fmt.Sprintf("Anlage %d: %s", i+1, app.Title)), "", 1, "L", false, 0, "") + r.pdf.Ln(5) + + info := r.pdf.GetImageInfo(app.Path) + if info == nil { + r.pdf.RegisterImageOptions(app.Path, fpdf.ImageOptions{ReadDpi: true}) + info = r.pdf.GetImageInfo(app.Path) + } + + if info != nil { + imgW := info.Width() * 0.352778 + imgH := info.Height() * 0.352778 + + maxWidth := 140.0 + // Scale to full width + displayW := maxWidth + ratio := displayW / imgW + displayH := imgH * ratio + + // Check if it fits on page height, if not, scale down + _, pageH := r.pdf.GetPageSize() + _, _, _, bottomMargin := r.pdf.GetMargins() + availableH := pageH - r.pdf.GetY() - bottomMargin - 10 + + if displayH > availableH { + ratio := availableH / displayH + displayH = availableH + displayW = displayW * ratio + } + + posX := 30.0 + (140.0-displayW)/2 + r.pdf.ImageOptions(app.Path, posX, r.pdf.GetY(), displayW, displayH, false, fpdf.ImageOptions{ReadDpi: true}, 0, "") + } else { + r.pdf.CellFormat(0, 10, r.tr("[Bild konnte nicht geladen werden]"), "1", 1, "C", false, 0, "") + } + } +} + +func (r *IHKRenderer) AddAppendix(titlePath string) { + parts := strings.Split(titlePath, "|") + if len(parts) < 2 { + return + } + title := strings.TrimSpace(parts[0]) + path := strings.TrimSpace(parts[1]) + + r.appendices = append(r.appendices, Appendix{Title: title, Path: path}) +} + +func (r *IHKRenderer) AddSource(source string) { + // Normalize and store + source = strings.TrimSpace(source) + if source == "" { + return + } + + // Prevent duplicates + for _, s := range r.sources { + if s == source { + return + } + } + r.sources = append(r.sources, source) +} + +func (r *IHKRenderer) Save(filename string) error { + return r.pdf.OutputFileAndClose(filename) +} + +func toRoman(n int) string { + if n <= 0 { + return "" + } + values := []int{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1} + symbols := []string{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"} + + res := "" + for i := 0; i < len(values); i++ { + for n >= values[i] { + n -= values[i] + res += symbols[i] + } + } + return res +} diff --git a/projektarbeit.pdf b/projektarbeit.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0f7020e5f4071d80ce2b5447462dd76ccbfce5bb GIT binary patch literal 47562 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

  • $W>_dQKLct6BErSkl?20vXP5|3 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 B(Go Parser) + B --> C{Metadata?} + C -->|Ja| D[Config] + C -->|Nein| E[Default] + D --> F[PDF Renderer] + E --> F + F --> G[IHK PDF] +``` + +### Klassen-Diagramm (PlantUML) +```puml +@startuml +class IHKRenderer { + +RenderTOC() + +RenderBibliography() + +RenderAppendices() +} +IHKRenderer o-- TOCItem +IHKRenderer o-- Appendix +@enduml +``` + +## 2.2 Realisierung +Die Realisierung erfolgt in Go unter Verwendung von `goldmark` und `fpdf`. + +| Tool | Zweck | +|------|-------| +| Go | Programmiersprache | +| Goldmark | Markdown Parser | +| FPDF | PDF Renderer | + +@Quelle: Goldmark Documentation, https://github.com/yuin/goldmark, 2024 +> Quelle: Go-PDF/Fpdf Documentation, https://github.com/go-pdf/fpdf, 2025 + +# 3. Zusammenfassung + +Das Tool ermöglicht eine effiziente Erstellung von Dokumentationen unter Einhaltung aller Formatvorgaben. + +@Quelle: IHK Chemnitz, Hinweise zur Erarbeitung der Dokumentation, 2020 + +@Anhang: Architektur Diagramm | test.png +@Anhang: Datenbank Schema | test.png + +@AnhangUML: Sequenzdiagramm Generierung +```puml +@startuml +User -> Generator: Markdown +Generator -> Kroki: Code +Kroki -> Generator: PNG +Generator -> PDF: Embed +@enduml +``` diff --git a/test.png b/test.png new file mode 100644 index 0000000000000000000000000000000000000000..9f603b4fea71f60e7b95bff19ea9639134736f4f GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^DImmdKI;Vst0HN7o6951J literal 0 HcmV?d00001 diff --git a/toc_pages.txt b/toc_pages.txt new file mode 100644 index 0000000..960cf0f --- /dev/null +++ b/toc_pages.txt @@ -0,0 +1,98 @@ +Hinweise zur Erarbeitung der Dokumentation über die Projektarbeit + für die Abschlussprüfung in IT-Berufen + +1 VORBEMERKUNGEN + In einer fachübergreifenden Projektarbeit soll nachgewiesen werden, + eine komplexe Problemstellung der betrieblichen Praxis erfassen, + darstellen, beurteilen und lösen zu können. Der Rahmen der The- + menstellungen ergibt sich aus den Prüfungsanforderungen. Sie muss + die betriebliche Praxis des Prüfungsteilnehmers berücksichtigen. Bei + der Bearbeitung Ihrer Projektarbeit (PJA) übernehmen Sie die Rolle + eines Mitarbeiters im IT-Bereich, der nicht nur Lösungsvorschläge in + diesem Umfeld erarbeitet, sondern diese auch gegenüber einem + Fachgremium (das auch die Geschäftsleitung oder der Kunde sein + kann) zu vertreten hat (Präsentation/ Fachgespräch). Dabei sollen + Sie nicht nur Ihre neu hinzugewonnenen technischen und kaufmän- + nischen Kenntnisse anwenden, sondern auch durch Ihre Energie, + Kreativität und Ideen unter Beweis stellen, dass Sie über die erfor- + derliche Handlungskompetenz verfügen, um Ihr Team effektiver und + das gesamte Unternehmen wettbewerbsfähiger zu machen. + + Für die Gestaltung der PJA gibt es inzwischen reichlich Informations- + schriften und Handreichungen. Aus den langjährigen Prüfungserfah- + rungen der Prüfungsausschüsse der IHK Chemnitz ergeben sich As- + pekte, aus denen sich einige Ratschläge ableiten. + + Mit diesen Hinweisen will die IHK Chemnitz auf diese Belange ein- + gehen und damit zur allgemeinen Information der Prüfungsteilneh- + mer beitragen. + 2 AUFBAU EINER PROJEKTARBEIT +2.1 BESTANDTEILE +Übersicht Eine PJA sollte sich aus nachfolgenden Elementen zusam- + mensetzen: + + 1 Titelblatt1 + + 2 Inhaltsverzeichnis2 + + 3 Ggf. Abkürzungsverzeichnis2 + + 4 Vorwort/ Einleitung2 + Textteil (Problemstellung, betriebliche/ kundengerechte + 5 + Dokumentation der Ergebnisse, Zusammenfassung inkl. + Zeitplanung)3 + 6 Literaturverzeichnis3 + + 7 Ggf. Abbildungs-/ Tabellenverzeichnis3 + + 8 Ggf. Anlagenverzeichnis3 + + 9 Ggf. Glossar3 + + 10 Ggf. Stichwortverzeichnis3 + + 11 Erklärung4 + + Tab. 1: Komponenten einer Projektarbeit + 2.2 TITELBLATT +Übersicht Das Titelblatt enthält alle für diesen Prüfungsteil erforderlichen Da- + ten. + + + + +V orl ag e + + Abb. 1: Tit el bla tt der Proj ekt ar b eit + Abschlussprüfung zum + + + Projektarbeit von + + + Max Mustermann + + + Thema der Projektarbeit + + + + + Prüfungsperiode: + + Ausbildungsbetrieb + (bzw. Praktikumsbetrieb): + + Projektbetreuer + + + + +2.3 INHALTSVERZEICHNIS +Inhalt Das Inhaltsverzeichnis zeigt die Gliederung der PJA und muss ent- + sprechend der DIN 5008 durchnummeriert und mit Seitenangaben + versehen werden. Es sollte das Thema differenziert aufschlüsseln, + logisch aufgebaut, deutlich formuliert und übersichtlich dargestellt + werden. + \ No newline at end of file