| Paste number 18505: | Trying to turn a WebView into paginated PDF in memory |
| Pasted by: | zorn |
| 2 years, 4 months ago | |
| None | |
| Paste contents: |
| - (IBAction)makePDF:(id)sender { // the follow method is meant to convert a webview in a multipage PDF. // for our app we need it in memory, but to date have only got it working // when we generate a file. // what I want is to be able to set shouldGenrateFile to NO and have // it generate the PDF properly in memory so I can display it. NSLog(@"Make PDF..."); // if this is true we'll use the print system to generate a file // else we'll generate an in memory pdf to display. BOOL shouldGenrateFile = YES; NSMutableData *data = [NSMutableData data]; NSPrintOperation *printOp; NSPrintInfo *printInfo; NSPrintInfo *sharedInfo; NSMutableDictionary *printInfoDict; NSMutableDictionary *sharedDict; sharedInfo = [NSPrintInfo sharedPrintInfo]; sharedDict = [sharedInfo dictionary]; printInfoDict = [NSMutableDictionary dictionaryWithDictionary: sharedDict]; if (shouldGenrateFile) { [printInfoDict setObject:NSPrintSaveJob forKey:NSPrintJobDisposition]; [printInfoDict setObject:@"/Users/zorn/Desktop/web.pdf" forKey:NSPrintSavePath]; } printInfo = [[NSPrintInfo alloc] initWithDictionary: printInfoDict]; [printInfo setHorizontalPagination: NSAutoPagination]; [printInfo setVerticalPagination: NSAutoPagination]; [printInfo setVerticallyCentered:NO]; NSView *viewToPrint = [[[webView mainFrame] frameView] documentView]; if (shouldGenrateFile) { // if we printOp = [NSPrintOperation printOperationWithView:viewToPrint printInfo:printInfo]; [printOp setShowPanels:NO]; [printOp runOperation]; } else { printOp = [NSPrintOperation PDFOperationWithView:viewToPrint insideRect:[viewToPrint frame] toData:data printInfo:printInfo]; [printOp runOperation]; [pdf release]; pdf = [[PDFDocument alloc] initWithData:data]; [pdfView setDocument:pdf]; } } |
Annotations for this paste:
| Annotation number 1: | How to punt |
| Pasted by: | boredzo |
| 2 years, 3 months ago | |
| Paste contents: |
| You could use a RAM disk. Step 1: hdid -nomount ram://NUM_SECTORS (sector = 512 bytes) This outputs a device path (/dev/foo). Step 2: newfs_hfs -v VOLUME_NAME DEVICE_PATH Formats the RAM disk as HFS+. See x-man-page://newfs_hfs for other options. Step 3: diskutil mount DEVICE_PATH The RAM disk will be mounted at /Volumes/VOLUME_NAME. You could also do something involving mount(8) (x-man-page://8/mount) if you wanted to mount it inside NSTemporaryDirectory(). Remember to unmount it (hdiutil detach DEVICE_PATH) when you're done. Sorry I'm late with this. Didn't see it before. |