Esempio n. 1
0
  /**
   * @param \Drupal\file\FileInterface $file
   * @param \Drupal\fillpdf\FillPdfFormInterface $existing_form
   * @return array
   */
  public function attachPdfToForm(FileInterface $file, FillPdfFormInterface $existing_form = NULL) {
    $this->saveFileUpload($file);

    if ($existing_form) {
      $fillpdf_form = $existing_form;
      $fillpdf_form->file = $file;
    }
    else {
      $fillpdf_form = FillPdfForm::create([
        'file' => $file,
        'title' => $file->filename,
        'scheme' => $this->config('fillpdf.settings')->get('scheme'),
      ]);
    }

    // Save PDF configuration before parsing.
    $fillpdf_form->save();

    $config = $this->config('fillpdf.settings');
    $fillpdf_service = $config->get('backend');
    /** @var FillPdfBackendPluginInterface $backend */
    $backend = $this->backendManager->createInstance($fillpdf_service, $config->get());

    // Attempt to parse the fields in the PDF.
    $fields = $backend->parse($fillpdf_form);

    $form_fields = [];
    foreach ((array) $fields as $arr) {
      if ($arr['type']) { // Don't store "container" fields
        // pdftk sometimes inserts random � markers - strip these out.
        // NOTE: This may break forms that actually DO contain this pattern,
        // but 99%-of-the-time functionality is better than merge failing due
        // to improper parsing.
        $arr['name'] = str_replace('�', '', $arr['name']);
        $field = FillPdfFormField::create(
          [
            'fillpdf_form' => $fillpdf_form,
            'pdf_key' => $arr['name'],
            'value' => '',
          ]
        );

        $form_fields[] = $field;
      }
    }

    // Save the fields that were parsed out (if any). If none were, set a
    // warning message telling the user that.
    foreach ($form_fields as $fillpdf_form_field) {
      /** @var FillPdfFormField $fillpdf_form_field */
      $fillpdf_form_field->save();
    }
    return ['form' => $fillpdf_form, 'fields' => $form_fields];
  }
Esempio n. 2
0
 public function getFormFields(FillPdfFormInterface $fillpdf_form) {
   return FillPdfFormField::loadMultiple(
     $this->entityQuery->get('fillpdf_form_field')
       ->condition('fillpdf_form', $fillpdf_form->id())
       ->execute());
 }