4

ここでイライラする問題があります。

を使ってUIPrintInteractionControllerPDFファイルを印刷しています。この PDF ファイルのサイズはA4、595x842 pt ですが、印刷された内容が縮小されていることがわかりました。

iPhone シミュレーターを使用しているかどうかによっても、結果は異なります。iPhone シミュレーターで次のコードをテストすると、印刷したファイルは実際のサイズになります。しかし、デバイス (iPad) でこれらのコードをテストすると、問題が発生し、「Deskjet\0323520\032series\032[5B73DB]._ipp._tcp.local.: Print-Job request successfully with warning: Job attributesというログが記録されました。印刷ドキュメントと一致しませんでした。

私が書いたコードは次のようなものです:

- (IBAction)printButtonTouched:(UIButton *)sender {
    NSURL *testFileURL = [self makeTestPDF];
    if ([UIPrintInteractionController canPrintURL:testFileURL]) {
        UIPrintInfo *printInfo = [UIPrintInfo printInfo];
        printInfo.jobName = testFileURL.path;
        printInfo.orientation = UIPrintInfoOrientationPortrait;
        printInfo.outputType = UIPrintInfoOutputGeneral;
        printInfo.duplex = UIPrintInfoDuplexNone;

        self.myPrinter.printInfo =printInfo;
        self.myPrinter.printingItem = testFileURL;

        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            [self.myPrinter presentFromRect:sender.frame inView:self.view animated:YES completionHandler:^(UIPrintInteractionController *printInteractionController, BOOL completed, NSError *error) {

            }];
        } else {
            [self.myPrinter presentAnimated:YES completionHandler:^(UIPrintInteractionController *printInteractionController, BOOL completed, NSError *error) {

            }];
        }
    }
}

- (UIPrintPaper *)printInteractionController:(UIPrintInteractionController *)printInteractionController choosePaper:(NSArray *)paperList
{
    CGRect mediaBox = CGRectMake(0, 0, 595.276, 841.89);
    UIPrintPaper *bestPaper = [UIPrintPaper bestPaperForPageSize:mediaBox.size withPapersFromArray:paperList];
    return bestPaper;
}

PDF コンテキストで PDF ページを開始すると、コードは次のようになります。

    CGFloat a4Width = 595.276f;
    CGFloat a4Height = 841.89f;
    CGRect mediaBox = CGRectMake(0, 0, a4Width, a4Height);
    UIGraphicsBeginPDFContextToFile(testPDFURL.path, mediaBox, nil);
    UIGraphicsBeginPDFPageWithInfo(mediaBox, nil);

私がテストしているプリンターはHP Deskjet Ink Advantage 3525です。AirPrint
もサポートする別のプリンターでテストしたときも同じことが起こりました。唯一の違いは縮小率です。

PDFを実際のサイズで印刷する方法の答えを探しています。そして、答えを見つけるためにほぼ1週間試みましたが、有用な情報は見つかりませんでした. 私を助けてください。

4

1 に答える 1

0

私は同様のことに取り組んでいましたが、私の場合は印刷しますUIImageUIPrintPageRenderサブクラスを実装し、drawContentForPageメソッドをオーバーライドしました。CGRectこのメソッドは、コンテンツを印刷する場所を公開します。

class ExtendedPageRenderer: UIPrintPageRenderer {
       override func drawContentForPage(at pageIndex: Int, in contentRect: CGRect) {
      // code that will draw/render in CGRect
    }
}

そして、私は次のようにクラスを使用します:

let pageRenderer = ExtendedPageRenderer()
let printController = UIPrintInteractionController.shared
printController.printPageRenderer = pageRenderer
于 2020-11-06T14:58:58.700 に答える