私のアプリには印刷ボタンがあります。ボタンをクリックすると、画面が印刷されます。 私の問題は、画面にスクロールビューがあり、画面サイズ以上の内容がある場合です。それは画面の内容全体を表示するはずです。プリントアウトに2〜3ページかかります。写真やスクリーンショットを撮るのではなく、画面を印刷するためのサンプルコードやプロジェクトはありますか?iPhoneアプリからプリントアウトするには?
3
A
答えて
2
データ全体をHTML形式に変換し、WebViewを使用してデータを表示する必要があります。 iPhoneアプリからプリントアウトするには、webviewのコンテンツからPdfファイルを作成し、このpdfファイルからプリントアウトする必要があります。ここで私はサンプルコードを提供しています、私のアプリで正しく動作します。
1)QuartzCoreフレームワークを含み、ViewController.hファイルに "QuartzCore/QuartzCore.h"をインポートします。次のコードViewController.hファイルの使用で
2)コード以下のviewDidLoadメソッドの使用に
@interface ViewController : UIViewController<UIScrollViewDelegate, UIPrintInteractionControllerDelegate>
{
UIWebView *theWebView;
int imageName;
double webViewHeight;
}
-(void) takeSnapshot;
- (void) drawPdf;
-(void) printContent:(NSData *) data;
3):
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *[email protected]"<html><body><img src=\"blue.png\" alt=\"Blue Image\" /> <h1>Hi, himanshu mahajan</h1><p> I am from Vinove Software service</p><h1>Hi, himanshu mahajan</h1><p> I am from Vinove Software service</p><h1>Hi, himanshu mahajan</h1><p> I am from Vinove Software service</p><h1>Hi, himanshu mahajan</h1><p> I am from Vinove Software service</p><h1>Hi, himanshu mahajan</h1><p> I am from Vinove Software service</p><h1>Hi, himanshu mahajan</h1><p> I am from Vinove Software service</p><h1>Hi, himanshu mahajan</h1><p> I am from Vinove Software service</p><h1>Hi, himanshu mahajan</h1><p> I am from Vinove Software service</p><h1>Hi, himanshu mahajan</h1><p> I am from Vinove Software service</p><h1>Hi, himanshu mahajan</h1><p> I am from Vinove Software service</p></body></html>";
UIBarButtonItem *generate=[[UIBarButtonItem alloc] initWithTitle:@"Print" style:UIBarButtonItemStylePlain target:self action:@selector(printBtnPressed)];
[self.navigationItem setRightBarButtonItem:generate];
theWebView=[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 416)];
[theWebView loadHTMLString:htmlString baseURL:nil];
theWebView.scrollView.bounces=NO;
[self.view addSubview:theWebView];
imageName=0;
webViewHeight=0.0;
}
4)メソッドの定義
-(void) printBtnPressed
{
[self takeSnapshot];
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDir=[paths objectAtIndex:0];
NSString *filePath=[documentDir stringByAppendingPathComponent:@"Demo.pdf"];
NSData *data=[[NSData alloc] initWithContentsOfFile:filePath];
[self printContent:data];
}
-(void) takeSnapshot
{
webViewHeight=[[theWebView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"] integerValue];
CGRect screenRect=theWebView.frame;
double currentWebViewHeight = webViewHeight;
while (currentWebViewHeight > 0)
{
imageName ++;
UIGraphicsBeginImageContext(screenRect.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor blackColor] set];
CGContextFillRect(ctx, screenRect);
[theWebView.layer renderInContext:ctx];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pngPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.png",imageName]];
if(currentWebViewHeight < 416)
{
CGRect lastImageRect = CGRectMake(0, 416 - currentWebViewHeight, theWebView.frame.size.width, currentWebViewHeight);
CGImageRef imageRef = CGImageCreateWithImageInRect([newImage CGImage], lastImageRect);
newImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
}
[UIImagePNGRepresentation(newImage) writeToFile:pngPath atomically:YES];
[theWebView stringByEvaluatingJavaScriptFromString:@"window.scrollBy(0,416);"];
currentWebViewHeight -= 416;
}
[self drawPdf];
}
- (void) drawPdf
{
CGSize pageSize = CGSizeMake(612, webViewHeight);
NSString *fileName = @"Demo.pdf";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];
UIGraphicsBeginPDFContextToFile(pdfFileName, CGRectZero, nil);
// Mark the beginning of a new page.
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil);
double currentHeight = 0.0;
for (int index = 1; index <= imageName ; index++)
{
NSString *pngPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.png", index]];
UIImage *pngImage = [UIImage imageWithContentsOfFile:pngPath];
[pngImage drawInRect:CGRectMake(0, currentHeight, pageSize.width, pngImage.size.height)];
currentHeight += pngImage.size.height;
}
UIGraphicsEndPDFContext();
}
-(void) printContent:(NSData *) data
{
UIPrintInteractionController *print = [UIPrintInteractionController sharedPrintController];
print.delegate = self;
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputGeneral;
//printInfo.jobName = @"Information";
printInfo.duplex = UIPrintInfoDuplexLongEdge;
print.printInfo = printInfo;
print.showsPageRange = YES;
print.printingItem = data;
UIViewPrintFormatter *viewFormatter = [self.view viewPrintFormatter];
viewFormatter.startPage = 0;
print.printFormatter = viewFormatter;
UIPrintInteractionCompletionHandler completionHandler = ^(UIPrintInteractionController *printInteractionController, BOOL completed, NSError *error) {};
[print presentAnimated:YES completionHandler:completionHandler];
}
+1
+1、サンプルコード用 – NAZIK
0
take a screenshot programmaticallyとすることができます。その場合、スクリーンショットを印刷するだけです。
1
あなたは
- (void) didPressPrintExpenseButton {
UIPrintInteractionController *printController = [UIPrintInteractionController sharedPrintController];
printController.delegate = self;
void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
^(UIPrintInteractionController *pic, BOOL completed, NSError *error) {
if (!completed && error) NSLog(@"Print error: %@", error);
};
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputGeneral;
printInfo.jobName = @"Expense";
printController.printInfo = printInfo;
UIMarkupTextPrintFormatter *htmlFormatter = [[UIMarkupTextPrintFormatter alloc]
initWithMarkupText:[self getHtmlInvoiceDescription]];
htmlFormatter.startPage = 0;
htmlFormatter.contentInsets = UIEdgeInsetsMake(72.0, 72.0, 72.0, 72.0); // 1 inch margins
htmlFormatter.maximumContentWidth = 6 * 72.0;
printController.printFormatter = htmlFormatter;
[htmlFormatter release];
printController.showsPageRange = YES;
[printController presentAnimated:YES completionHandler:completionHandler];
}
- (NSString *) getHtmlInvoiceDescription {
NSMutableString *htmlString = [[NSMutableString alloc]init];
[htmlString appendString:@"<html> \n"];
[htmlString appendString:@"<body> \n"];
[htmlString appendString:@"<table border='0' cellpadding='5' width='100%' >\n"];
[htmlString appendString:@"<tr>\n"];
[htmlString appendFormat:@"<td style=\"width='50%%'\"> %@ </td>", [self.addressString stringByReplacingOccurrencesOfString:@"\n" withString:@"<br>"]];
//TODO change the image url here
UIImage * image = [UIImage imageNamed:@"iTunesArtwork.png"];
NSData *data = UIImagePNGRepresentation(image);
NSString * dataString = [data base64EncodedString]; // Your own base 64 converter
[htmlString appendFormat:@"<td style=\"width='50%%'\" align=\"right\"> <img src=\"data:image/png;base64,%@\" width='%.0f' height='%.0f' > </td>", dataString,
verifyHeader.frame.size.height * image.size.width/image.size.height, verifyHeader.frame.size.height];
[htmlString appendString:@"\n</tr> \n </table>"];
[htmlString appendFormat:@"\n<h2> %@ </h2>", NSLocalizedString(@"Expense", @"")];
[htmlString appendString:@"\n<table border='1' cellpadding='5' width='100%'>"];
[htmlString appendString:@"\n<tr>"];
[htmlString appendFormat:@"<td style=\"width='50%%' \"> %@ </td>", NSLocalizedString(@"Date: ", @"")];
[htmlString appendFormat:@"<td width='50%%'> %@ </td>", [self getFormattedDateString:self.expense.date]];
[htmlString appendString:@"</tr>"];
[htmlString appendString:@"\n<tr>"];
[htmlString appendFormat:@"<td> %@ </td>", NSLocalizedString(@"Reference no: ", @"")];
[htmlString appendFormat:@"<td> %@ </td>", self.expense.referenceNo];
[htmlString appendString:@"</tr>"];
[htmlString appendString:@"\n<tr>"];
[htmlString appendFormat:@"<td> %@ </td>", NSLocalizedString(@"Customer name: ", @"")];
[htmlString appendFormat:@"<td> %@ </td>", self.expense.customerName];
[htmlString appendString:@"</tr>"];
[htmlString appendString:@"\n<tr>"];
[htmlString appendFormat:@"<td> %@ </td>", NSLocalizedString(@"Product description: ", @"")];
[htmlString appendFormat:@"<td> %@ </td>", self.expense.productDescription];
[htmlString appendString:@"</tr>"];
[htmlString appendString:@"\n</table>"];
[htmlString appendString:@"\n</body> \n</html>"];
NSString * tempString = [NSString stringWithString:htmlString];
[htmlString release];
return tempString;
}
、HTMLの中にすべてのデータを変換し、それを印刷することができます。また、PDFでのあなたの情報を変換すると、あなたはそれを印刷することができます方法があります。 アップルの文書iPhone print API guidelinesを検索してください。
関連する問題
- 1. iPhoneアプリからメールを送るには?
- 2. iPhoneアプリ:アプリIDからアプリアイコンを取得するには?
- 3. iPhoneからiPhoneに拒否されたアプリを削除する
- 4. アプリのiPhoneアプリからgoogle mapsアプリを起動する
- 5. iPhoneアプリがFinderからクラッシュする
- 6. iphoneアプリからGoogleカレンダーに予定を追加するには?
- 7. iphoneアプリからクレジットカード処理
- 8. GoogleプラスワンボタンからiPhoneアプリ
- 9. 私のiPhoneアプリからtwitterアプリでTwitterページを開くには?
- 10. iphoneアプリからどのWindows Phone 7アプリにも共有するには?
- 11. iPhone - アプリ内からios5のビルトイン辞書をプルアップするには
- 12. JavaサーバーからiPhoneアプリにBLOBイメージをダウンロードする方法は?
- 13. iPhoneのWebアプリからネイティブアプリを起動するには?
- 14. iphoneアプリからリンクを共有するには?
- 15. iPhoneからアプリに画像をコピー
- 16. iPhoneアプリからiTunesにファイルをコピー
- 17. iPhoneアプリからSQL Expressデータベースにアクセス
- 18. 別のiPhoneアプリからMobileIron Web @ Workアプリを起動するには?
- 19. Haskellでバイナリファイルからバイトをプリントアウトするには?
- 20. 他のアプリからのデータをスクレイピング/アクセスするAndroid/iphoneアプリ
- 21. iPhoneアプリから別のアプリを起動する方法
- 22. iphoneアプリから外部アプリ(NDrive)を起動する方法
- 23. iPhoneのアプリからApple WatchのGlanceにデータを渡すには?
- 24. 既存のコアデータストアを1つのiPhoneアプリから別のiPhoneアプリに再利用
- 25. Facebook Messenger iPhoneアプリはFacebookのiPhoneアプリからどのようにログイン情報を取得しますか?
- 26. 既存のiPhoneアプリからiPadアプリを作成しますか?
- 27. iphoneにアプリをインストールするには
- 28. iPhoneアプリをアプリストアにアップロードするには?
- 29. 私のウェブサイトから自分のiPhoneにiPhoneアプリをダウンロードするにはどうすればいいですか?
- 30. iPhoneアプリからApple Push Notificationをテストする方法は?
は基本的にあなたが変換しますスクロールビューを画像ファイルに貼り付け、それを印刷します。私は同じことをやって、画像を電子メールの添付ファイルとして送るだけです。 –