2

如何从html创建pdf而不在iphone应用程序的objective c中截取uiwebview的屏幕截图或图像?

当我创建 pdf 以捕获 UIwebView 的屏幕截图时,pdf 分辨率看起来不太好。放大或缩小其文本的像素被破坏。

4

4 回答 4

3

从 Html 页面生成 PDF。 我希望这能帮到您。

于 2012-05-15T07:36:54.773 回答
2

加载htmlUIWebView

按照以下步骤使用UIPrintPageRendererUIWebView

添加Category用于UIPrintPageRenderer获取 PDF 数据

@interface UIPrintPageRenderer (PDF)
- (NSData*) printToPDF;
@end

@implementation UIPrintPageRenderer (PDF)
- (NSData*) printToPDF
{
  NSMutableData *pdfData = [NSMutableData data];
  UIGraphicsBeginPDFContextToData( pdfData, self.paperRect, nil );
  [self prepareForDrawingPages: NSMakeRange(0, self.numberOfPages)];
  CGRect bounds = UIGraphicsGetPDFContextBounds();
  for ( int i = 0 ; i < self.numberOfPages ; i++ )
  {
    UIGraphicsBeginPDFPage();
    [self drawPageAtIndex: i inRect: bounds];
  }
  UIGraphicsEndPDFContext();
  return pdfData;
}
@end

为 A4 尺寸添加这些定义

#define kPaperSizeA4 CGSizeMake(595.2,841.8)

现在在UIWebView's webViewDidFinishLoad delegate使用UIPrintPageRenderer property.UIWebView

- (void)webViewDidFinishLoad:(UIWebView *)awebView
{
  if (awebView.isLoading)
    return;

  UIPrintPageRenderer *render = [[UIPrintPageRenderer alloc] init];
  [render addPrintFormatter:awebView.viewPrintFormatter startingAtPageAtIndex:0];
  //increase these values according to your requirement
  float topPadding = 10.0f;
  float bottomPadding = 10.0f;
  float leftPadding = 10.0f;
  float rightPadding = 10.0f;
  CGRect printableRect = CGRectMake(leftPadding,
                                  topPadding,
                                  kPaperSizeA4.width-leftPadding-rightPadding,
                                  kPaperSizeA4.height-topPadding-bottomPadding);
  CGRect paperRect = CGRectMake(0, 0, kPaperSizeA4.width, kPaperSizeA4.height);
  [render setValue:[NSValue valueWithCGRect:paperRect] forKey:@"paperRect"];
  [render setValue:[NSValue valueWithCGRect:printableRect] forKey:@"printableRect"];
  NSData *pdfData = [render printToPDF];
  if (pdfData) {
    [pdfData writeToFile:[NSString stringWithFormat:@"%@/tmp.pdf",NSTemporaryDirectory()] atomically: YES];
  }
  else
  {
    NSLog(@"PDF couldnot be created");
  }
}
于 2014-10-09T11:01:41.387 回答
0

从 UIWebView 或 UIView 获取 PDF/PNG 作为输出

这是一个很好的问题,具有相同的方法..

但是,要以编程方式创建 pdf,您可以从此处开始在 iPhone 上生成 PDF:

http://iphonesdksnippets.com/post/2009/02/13/Generate-PDF-on-iPhone.aspx

和:

使用 Quartz2d 绘图:

http://developer.apple.com/library/ios/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/drawingwithquartz2d.pdf

于 2012-05-15T07:30:01.260 回答
0

您可以使用quartz core 在PDF 上下文中绘制UIwebview,而不是将其作为屏幕截图。是代码。

于 2012-05-15T08:34:13.560 回答