Skip to content

Commit 84f031b

Browse files
committed
Export to PDF now opens ActivityViewController
1 parent 5537f38 commit 84f031b

2 files changed

Lines changed: 55 additions & 3 deletions

File tree

Source/TriangleDrawMain/Canvas/Menu/HCMenuView.swift

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import TTProgressHUD
55

66
enum ShareData {
77
case none
8-
case exportPNG(image: UIImage, filename: String?)
8+
case exportPNG(image: UIImage, filename: String)
9+
case exportPDF(pdfData: Data, filename: String)
910
}
1011

1112
struct HCMenuView: View {
@@ -43,6 +44,25 @@ struct HCMenuView: View {
4344
}
4445
}
4546

47+
var exportPDFButton: some View {
48+
Button("Vector PDF") {
49+
hudVisible = true
50+
model.exportToPDF() { status in
51+
switch status {
52+
case let HCMenuViewModel.ExportPDFStatus.ok(pdfData, filename):
53+
hudVisible = false
54+
self.shareData = ShareData.exportPDF(pdfData: pdfData, filename: filename)
55+
self.isSharePresented = true
56+
case HCMenuViewModel.ExportPDFStatus.progress(let progress):
57+
log.debug("progress: \(progress)")
58+
case HCMenuViewModel.ExportPDFStatus.error(let message):
59+
log.error("Unable to export to PDF. \(message)")
60+
hudVisible = false
61+
}
62+
}
63+
}
64+
}
65+
4666
var emailDeveloperButton: some View {
4767
#if os(iOS)
4868
let view = MailButtonView(
@@ -81,7 +101,7 @@ struct HCMenuView: View {
81101
}
82102
Section(header: Text("Export")) {
83103
exportPNGButton
84-
Button("Vector PDF") {}
104+
exportPDFButton
85105
Button("Vector SVG") {}
86106
}
87107
Section(header: Text("Feedback")) {
@@ -126,6 +146,9 @@ struct ActivityViewController: UIViewControllerRepresentable {
126146
case let .exportPNG(image, filename):
127147
log.debug("share: png")
128148
return HCMenuViewController.createSharePNGActivityViewController(image: image, filename: filename, triangleCount: 0)
149+
case let .exportPDF(pdfData, filename):
150+
log.debug("share: pdf")
151+
return HCMenuViewController.createSharePDFActivityViewController(pdfData: pdfData, filename: filename, triangleCount: 0)
129152
}
130153
}
131154

Source/TriangleDrawMain/Canvas/Menu/HCMenuViewModel.swift

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class HCMenuViewModel: ObservableObject {
3030

3131
public enum ExportPNGStatus {
3232
case progress(progress: Float)
33-
case ok(image: UIImage, filename: String?)
33+
case ok(image: UIImage, filename: String)
3434
case error(message: String)
3535
}
3636

@@ -56,4 +56,33 @@ public class HCMenuViewModel: ObservableObject {
5656
callback(ExportPNGStatus.ok(image: image, filename: filename))
5757
}
5858
}
59+
60+
public enum ExportPDFStatus {
61+
case progress(progress: Float)
62+
case ok(pdfData: Data, filename: String)
63+
case error(message: String)
64+
}
65+
66+
func exportToPDF(callback: @escaping (ExportPDFStatus) -> Void) {
67+
guard let canvas: E2Canvas = self.initialCanvas else {
68+
callback(ExportPDFStatus.error(message: "exportToPDF - Expected document.canvas to be non-nil, but got nil"))
69+
return
70+
}
71+
log.debug("exportToPDF initiate")
72+
let t0 = CFAbsoluteTimeGetCurrent()
73+
let filename = document_displayName ?? ""
74+
75+
PDFExporter.createPDF(from: canvas, progress: { progress in
76+
callback(ExportPDFStatus.progress(progress: progress))
77+
}) { pdfData in // swiftlint:disable:this multiple_closures_with_trailing_closure
78+
guard pdfData.count > 0 else {
79+
callback(ExportPDFStatus.error(message: "exportToPDF - Expected size of pdf to be greater than 0 bytes"))
80+
return
81+
}
82+
let t1 = CFAbsoluteTimeGetCurrent()
83+
let elapsed: Double = t1 - t0
84+
log.debug("exportToPDF - ready for sharing. elapsed: \(elapsed.string2)")
85+
callback(ExportPDFStatus.ok(pdfData: pdfData, filename: filename))
86+
}
87+
}
5988
}

0 commit comments

Comments
 (0)