Копировать макет блока PDFLib

У меня есть файл PDF с блоками PDFlib. Ни один из этих блоков не был заполнен. Мне нужно скопировать эти блоки, но не содержимое страницы, в набор других pdf-документов, каждый со своим содержимым. Блоки не нужно заполнять.

Идея заключается в том, что каждый документ представляет собой форму, но каждый немного отличается. Все поля формы находятся в одном месте, поэтому нам просто нужно скопировать блоки, включая их макет. Я уже проверил эту страницу документации, в котором описывается выполнение этого в том, что кажется одним документом с блоками в новый (пустой) документ.

Любая помощь приветствуется.


person Legendary_Linux    schedule 15.12.2014    source источник


Ответы (2)


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

С другой стороны, вы можете использовать плагин Acrobat Block и интерактивно копировать блоки из своего исходного PDF-файла в целевые PDF-файлы. Преимущество, когда вы делаете это в блочном плагине, вы можете сделать это напрямую.

Одна последняя идея:

  • иметь все свои блоки в чистом PDF.
  • импортировать форму в новый PDF
  • импортируйте шаблон блока, но используйте опцию «вслепую». Таким образом, вы можете обращаться к блокам, но визуальный контент не размещается.

Этот метод также используется путем размещения блочного содержимого ниже содержание.

person Rainer    schedule 17.12.2014

Я разработал сценарий PHP, чтобы справиться с этим. Смотри ниже:

try{
        # Create a new PDFLib instance
        $pdf = new PDFlib();
        $pdf->set_option('errorpolicy=return');
        $pdf->set_option('stringformat=utf8');

        # Create the optput document
        if(!($pdf->begin_document('','')))
            throw new Exception('Error: '.$pdf->get_errmsg());

        # Open the input document, in this case the block template file
        $block_file = $pdf->open_pdi_document('block_template.pdf','');
        if($block_file == 0) throw new Exception('Error: '.$pdf->get_errmsg());

        # Also open the target file we need to copy blocks to
        $target_file = $pdf->open_pdi_document('target_file.pdf','');
        if($target_file == 0) throw new Exception('Error: '.$pdf->get_errmsg());

        # Find the number of pages in the document
        $pages = $pdf->pcos_get_number($block_file,'length:pages');

        # Loop over each page
        for($page=0;$page<$pages;$page++){

            # Open the target file to clone its contents
            $target_input_page = $pdf->open_pdi_page($target_file,1,'');
            if($target_input_page == 0) throw new Exception('Error: '.$pdf->get_errmsg());

            # Create a blank PDF page with a dummy size
            $pdf->begin_page_ext(10,10,'');

            # Copy the contents of the input page to the new page. This also overrides the size set by the dummy page
            $pdf->fit_pdi_page($target_input_page,0,0,'adjustpage');

            # Count the blocks on this template file page
            $block_count = (int) $pdf->pcos_get_number($block_file, 'length:pages['.$page.']/blocks');

            # Loop over the blocks and copy them
            for($i=0;$i<$block_count;$i++){
                $block_name = $pdf->pcos_get_string($block_file,'pages['.$page.']/blocks['.$i.'].key');

                if ($pdf->process_pdi($block_file,0,'action=copyblock block={pagenumber='.($page+1).' blockname={'.$block_name.'}}') == 0)
                    throw new Exception("Error: " . $pdf->get_errmsg());
            }

            # End this page
            $pdf->end_page_ext('');

            # Close the pdf page
            $pdf->close_pdi_page($target_input_page);
        }

        # Close the PDF document
        $pdf->close_pdi_document($block_file);
        $pdf->close_pdi_document($target_file);
        $pdf->end_document('');

        # Get the output buffer
        $buffer = $pdf->get_buffer();

        # Write out the converted file
        $output_file = fopen('output_file.pdf','w+');
        fwrite($output_file,$buffer);
        fclose($output_file);
    }
    catch(PDFlibException $e){
        error_log("PDFlib exception occurred:\n" .
            "[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " .
            $e->get_errmsg() . "\n");
        exit(1);
    }
    catch(Exception $e){
        error_log($e);
        exit(1);
    }
person Legendary_Linux    schedule 18.12.2014