Seit tagen versuche ich eine PDF Dokument zu erstellen, die Seite zu zeichnen und das Dokument zu speichern. Die einzelnen Elemente davon sind mir klar, aber das ganze zusammen zu bauen, damit habe ich noch Mühe und ein paar Fragen dazu.
// FRAGE:
- was muss in PrintFormatter rein?
- Wie kann ich den Dateinamen ändern
- wo Muss ich meinen Inhalt zeichnen
- Wenn ich in einer anderen Methode zeichne, was muss ich dann für ein Objekt zurück geben? attributed String? Und wenn ja, was mache idh dann damit?
Siehe Quelltext und die Fragen dort
Danke im voraus für die Hilfe
Alles anzeigen
// FRAGE:
- was muss in PrintFormatter rein?
- Wie kann ich den Dateinamen ändern
- wo Muss ich meinen Inhalt zeichnen
- Wenn ich in einer anderen Methode zeichne, was muss ich dann für ein Objekt zurück geben? attributed String? Und wenn ja, was mache idh dann damit?
Siehe Quelltext und die Fragen dort
Danke im voraus für die Hilfe
Quellcode
- import Foundation
- import UIKit
- class PdfErstellung {
- static func PdfErstellen(_ auswahlZeilen : [LebensmittelDataTV], _ vitalstoffWerteListe : [LebensmittelDataTV], _ heuteString : String) {
- let formatter = UIMarkupTextPrintFormatter(markupText: textView.text)
- // FRAGE: was muss hier rein?
- let render = UIPrintPageRenderer()
- render.addPrintFormatter(formatter, startingAtPageAt: 0)
- let page = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) // A4, 72 dpi
- let printable = page.insetBy(dx: 0, dy: 0)
- render.setValue(NSValue(cgRect: page), forKey: "paperRect")
- render.setValue(NSValue(cgRect: printable), forKey: "printableRect")
- // 4. Create PDF context and draw
- let rect = CGRect.zero
- let pdfData = NSMutableData()
- UIGraphicsBeginPDFContextToData(pdfData, rect, nil)
- for i in 1...render.numberOfPages {
- UIGraphicsBeginPDFPage();
- let bounds = UIGraphicsGetPDFContextBounds()
- render.drawPage(at: i - 1, in: bounds)
- // Frage1: MUSS das zeichnen HIER STATTFINDEN? oder woanders?
- // Frage2: Wenn ich in einer anderen Methode zeichne, was muss ich dann für ein Objekt zurück geben? attributed String? Und wenn ja, was mache idh dann damit?
- attributedString = DrawPDF(auswahlZeilen, vitalstoffWerteListe, heuteString)
- }
- let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
- // Frage: kann ich so das Datum in den Filename einfügen? (den String ersetzt ich in Zukunft mit einer Variable, die ich übergeben bekomme)
- let datum : String = " 20.09.2018"
- pdfData.write(toFile: "\(documentsPath)/Vitalstroffcontroller/Vitalstoffliste\(datum) new.pdf", atomically: true)
- print("saved success")
- }
- static func DrawPDF(_ auswahlZeilen : [LebensmittelDataTV], _ vitalstoffWerteListe : [LebensmittelDataTV], _ heuteString : String) -> NSAttributedString {
- var y = 0
- var stringReckteckX50 = CGRect(x: 50, y: y, width: 100, height: 20)
- var stringReckteckX160 = CGRect(x: 160, y: y, width: 30, height: 20)
- var stringReckteckX170 = CGRect(x: 170, y: y, width: 10, height: 20)
- var stringReckteckX220 = CGRect(x: 220, y: y, width: 100, height: 20)
- var stringReckteckX330 = CGRect(x: 330, y: y, width: 30, height: 20)
- var stringReckteckX340 = CGRect(x: 340, y: y, width: 10, height: 20)
- var paragraphStyle = NSMutableParagraphStyle()
- var font = UIFont(name: "Helvetica Bold", size: 20.0)
- var text = ""
- let attributes = [
- NSAttributedString.Key.paragraphStyle: paragraphStyle,
- NSAttributedString.Key.font: font!,
- NSAttributedString.Key.foregroundColor: UIColor.black
- ]
- var attributedString = NSAttributedString(string: text, attributes: attributes)
- // ÜBERSCHRIFT
- font = UIFont(name: "Helvetica Bold", size: 20.0)
- text = "Tagesbedarf in % vom " + heuteString
- paragraphStyle.alignment = .left
- var stringReckteck = CGRect(x: 50, y: 50, width: 300, height: 40)
- attributedString.draw(in: stringReckteck)
- // Vitalstoffwerte Liste
- y = 80
- for zeile in 0..<vitalstoffWerteListe.count {
- let druckenVitalstoffWerte = vitalstoffWerteListe[zeile]
- if druckenVitalstoffWerte.zeilenInfoID == 0 { // Überschrift
- y = y + 10
- font = UIFont(name: "Helvetica Bold", size: 14.0)
- text = druckenVitalstoffWerte.name
- attributedString.draw(in: stringReckteckX50)
- } else { // Detail
- font = UIFont(name: "Helvetica", size: 12.0)
- text = druckenVitalstoffWerte.name
- attributedString.draw(in: stringReckteckX50)
- text = druckenVitalstoffWerte.anzahl
- paragraphStyle.alignment = .right
- attributedString.draw(in: stringReckteckX160)
- paragraphStyle.alignment = .left
- text = druckenVitalstoffWerte.masse
- attributedString.draw(in: stringReckteckX170)
- }
- y = y + 30
- }
- y = 80
- text = "Lebensmittel"
- font = UIFont(name: "Helvetica Bold", size: 14.0)
- paragraphStyle.alignment = .left
- attributedString.draw(in: stringReckteckX220)
- // Vitalstoffwerte Liste
- y = 120
- for zeile in 0..<vitalstoffWerteListe.count {
- let anzahlZeilen = vitalstoffWerteListe[zeile]
- font = UIFont(name: "Helvetica", size: 12.0)
- text = anzahlZeilen.name
- attributedString.draw(in: stringReckteckX220)
- text = anzahlZeilen.anzahl
- paragraphStyle.alignment = .right
- attributedString.draw(in: stringReckteckX330)
- paragraphStyle.alignment = .left
- text = anzahlZeilen.masse
- attributedString.draw(in: stringReckteckX340)
- }
- y = y + 30
- return attributedString
- }
- }
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Lukas Hedinger () aus folgendem Grund: weitere Frage