私は間違った角度からこれに来ているに違いないと思います。これは、Quartz を使用した PDF への私の最初の進出です。アプリに入力されたテキストを印刷できるようにしたいのですが、このリリースでは削除する必要があるかもしれません。
Apple と Web の両方から手に入れることができるものはすべて読みましたが、自分のものを動かすことができないようです。ドキュメントをプリンターに送ることはできますが、常に空白で印刷されます。私が使用しているプロセスは次のとおりです。
- テキストを NSString として取得します。
- 文字列を NSData オブジェクトの PDF に変換します。
- 印刷してください。
テキスト プロジェクトには 2 つのメソッドがあります。これは単なるテストであるため、追加機能はなく、メモリ リークが発生している可能性があります。動作させようとしているところです。
助けてくれてありがとう。
1 つ目は、PDF ドキュメントを NSData として作成します。
- (NSData *)createPdfAsDataWithAttributedString:(NSAttributedString *)text {
// Save the text just in case…
_pdfText = [text copy];
// Allocate the pdf Context.
CGContextRef pdfContext;
// Create the PDF Attribute Dictionary.
CFMutableDictionaryRef pdfAttributeDictionary = NULL;
pdfAttributeDictionary = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(pdfAttributeDictionary, kCGPDFContextTitle, CFSTR("My Note"));
CFDictionarySetValue(pdfAttributeDictionary, kCGPDFContextCreator, CFSTR("Me"));
// Create the data referece as a mutable data type.
NSData *pdfData = [[NSMutableData alloc] init];
// User the data consumer using the data reference.
CGDataConsumerRef pdfDataConsumer = CGDataConsumerCreateWithCFData((CFMutableDataRef)pdfData);
// Finally the pdfContext can be created.
pdfContext = CGPDFContextCreate(pdfDataConsumer, NULL, pdfAttributeDictionary);
// Start the first page.
CGContextBeginPage(pdfContext, NULL);
// Set the font
CGContextSelectFont(pdfContext, "Helvetica", 16.0f, kCGEncodingMacRoman);
CGContextSetTextDrawingMode(pdfContext, kCGTextFill);
CGContextSetRGBFillColor(pdfContext, 0, 0, 0, 1);
// Print the text
NSString *regText = [text string];
const char *pdfText = [regText cStringUsingEncoding:NSUTF8StringEncoding];
CGContextShowText(pdfContext, pdfText, strlen(pdfText));
// End the page.
CGContextEndPage(pdfContext);
// Save the current state
CGContextSaveGState(pdfContext);
// Release the PDF context
CGContextRelease(pdfContext);
return [pdfData autorelease];
}
2つ目はプリントです。
- (IBAction)printPdfTouchUpInside:(id)sender {
PDFCreator *pdfCreator = [[PDFCreator alloc] init];
NSData *pdfData = [pdfCreator createPdfAsDataWithAttributedString:_printableText];
UIPrintInteractionController *printController = [UIPrintInteractionController sharedPrintController];
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
[printInfo setPrinterID:@"Canon MP620 series"];
[printInfo setOrientation:UIPrintInfoOrientationPortrait];
[printInfo setOutputType:UIPrintInfoOutputGeneral];
[printInfo setJobName:@"Test Print"];
[printController setPrintInfo:printInfo];
[printController setPrintingItem:pdfData];
void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
if (!completed && error) {
NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, error.code);
}
};
[printController presentFromRect:[sender bounds] inView:sender animated:YES completionHandler:completionHandler];
}