1

iOS-htmltopdfを使用して、DOC を PDF に変換できますが、doc ファイルから単一ページの PDF が必要です。

その理由は、あるページの一部のコンテンツが別のページに入るため、1 ページだけです。

これらNDHTMLtoPDF.mの2行のコードを使用すると、PDFページサイズが2倍になります

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

  long pageHeight = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"]longLongValue];
  self.pageSize = CGSizeMake(595, webView.scrollView.contentSize.height/2);

  .........
  .........
  .........
}
4

2 に答える 2

1

最初にNDHTMLtoPDFを使用して DOC を PDF に変換します。

以下のデリゲートメソッドが呼び出されます

- (void)HTMLtoPDFDidSucceed:(NDHTMLtoPDF*)htmlToPDF
{
  NSLog(@"HTMLtoPDF did succeed (%@ / %@)", htmlToPDF, htmlToPDF.PDFpath);

  NSURL *pptURL = [NSURL fileURLWithPath:htmlToPDF.PDFpath];
  NSURLRequest *request = [NSURLRequest requestWithURL:pptURL];
  [myWebView loadRequest:request];

  //now merge whole pages to one PDF
  [self MergeToOnePagePDF:pptURL];   
}

これらのメソッドを追加します。

-(void)MergeToOnePagePDF:(NSURL *)pdfURL
{
  CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((__bridge CFURLRef)pdfURL);

  int pageCount = CGPDFDocumentGetNumberOfPages(pdf);
  CGPDFPageRef pageRef = CGPDFDocumentGetPage(pdf, 1);
  CGRect pageRect = CGPDFPageGetBoxRect(pageRef, kCGPDFMediaBox);
  float pageHeight = pageRect.size.height;
  pageRect.size.height = pageRect.size.height * pageCount;

  NSMutableData* pdfData = [[NSMutableData alloc] init];
  CGDataConsumerRef pdfConsumer = CGDataConsumerCreateWithCFData((__bridge CFMutableDataRef)pdfData);
  CGContextRef pdfContext = CGPDFContextCreate(pdfConsumer, &pageRect, NULL);

  CGPDFContextBeginPage(pdfContext, NULL);
  CGContextTranslateCTM(pdfContext, 0, pageRect.size.height);
  for (int i = 1; i <= pageCount; i++) 
  {
    pageRef = CGPDFDocumentGetPage(pdf, i);
    CGContextTranslateCTM(pdfContext, 0, -pageHeight);
    CGContextDrawPDFPage(pdfContext, pageRef);
  }
  CGPDFContextEndPage(pdfContext);
  CGPDFContextClose(pdfContext);

  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentsDirectory = [paths objectAtIndex:0];
  NSString *pdfFile = [documentsDirectory stringByAppendingPathComponent:@"destination.pdf"];

  [pdfData writeToFile: pdfFile atomically: NO];
 }

編集:ページを1ページにマージするPDFクレジットは@iPDFDev

于 2013-06-12T06:08:37.367 に答える