Es gibt viele Ressourcen zum Anzeigen einer PDF-Datei in einer App UIView
. Ich arbeite gerade daran, ein PDF aus zu erstellen UIViews
.
Zum Beispiel habe ich ein UIView
, mit Subviews wie Textviews, UILabels
, UIImages
, so wie kann ich eine konvertieren groß UIView
als Ganzes , einschließlich aller seiner Subviews und subsubviews zu einer PDF - Datei?
Ich habe Apples iOS-Referenz überprüft . Es geht jedoch nur darum, Text- / Bildteile in eine PDF-Datei zu schreiben.
Das Problem, mit dem ich konfrontiert bin, ist, dass der Inhalt, den ich als PDF in eine Datei schreiben möchte, sehr groß ist. Wenn ich sie Stück für Stück in das PDF schreibe, wird das eine enorme Arbeit. Deshalb suche ich nach einer Möglichkeit, UIViews
in PDFs oder sogar Bitmaps zu schreiben .
Ich habe den Quellcode ausprobiert, den ich aus anderen Fragen / Antworten in Stack Overflow kopiert habe. Aber es gibt mir nur ein leeres PDF mit der UIView
Grenzgröße.
-(void)createPDFfromUIView:(UIView*)aView saveToDocumentsWithFileName:(NSString*)aFilename
{
// Creates a mutable data object for updating with binary data, like a byte array
NSMutableData *pdfData = [NSMutableData data];
// Points the pdf converter to the mutable data object and to the UIView to be converted
UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil);
UIGraphicsBeginPDFPage();
// draws rect to the view and thus this is captured by UIGraphicsBeginPDFContextToData
[aView drawRect:aView.bounds];
// remove PDF rendering context
UIGraphicsEndPDFContext();
// Retrieves the document directories from the iOS device
NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString* documentDirectory = [documentDirectories objectAtIndex:0];
NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:aFilename];
// instructs the mutable data object to write its context to a file on disk
[pdfData writeToFile:documentDirectoryFilename atomically:YES];
NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename);
}
Wenn jemand interessiert ist, ist hier außerdem der Swift 3-Code:
quelle
Wenn jemand interessiert ist, hier ist Swift 2.1 Code:
quelle
completion: (success: Bool) -> ()
fürEine super einfache Möglichkeit, ein PDF aus UIView zu erstellen, ist die Verwendung der UIView-Erweiterung
Swift 4.2
Bildnachweis: http://www.swiftdevcenter.com/create-pdf-from-uiview-wkwebview-and-uitableview/
quelle
Mit Swift 5 / iOS 12 können Sie die Methode mit der Methode kombinieren
CALayer
, um eine PDF-Datei aus einer Instanz zu erstellen .render(in:)
UIGraphicsPDFRenderer
writePDF(to:withActions:)
UIView
Der folgende Beispielcode für den Spielplatz zeigt, wie
render(in:)
und verwendet wirdwritePDF(to:withActions:)
:Hinweis: Um auf
playgroundSharedDataDirectory
Ihrem Spielplatz verwendet werden zu können, müssen Sie zunächst einen Ordner mit dem Namen "Shared Playground Data" in Ihrem macOS-Ordner "Documents" erstellen.Die folgende
UIViewController
vollständige Implementierung der Unterklasse zeigt eine Möglichkeit, das vorherige Beispiel für eine iOS-App umzugestalten:quelle
Dadurch wird PDF aus UIView generiert und der Druckdialog, Ziel C, geöffnet.
- (IBAction)PrintPDF:(id)sender
An Ihre Schaltfläche auf dem Bildschirm anhängen .#import <QuartzCore/QuartzCore.h>
Framework hinzufügenH-Datei
M-Datei
quelle
Ich weiß nicht warum, aber die Antwort von casilic gibt mir unter iOS6.1 einen leeren Bildschirm. Der folgende Code funktioniert.
quelle