Электронный вход в файл PDF, превращает многостраничный PDF в одну страницу с одинаковым содержимым

Я пытаюсь подписать свой pdf-файл, который является многостраничным, путем извлечения подписи, нарисованной в UIView, в мой pdf-файл, но проблема, с которой я сталкиваюсь, заключается в том, что после подписания pdf-файла подпись интегрируется с pdf-файлом, где все страницы в pdf файл отображается на одной странице в виде файла PDF (например, если в файле PDF есть 8 страниц, то все 8 страниц отображаются как одна страница вместе с подписью). Вывод файла PDF со встроенной подписью выглядит следующим образом:

вывод кода

Коды, используемые для извлечения изображения из каталога документов и интеграции с файлом PDF,

- (void)viewWillAppear:(BOOL)animated
{
[webView reload];

UIWebView *webView;
webView= [[UIWebView alloc] initWithFrame:CGRectMake(0,44, 320, 460)];

NSString *path1;
path1 = [[NSBundle mainBundle] pathForResource:@"typo_tips" ofType:@"pdf"];

NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory,
                                                 NSUserDomainMask, YES);

NSString *documentDirectoryPath;
NSURL *targetURL;

documentDirectoryPath  = [[paths objectAtIndex:0]              stringByAppendingPathComponent:@"typo_tips.pdf"];

[fileManager copyItemAtPath:path1 toPath:documentDirectoryPath error:&error];

NSLog(@"path1 value is %@ \n",path1);
NSLog(@"docu dir path is %@ \n",documentDirectoryPath);



if (entered==1)//"entered==1", after save button clicked in signviewcontroller 
{
targetURL = [NSURL fileURLWithPath:documentDirectoryPath];


}
else     targetURL = [NSURL fileURLWithPath:path1];


 if (entered==1)
{


CFURLRef url;
url = (CFURLRef)CFBridgingRetain([NSURL fileURLWithPath:documentDirectoryPath]);
CGPDFDocumentRef myDocument;
myDocument = CGPDFDocumentCreateWithURL(url);

// Create PDF context
CGContextRef pdfContext = CGPDFContextCreateWithURL(url, NULL, NULL);     //(CFURLRef)outputURL
CGPDFContextBeginPage(pdfContext, NULL);
UIGraphicsPushContext(pdfContext);

int totalPages = (int)CGPDFDocumentGetNumberOfPages(myDocument);
NSLog(@"no. of pages in pdf is %d \n",totalPages);

for (int currentPage = 0; currentPage < totalPages; currentPage++)
{

CGContextDrawPDFPage(UIGraphicsGetCurrentContext(), CGPDFDocumentGetPage(myDocument, page));
//"page" is current pdf page to be signed

    if (page == currentPage)
    {

    NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Image.png"];// "image.png" is the saved user's signature in document directory

    image = [[UIImage alloc] initWithContentsOfFile:filePath];
    CGRect imageRect = CGRectMake(50, 50, image.size.width, image.size.height);

    CGContextDrawImage(UIGraphicsGetCurrentContext(), imageRect, image.CGImage);
    }

}


// Clean up
UIGraphicsPopContext();
CGPDFContextEndPage(pdfContext);
CGPDFContextClose(pdfContext);

}

NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[webView loadRequest:request];
[self.view addSubview:webView];
}

Может ли кто-нибудь помочь мне, как отображать страницу PDF отдельно вместе с интегрированной электронной подписью.


person sathya    schedule 14.11.2013    source источник


Ответы (2)


Попробуй это:

// Create PDF context
CGContextRef pdfContext = CGPDFContextCreateWithURL(url, NULL, NULL);     //(CFURLRef)outputURL

int totalPages = (int)CGPDFDocumentGetNumberOfPages(myDocument);
NSLog(@"no. of pages in pdf is %d \n",totalPages);

for (int currentPage = 0; currentPage < totalPages; currentPage++)
{
    CGPDFContextBeginPage(pdfContext, NULL);
    UIGraphicsPushContext(pdfContext);

    CGContextDrawPDFPage(UIGraphicsGetCurrentContext(), 
        CGPDFDocumentGetPage(myDocument, page));
    //"page" is current pdf page to be signed

    if (page == currentPage)
    {
        NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Image.png"];

        image = [[UIImage alloc] initWithContentsOfFile:filePath];
        CGRect imageRect = CGRectMake(50, 50, image.size.width, image.size.height);

        CGContextDrawImage(UIGraphicsGetCurrentContext(), imageRect, image.CGImage);
    }

    // Clean up
    UIGraphicsPopContext();
    CGPDFContextEndPage(pdfContext);
}

CGPDFContextClose(pdfContext);

В вашем цикле for вы должны создать новую страницу PDF для каждой страницы в исходном файле. Я переместил эти строки внутрь цикла for:

    CGPDFContextBeginPage(pdfContext, NULL);
    UIGraphicsPushContext(pdfContext);

а также соответствующий код очистки.

person iPDFdev    schedule 14.11.2013

Вы используете веб-просмотр, чтобы отобразить его Reader, который использует iOS, встроенный в классы чтения PDF.

https://github.com/vfr/Reader

В противном случае попробуйте настроить уровни масштабирования в вашем UIWebview. К сожалению, UIWebview имеет ограниченные возможности, потому что это всего лишь веб-контейнер.

person FaddishWorm    schedule 14.11.2013
comment
Я обновил свой вопрос своим выходным изображением, просто посмотрите и помогите мне, как отобразить его в виде многостраничного файла PDF. На самом деле масштабирование не является проблемой по моему вопросу. - person sathya; 14.11.2013