Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Mesclar/combinar vários arquivos PDF em um PDF no Oracle usando o pacote PLPDF_TOOLKIT PL/SQL


Neste tutorial, estou dando um exemplo para mesclar/combinar vários arquivos PDF em um arquivo PDF no Oracle usando o pacote PLPDF_TOOLKIT PL/SQL.

Suponha que você tenha uma tabela para funcionários com um campo BLOB e para cada funcionário esta tabela contendo vários documentos em formato PDF e você deseja mesclar todos esses documentos de um funcionário em um documento e salvá-lo no campo BLOB de outra tabela.

Você pode conferir meus posts anteriores sobre como salvar arquivos PDF em uma coluna BLOB, abaixo está a lista:
  • Como obter o BLOB do arquivo em PL/SQL?
  • Como salvar BLOB como arquivo em PL/SQL?
  • Como obter o arquivo do BLOB no Oracle?

Nas postagens mencionadas acima, você aprenderá como salvar um único PDF e extrair os dados BLOB contendo um único PDF. Aqui você aprenderá como combinar vários arquivos PDF em um arquivo PDF e armazenar em um BLOB.

Mesclar/combinar vários PDFs em um arquivo PDF usando a função PLPDF_TOOLKIT.MERGE


A seguir está a estrutura simples de uma tabela de funcionários para conter vários arquivos PDF (em vários registros) armazenados no BLOB para cada funcionário. A partir desta tabela, obteremos os arquivos para mesclar. Para testar, crie esta tabela e insira alguns registros múltiplos (arquivos PDF) para o funcionário número 76465:

1. Crie uma tabela de origem

Create Table Emp_Docs (
empno number,
blob_data blob
);

2. Crie uma tabela para armazenar PDF mesclado


Agora crie uma tabela para armazenar os arquivos PDF mesclados para um funcionário:
Create Table Emp_Pdfs (
empno number,
merged_pdf blob
);

3. Crie um programa PL/SQL para mesclar PDFs


Em seguida, execute o seguinte código PL/SQL para obter os arquivos PDF de um funcionário 76465, mescle em um arquivo PDF e armazene-o na tabela Emp_Pdfs. Para realizar esta tarefa, estou usando a função PLPDF_TOOLKIT.MERGE.
Declare

  l_Blob1 BLOB; 
  l_Blob2 BLOB; 
  l_Blob3 BLOB; 
 
  CURSOR Cur_empDocs IS 
    SELECT blob_data, 
           Rownum Row_n 
      FROM emp_docs 
     WHERE empno = 76465;

  n_Count   INTEGER := 0; 
BEGIN
 
  FOR c IN Cur_empDocs LOOP 
    IF c.row_n = 1 THEN 
      Dbms_Lob.Createtemporary(Lob_Loc => l_Blob1, 
                               Cache   => TRUE, 
                               Dur     => Dbms_Lob.Call); 
      l_Blob1 := c.blob_data; 
     
    ELSE 
      Dbms_Lob.Createtemporary(Lob_Loc => l_Blob2, 
                               Cache   => TRUE, 
                               Dur     => Dbms_Lob.Call); 
      l_Blob2 := c.blob_data; 
     
      Dbms_Lob.Createtemporary(Lob_Loc => l_Blob3, 
                               Cache   => TRUE, 
                               Dur     => Dbms_Lob.Call); 
     
      l_Blob3 := Plpdf_Toolkit.Merge(l_Blob1, 
                                     l_Blob2); 
     
      l_Blob1 := l_Blob3; 
     
    END IF; 
    n_Count := n_Count + 1; 
  END LOOP; 
 
  IF n_Count > 0 THEN 
   
    insert into emp_pdfs (empno, merged_pdf) values (76465, l_blob1);
   
    COMMIT; 
 
  END IF; 
EXCEPTION 
  WHEN OTHERS THEN 
    raise;
END;

Por exemplo, se houver 3 arquivos PDF armazenados em 3 registros para o funcionário 76465, eles serão combinados em um PDF. Mesmo que haja apenas um documento PDF para um funcionário, ele armazenará o único.

Você pode consultar a tabela Emp_Pdfs para ver o resultado.

Veja também:

  • Exibir conteúdo BLOB (PDF, imagens) em uma região na página do Oracle Apex
  • Como criar um relatório em PDF usando PL/SQL