2

私は間違った角度からこれに来ているに違いないと思います。これは、Quartz を使用した PDF への私の最初の進出です。アプリに入力されたテキストを印刷できるようにしたいのですが、このリリースでは削除する必要があるかもしれません。

Apple と Web の両方から手に入れることができるものはすべて読みましたが、自分のものを動かすことができないようです。ドキュメントをプリンターに送ることはできますが、常に空白で印刷されます。私が使用しているプロセスは次のとおりです。

  1. テキストを NSString として取得します。
  2. 文字列を NSData オブジェクトの PDF に変換します。
  3. 印刷してください。

テキスト プロジェクトには 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];
}
4

0 に答える 0