菜鸟教程小白 发表于 2022-12-12 19:37:30

iphone - 将多个 pdf 文档合并为单个文档不起作用


                                            <p><p>我正在尝试将 11 个 pdf 文件合并为一个 pdf 文件。我正在使用以下代码,但在最终的 pdf 中仅显示第一个 pdf ...我在循环中记录了 pdfurls 和 CGPDFDocumentRef,它们是不是一直为零(在循环中)。可能是什么原因导致最终文档中只显示第一页</p>

<pre><code>-(void)mergeDocuments
    {


      NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
      NSString *documentsDirectory = ; // Get documents folder

      NSString *oldFile=;
      NSMutableData *data=[ init];
         CGRect paperSize=CGRectMake(0,0,kDefaultPageWidth,kDefaultPageHeight);
      UIGraphicsBeginPDFContextToData(data, paperSize, nil);

      for (int pageNumber = 1; pageNumber &lt;= 11; pageNumber++)
      {

            NSString *pdfPath = [] retain];



            NSURL *pdfUrl = [ retain];



            UIGraphicsBeginPDFPageWithInfo(paperSize, nil);


            CGContextRef currentContext = UIGraphicsGetCurrentContext();


            CGContextTranslateCTM(currentContext, 0, paperSize.size.height);
            CGContextScaleCTM(currentContext, 1.0, -1.0);



            CGPDFDocumentRef newDocument = CGPDFDocumentCreateWithURL ((CFURLRef) pdfUrl);

            CGPDFPageRef newPage = CGPDFDocumentGetPage (newDocument, pageNumber);


            CGContextDrawPDFPage (currentContext, newPage);
            newPage = nil;      
            CGPDFDocumentRelease(newDocument);
            newDocument = nil;
            ;

      }

      NSURL *finalUrl=;



      UIGraphicsEndPDFContext();
;
    }
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>看起来您的代码假定每个文档中只有一页,但是它在打开每个文件时要求页面 <code>pageNumber</code>,因此要求 page_1 中的第 1 页.pdf、page_2.pdf 中的第 2 页、page_3.pdf 中的第 3 页等...</p>

<p>如果您只想从每个文档的第一页更改此:</p>

<pre><code>CGPDFPageRef newPage = CGPDFDocumentGetPage (newDocument, pageNumber);
</code></pre>

<p>对此:</p>

<pre><code>CGPDFPageRef newPage = CGPDFDocumentGetPage (newDocument, 1);
</code></pre>

<p>为了它的值(value),在我发现这个之前,我根据我已经拥有的一个例程重新编写了你的​​例程(请原谅我,但它是在一个 ARC 项目中,所以你必须重新进行内存管理)如下:</p>

<p><strong>(注意:已删除错误检查以使代码更具可读性!)</strong></p>

<pre><code>-(void)mergeDocuments {
    NSArray   *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString    *documentsDirectory = ;

    NSString    *oldFilePath=;
    NSURL       *oldFileUrl = ;

    CGContextRef context = CGPDFContextCreateWithURL((__bridge_retained CFURLRef)oldFileUrl, NULL, NULL);

    for (int docNumber = 1; docNumber &lt;= 11; docNumber++)
    {
      // Get the first page from each source document
      NSString            *pdfPath      = ];
      NSURL               *pdfUrl         = ;
      CGPDFDocumentRef    pdfDoc          = CGPDFDocumentCreateWithURL((__bridge_retained CFURLRef)pdfUrl);
      CGPDFPageRef      pdfPage         = CGPDFDocumentGetPage(pdfDoc, 1);
      CGRect            pdfCropBoxRect= CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox);

      // Copy the page to the new document
      CGContextBeginPage(context, &amp;pdfCropBoxRect);
      CGContextDrawPDFPage(context, pdfPage);

      // Close the source files
      CGContextEndPage(context);
      CGPDFDocumentRelease(pdfDoc);         
    }

    // Cleanup
    CGContextRelease(context);
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 将多个 pdf 文档合并为单个文档不起作用,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/9668047/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/9668047/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 将多个 pdf 文档合并为单个文档不起作用