Ich vermute einmal, dass mit dem Quelltext unten das PDF erstellt und gespeichert wird innerhalb der APP
Ich möchte aber die Datei so speichern, dass der Benutzer entscheiden kann, ob er die Datei ausserhalb der App speichern will.
Ich frage mich aber auch noch, ob ich in markupText irgendetwas reinschreiben kann, und dann später erst alles zu zeichnen, oder ob nur das gezeichnet wird, was in diesem String ist in denen ich jetzt die ???? habe.
let formatter = UIMarkupTextPrintFormatter(markupText: "?????????")
// IST DAS EGAL WAS HIER STEHT?
Ich glaube sonst sollte alles stimmen.
Alles anzeigen
Ich möchte aber die Datei so speichern, dass der Benutzer entscheiden kann, ob er die Datei ausserhalb der App speichern will.
Ich frage mich aber auch noch, ob ich in markupText irgendetwas reinschreiben kann, und dann später erst alles zu zeichnen, oder ob nur das gezeichnet wird, was in diesem String ist in denen ich jetzt die ???? habe.
let formatter = UIMarkupTextPrintFormatter(markupText: "?????????")
// IST DAS EGAL WAS HIER STEHT?
Ich glaube sonst sollte alles stimmen.
Quellcode
- //
- // PdfErstellen.swift
- // Vitalstoffcontroller
- //
- // Created by Lukas Hedinger on 20.09.18.
- // Copyright © 2018 Afac AG. All rights reserved.
- //
- import UIKit
- import Foundation
- class PdfErstellung {
- static func PdfErstellen(_ auswahlZeilen : [LebensmittelDataTV], _ vitalstoffWerteListe : [LebensmittelDataTV], _ heuteString : String) {
- // 1. Create Print Formatter with input text.
- let formatter = UIMarkupTextPrintFormatter(markupText: "?????????") // What ist here?
- // 2. Add formatter with pageRender
- let render = UIPrintPageRenderer()
- render.addPrintFormatter(formatter, startingAtPageAt: 0)
- // 3. Assign paperRect and printableRect
- let page = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) // A4, 72 dpi
- let printable = page.insetBy(dx: 0, dy: 0)
- let rect = CGRect.zero
- render.setValue(NSValue(cgRect: page), forKey: "paperRect")
- render.setValue(NSValue(cgRect: printable), forKey: "printableRect")
- // 4. Create PDF context and draw
- let fileName = "Vitalstoffwerte " + heuteString
- let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
- let documentsDirectory = paths[0]
- let pathForPDF = documentsDirectory.appendingFormat("/" + fileName)
- UIGraphicsBeginPDFContextToFile(pathForPDF, rect, nil)
- // Start Draw of page
- var y = 0
- var stringRechteckX50 = CGRect(x: 50, y: y, width: 100, height: 20)
- var stringRechteckX160 = CGRect(x: 160, y: y, width: 30, height: 20)
- var stringRechteckX170 = CGRect(x: 170, y: y, width: 10, height: 20)
- var stringRechteckX220 = CGRect(x: 220, y: y, width: 100, height: 20)
- var stringRechteckX330 = CGRect(x: 330, y: y, width: 30, height: 20)
- var stringRechteckX340 = 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 stringRechteck = CGRect(x: 50, y: 50, width: 300, height: 40)
- attributedString.draw(in: stringRechteck)
- // 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: stringRechteckX50)
- } else { // Detail
- font = UIFont(name: "Helvetica", size: 12.0)
- text = druckenVitalstoffWerte.name
- attributedString.draw(in: stringRechteckX50)
- text = druckenVitalstoffWerte.anzahl
- paragraphStyle.alignment = .right
- attributedString.draw(in: stringRechteckX160)
- text = druckenVitalstoffWerte.masse
- paragraphStyle.alignment = .left
- attributedString.draw(in: stringRechteckX170)
- }
- y = y + 30
- }
- y = 80
- text = "Lebensmittel"
- font = UIFont(name: "Helvetica Bold", size: 14.0)
- paragraphStyle.alignment = .left
- attributedString.draw(in: stringRechteckX220)
- // Lebensmittelliste
- y = 120
- for zeile in 0..<auswahlZeilen.count {
- let auswahlZeilenObjekt = auswahlZeilen[zeile]
- font = UIFont(name: "Helvetica", size: 12.0)
- text = auswahlZeilenObjekt.name
- attributedString.draw(in: stringRechteckX220)
- text = auswahlZeilenObjekt.anzahl
- paragraphStyle.alignment = .right
- attributedString.draw(in: stringRechteckX330)
- text = auswahlZeilenObjekt.masse
- paragraphStyle.alignment = .left
- attributedString.draw(in: stringRechteckX340)
- }
- y = y + 30
- // End Draw of page
- UIGraphicsEndPDFContext()
- }
- }