Concatenar documentos PDF
Concatenar Arquivos PDF Usando Caminhos de Arquivos (Facades)
O método concatenate da classe PdfFileEditor pode ser usado para concatenar dois arquivos PDF. O método concatenate permite que você passe três parâmetros: primeiro PDF de entrada, segundo PDF de entrada, e PDF de saída. O PDF de saída final contém ambos os arquivos PDF de entrada.
O trecho de código a seguir mostra como concatenar arquivos PDF usando caminhos de arquivos.
public static void ConcatenatePDFfilesUsingFilePaths01() {
// Criar objeto PdfFileEditor
PdfFileEditor pdfEditor = new PdfFileEditor();
// Concatenar arquivos
pdfEditor.concatenate(_dataDir + "Sample-Document-01.pdf", _dataDir + "Sample-Document-02.pdf",
_dataDir + "Concatenate_Result_01.pdf");
}
Em alguns casos, quando há muitos contornos, os usuários podem desativá-los configurando CopyOutlines para false e melhorar o desempenho da concatenação.
public static void ConcatenatePDFfilesUsingFilePaths02() {
// Criar objeto PdfFileEditor
PdfFileEditor pdfEditor = new PdfFileEditor();
// Concatenar arquivos
String[] inputFiles = Directory.GetFiles(_dataDir, "Sample-Document-0?.pdf");
pdfEditor.CopyOutlines = false;
var res = pdfEditor.Concatenate(inputFiles, _dataDir + "Concatenate_Result_02.pdf");
Console.WriteLine(res);
}
Concatenar múltiplos arquivos PDF usando MemoryStreams
O método Concatenate da classe PdfFileEditor leva os arquivos PDF de origem e o arquivo PDF de destino como parâmetros. Esses parâmetros podem ser caminhos para os arquivos PDF no disco ou podem ser MemoryStreams. Agora, para este exemplo, primeiro criaremos dois fluxos de arquivos para ler os arquivos PDF do disco. Em seguida, converteremos esses arquivos em arrays de bytes. Esses arrays de bytes dos arquivos PDF serão convertidos em MemoryStreams. Assim que obtivermos os MemoryStreams dos arquivos PDF, poderemos passá-los para o método de concatenação e mesclar em um único arquivo de saída.
O trecho de código a seguir mostra como concatenar vários arquivos PDF usando MemoryStreams:
public static void ConcatenateMultiplePDFfilesUsingMemoryStreams()
{
// Criar dois fluxos de arquivos para ler arquivos pdf
FileInputStream fs1 = new FileInputStream(_dataDir + "Sample-Document-01.pdf");
FileInputStream fs2 = new FileInputStream(_dataDir + "Sample-Document-02.pdf");
// Criar arrays de bytes para manter o conteúdo dos arquivos PDF
byte[] buffer1 = new byte[Convert.ToInt32(fs1.le)];
byte[] buffer2 = new byte[Convert.ToInt32(fs2.Length)];
// Ler o conteúdo do arquivo PDF em arrays de bytes
fs1.Read(buffer1, 0, Convert.ToInt32(fs1.Length));
fs2.Read(buffer2, 0, Convert.ToInt32(fs2.Length));
// Agora, primeiro converta arrays de bytes em MemoryStreams e depois concatene esses streams
using (MemoryStream pdfStream = new MemoryStream())
{
using (MemoryStream fileStream1 = new MemoryStream(buffer1))
{
using (MemoryStream fileStream2 = new MemoryStream(buffer2))
{
// Criar instância da classe PdfFileEditor para concatenar streams
PdfFileEditor pdfEditor = new PdfFileEditor();
// Concatenar ambos os MemoryStreams de entrada e salvar no MemoryStream de saída
pdfEditor.Concatenate(fileStream1, fileStream2, pdfStream);
// Converter MemoryStream de volta para array de bytes
byte[] data = pdfStream.ToArray();
// Criar um FileStream para salvar o arquivo PDF de saída
FileStream output = new FileStream(_dataDir + "Concatenate_Result_03.pdf", FileMode.Create,
FileAccess.Write);
// Escrever o conteúdo do array de bytes no fluxo de arquivo de saída
output.Write(data, 0, data.Length);
// Fechar arquivo de saída
output.Close();
}
}
}
// Fechar arquivos de entrada
fs1.Close();
fs2.Close();
}
Concatenar Array de Arquivos PDF Usando Caminhos de Arquivos (Facades)
Se você quiser concatenar vários arquivos PDF, pode usar a sobrecarga do método de concatenação, que permite passar um array de caminhos de arquivos PDF. A saída final é salva como um arquivo mesclado criado a partir de todos os arquivos no array.
O trecho de código a seguir mostra como concatenar um array de arquivos PDF usando caminhos de arquivos.
public static void ConcatenateArrayOfPDFfilesUsingFilePaths() {
// Criar objeto PdfFileEditor
PdfFileEditor pdfEditor = new PdfFileEditor();
// Array de arquivos
string[] filesArray = new string[2];
filesArray[0] = _dataDir + "Sample-Document-01.pdf";
filesArray[1] = _dataDir + "Sample-Document-02.pdf";
// Concatenar arquivos
pdfEditor.Concatenate(filesArray, _dataDir + "Concatenate_Result_04.pdf");
}
Concatenar Array de Arquivos PDF Usando Streams (Facades)
Concatenar um array de arquivos PDF não se limita apenas a arquivos residindo no disco. Você também pode concatenar um array de arquivos PDF a partir de streams. Se você deseja concatenar vários arquivos PDF, pode usar a sobrecarga apropriada do método Concatenate. Primeiro, você precisa criar um array de streams de entrada e um stream para o PDF de saída e, em seguida, chamar o método Concatenate. A saída será salva no stream de saída.
O snippet de código a seguir mostra como concatenar um array de arquivos PDF usando streams.
public static void ConcatenateArrayOfPDFfilesUsingStreams() {
// Criar objeto PdfFileEditor
PdfFileEditor pdfEditor = new PdfFileEditor();
// Array de streams
FileStream[] inputStreams = new FileStream[2];
inputStreams[0] = new FileStream(_dataDir + "Sample-Document-01.pdf", FileMode.Open);
inputStreams[1] = new FileStream(_dataDir + "Sample-Document-02.pdf", FileMode.Open);
// Stream de saída
FileStream outputStream = new FileStream(_dataDir + "Concatenate_Result_05.pdf", FileMode.Create);
// Concatenar arquivo
pdfEditor.Concatenate(inputStreams, outputStream);
}
Concatenar Formulários PDF e manter nomes de campos exclusivos
A classe PdfFileEditor no namespace com.aspose.pdf.facades oferece a capacidade de concatenar os arquivos PDF. Agora, se os arquivos Pdf que devem ser concatenados tiverem campos de formulário com nomes de campo semelhantes, o Aspose.PDF fornece o recurso para manter os campos no arquivo Pdf resultante como únicos e também permite especificar o sufixo para tornar os nomes dos campos únicos. O método KeepFieldsUnique de PdfFileEditor como verdadeiro tornará os nomes dos campos únicos quando os formulários Pdf forem concatenados. Além disso, o método UniqueSuffix de PdfFileEditor pode ser usado para especificar o formato definido pelo usuário do sufixo que é adicionado ao nome do campo para torná-lo único quando os formulários são concatenados. Esta string deve conter a substring %NUM%, que será substituída por números no arquivo resultante.
Veja o seguinte trecho de código simples para alcançar essa funcionalidade.
public static void ConcatenatePDFformsAndKeepFieldsNamesUnique()
{
// Definir caminhos de arquivo de entrada e saída
string inputFile1 = _dataDir + "Sample-Form-01.pdf";
string inputFile2 = _dataDir + "Sample-Form-02.pdf";
string outFile = _dataDir + "ConcatenatePDFForms_out.pdf";
// Instanciar Objeto PdfFileEditor
PdfFileEditor fileEditor = new PdfFileEditor
{
// Para manter ID de campo único para todos os campos
KeepFieldsUnique = true,
// Formato do sufixo que é adicionado ao nome do campo para torná-lo único quando os formulários são concatenados.
UniqueSuffix = "_%NUM%"
};
// Concatenar os arquivos em um arquivo Pdf resultante
fileEditor.Concatenate(inputFile1, inputFile2, outFile);
}
Concatenate Inserir página em branco
Depois que os arquivos PDF foram mesclados, podemos inserir uma página em branco no início do documento na qual podemos criar o Índice. Para cumprir este requisito, podemos carregar o arquivo mesclado no objeto Documento e precisamos chamar o método Page.Insert(…) para inserir uma página em branco.
public static void ConcatenatePDF_InsertBlankPage() {
// Criar objeto PdfFileEditor
PdfFileEditor pdfEditor = new PdfFileEditor();
var documents = new Aspose.Pdf.Document[3];
documents[0] = new Aspose.Pdf.Document(_dataDir + "Sample-Document-01.pdf");
documents[1] = new Aspose.Pdf.Document(_dataDir + "Sample-Document-02.pdf");
var destinationDoc = new Aspose.Pdf.Document();
destinationDoc.Pages.Add();
// Concatenar arquivos
pdfEditor.Concatenate(documents, destinationDoc);
destinationDoc.Save(_dataDir + "Concatenate_Result_06.pdf");
}