菜鸟教程小白 发表于 2022-12-12 16:56:25

ios - 从表格 View 生成 PDF 时出现问题


                                            <p><p>我必须从具有多个部分和行的 <code>UITableView</code> 生成 PDf。</p>

<p> <a href="/image/G3k2b.png" rel="noreferrer noopener nofollow"><img src="/image/G3k2b.png" alt="image"/></a> </p>

<p>我也生成了 pdf,但问题是在创建 PDF 时,它会剪切某些行的数据并显示在其他页面上。 </p>

<p>因此,请提出任何有助于创建 PDf 的动态逻辑,该 PDf 在页面上包含数据而无需转到其他 Page 。 </p>

<p>另外请在下面找到我用来创建 PDF 的代码。</p>

<pre><code>CGRect priorBounds = self.tableView.bounds;
CGSize fittedSize = ;
self.tableView.bounds = CGRectMake(0, 0, 612, fittedSize.height);

CGRect pdfPageBounds = CGRectMake(0, 0, 612, 792); // Change this as your need
NSMutableData *pdfData = [ init];

UIGraphicsBeginPDFContextToData(pdfData, pdfPageBounds, nil); {
    for (CGFloat pageOriginY = 0; pageOriginY &lt; fittedSize.height; pageOriginY += pdfPageBounds.size.height) {
      UIGraphicsBeginPDFPageWithInfo(pdfPageBounds, nil);

      CGContextSaveGState(UIGraphicsGetCurrentContext()); {
            CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0, -pageOriginY);
            ;
      } CGContextRestoreGState(UIGraphicsGetCurrentContext());
    }
} UIGraphicsEndPDFContext();

self.tableView.bounds = priorBounds; // Reset the tableView


// Use the pdfData to
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = ;
//Get the docs directory
NSString *filePathPDF = ; //Add the file name
;
</code></pre>

<p>任何帮助将不胜感激。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>在这方面做了很多研发,终于得到了解决方案。
我知道这为时已晚,无法发布上述问题的答案,但我正在发布我的解决方案,以便将来对某人有所帮助。</p>

<p>我用来避免这个问题的技巧是,逐节运行循环并拍摄每个动态单元格的照片。</p>

<p>然后我开始通过下面的函数组合单元格的图像,</p>

<pre><code>- (UIImage*)imageByCombiningImage:(UIImage*)firstImage withImage:(UIImage*)secondImage {
    UIImage *image1 = firstImage;
    UIImage *image2 = secondImage;

    CGSize size = CGSizeMake(image1.size.width, image1.size.height + image2.size.height);

    UIGraphicsBeginImageContext(size);

    ;
    ;

    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    //set finalImage to IBOulet UIImageView
    return finalImage;
}
</code></pre>

<p>为了生成组合图像,我使用了以下逻辑。在那我检查了组合图像的高度,它是否大于屏幕尺寸。
以下是我的整个代码逻辑,</p>

<pre><code>CGRect priorBounds = self.tableView.bounds;
    CGSize fittedSize = ;
    self.tableView.bounds = CGRectMake(0, 0, fittedSize.width, fittedSize.height);

    pdfViews = [ init];
    NSMutableData *pdfData = [ init];

    float sections = ;
    for (int C = 0; C &lt; sections; C++)
    {
      int rows = 0;
      rows = ;

      for (int I = 0; I &lt; rows; I++)
      {
            NSIndexPath *indexPath = ;

            UITableViewCell *cell = ;
            UIGraphicsBeginImageContextWithOptions(cell.bounds.size, cell.opaque, 0.0);
            ;
            UIImage *cellImage = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();
            ;
      }
    }

    NSArray *pageArray = pdfViews;
    UIImage *pdfFinalImage = [ init];
    UIImage *addOnImage = [ init];
    NSMutableArray *finalA = [ init];
    int checkHeight;
    checkHeight = 1024;

    for (int Z = 0; Z &lt; ; Z++)
    {
      if (Z == 0)
      {
            pdfFinalImage = ;

      }else if (Z+1 == )
      {
            addOnImage = ;
            if (pdfFinalImage.size.height+addOnImage.size.height &gt; checkHeight)
            {
                ;
                pdfFinalImage = ;
                ;

            }else
            {
                pdfFinalImage = ;
                ;
            }

      }else
      {
            UIImage *heightCheckImage = ;
            if (pdfFinalImage.size.height+heightCheckImage.size.height &gt; checkHeight)
            {
                ;
                pdfFinalImage = ;
            }else
            {
                addOnImage = ;
                pdfFinalImage = ;
            }
      }
    }

    UIGraphicsBeginPDFContextToData(pdfData, CGRectMake(0, 0, 768, 1024), nil);
    for (int IC = 0; IC &lt; ; IC++)
    {
      UIGraphicsBeginPDFPage();
      UIImage *mainImage = ;
      NSData *jpegData = UIImageJPEGRepresentation(mainImage, 0.5);
      CGDataProviderRef dp = CGDataProviderCreateWithCFData((__bridge CFDataRef)jpegData);
      CGImageRef cgImage = CGImageCreateWithJPEGDataProvider(dp, NULL, true, kCGRenderingIntentDefault);
      [ drawInRect:CGRectMake(0, 0, mainImage.size.width, mainImage.size.height)];
    }

    UIGraphicsEndPDFContext();
    self.tableView.bounds = priorBounds;
    ;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 从表格 View 生成 PDF 时出现问题,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/33515228/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/33515228/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 从表格 View 生成 PDF 时出现问题