Existem muitos recursos sobre como exibir um PDF em um aplicativo UIView
. O que estou trabalhando agora é criar um PDF a partir UIViews
.
Por exemplo, eu tenho um UIView
, com subviews como TextViews, UILabels
, UIImages
, assim como pode converter um grande UIView
como um todo, incluindo todos os seus subviews e subsubviews a um PDF?
Eu verifiquei a referência do iOS da Apple . No entanto, ele fala apenas sobre como escrever pedaços de texto / imagem em um arquivo PDF.
O problema que estou enfrentando é que o conteúdo que desejo gravar em um arquivo como PDF é muito grande. Se eu escrever no PDF peça por peça, vai ser um trabalho enorme. É por isso que estou procurando uma maneira de escrever UIViews
PDFs ou mesmo bitmaps.
Eu tentei o código-fonte que copiei de outro Q / A no Stack Overflow. Mas isso só me dá um PDF em branco com o UIView
tamanho dos limites.
-(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);
}
Além disso, se alguém estiver interessado, aqui está o código Swift 3:
fonte
Se alguém estiver interessado, aqui está o código Swift 2.1:
fonte
completion: (success: Bool) -> ()
para casos de retorno de guardaUma maneira super fácil de criar um PDF a partir do UIView é usar a extensão UIView
Swift 4.2
Crédito: http://www.swiftdevcenter.com/create-pdf-from-uiview-wkwebview-and-uitableview/
fonte
Com o Swift 5 / iOS 12, você pode combinar
CALayer
orender(in:)
método de comUIGraphicsPDFRenderer
owritePDF(to:withActions:)
método de para criar um arquivo PDF a partir de umaUIView
instância.O seguinte código de amostra do Playground mostra como usar
render(in:)
ewritePDF(to:withActions:)
:Observação: para usar
playgroundSharedDataDirectory
no seu Playground, primeiro você precisa criar uma pasta chamada "Dados compartilhados do Playground" na pasta "Documentos" do seu macOS.A
UIViewController
implementação completa da subclasse abaixo mostra uma maneira possível de refatorar o exemplo anterior para um aplicativo iOS:fonte
Isso irá gerar PDF a partir do UIView e abrir a caixa de diálogo de impressão, objetivo C. Anexe
- (IBAction)PrintPDF:(id)sender
ao seu botão na tela. Adicionar#import <QuartzCore/QuartzCore.h>
estruturaArquivo H
Arquivo M
fonte
Não sei por que, mas a resposta de Casilic me dá uma tela em branco no iOS6.1. O código abaixo funciona.
fonte