Как создать сетку в PDF с использованием какао? - PullRequest
1 голос
/ 23 апреля 2011

Я новичок в Какао и Objective-C.

Я хочу создать приложение Какао, которое будет генерировать сетку ящиков (используемых для практики китайской каллиграфии) для экспорта в формате PDF, аналогично этому онлайн-генератору: http://incompetech.com/graphpaper/chinesequarter/.

Как мне создать сетку? Я пытался использовать Quartz с CustomView, но мне не удалось продвинуться очень далеко. Кроме того, после того как сетка нарисована в CustomView, каков метод «печати» этого в PDF?

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2011

Как мне создать сетку?

Реализовать пользовательское представление , которое его рисует.

Я пыталсяиспользуйте Quartz с CustomView,…

Это один из способов; Рисунок AppKit другой.Однако большинство их частей очень похожи;AppKit напрямую основан на PostScript, в то время как Quartz косвенно основан на PostScript.

… но ему не удалось продвинуться очень далеко.

Вы должны задать более конкретныйвопрос о вашей проблеме.

Кроме того, после того, как сетка нарисована в CustomView, каков метод «печати» этого в PDF?

Отправьте его a dataWithPDFInsideRect: сообщение с пропуском границ .

Обратите внимание, что «после того, как сетка нарисована в CustomView», не существует.Хотя может быть некоторое внутреннее кеширование, концептуально представление не обращается и удерживает его;он тянет, когда нужно, каждый раз, когда это необходимо, туда, где это необходимо.Когда необходимо перерисовать окно, Какао скажет любым видам, которые находятся в грязной области, (пере) нарисовать, и они будут в конечном итоге выведены на экран.Когда вы запрашиваете данные PDF, это также говорит о том, что представление должно быть прорисовано, и оно обращается в контекст, который записывает данные PDF.Это позволяет виду быть ленивым (рисовать только при необходимости) и рисовать по-разному в разных контекстах (например, при печати).

0 голосов
/ 23 апреля 2011

Упс, вы спрашивали о Какао, а это Cocoa Touch, но я оставлю это здесь, так как это может быть полезно (по крайней мере, для тех, кто найдет это позже).

Вы можете рисовать вещив представлении и затем поместите то, что там, в pdf.

Этот код возьмет то, что нарисовано в UIView (здесь он называется sheetView), поместит его в pdf, затем поместит это в качестве вложения в электронное письмо (такВы можете видеть это сейчас).Вам нужно будет сослаться на протокол MFMailComposeViewControllerDelegate в своем заголовке.

if ([MFMailComposeViewController canSendMail]) {
    //set up PDF rendering context
    NSMutableData *pdfData = [NSMutableData data];
    UIGraphicsBeginPDFContextToData(pdfData, sheetView.bounds, nil);
    UIGraphicsBeginPDFPage();

    //tell our view to draw (would normally use setNeedsDisplay, but need drawn now).
    [sheetView drawRect:sheetView.bounds];

    //remove PDF rendering context
    UIGraphicsEndPDFContext();

    //send PDF data in mail message as an attachment
    MFMailComposeViewController *mailComposer = [[[MFMailComposeViewController alloc] init] autorelease];
    mailComposer.mailComposeDelegate = self;If
    [mailComposer addAttachmentData:pdfData mimeType:@"application/pdf" fileName:@"SheetView.pdf"];
    [self presentModalViewController:mailComposer animated:YES];
}
else {
    if (WARNINGS) NSLog(@"Device is unable to send email in its current state.");
}

Вам также понадобится этот метод ...

#pragma mark -
#pragma mark MFMailComposeViewControllerDelegate protocol method
//also need to implement the following method, so that the email composer can let
//us know that the user has clicked either Send or Cancel in the window.
//It's our duty to end the modal session here.
-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {
    [self dismissModalViewControllerAnimated:YES];
}
...