Converter formatos PDF para PDF/A
Aspose.PDF for C++ permite que você converta um arquivo PDF em um arquivo PDF compatível com PDF/A. Antes de fazer isso, o arquivo deve ser validado. Este tópico explica como.
Converta o arquivo usando o método Convert da classe Document. Antes de converter o PDF para um arquivo compatível com PDF/A, valide o PDF usando o método Validate. O resultado da validação é armazenado em um arquivo XML e, em seguida, esse resultado também é passado para o método Convert. Você também pode especificar a ação para os elementos que não podem ser convertidos usando a enumeração ConvertErrorAction.
Converter arquivo PDF para PDF/A-1b
O trecho de código a seguir mostra como converter arquivos PDF para PDF compatível com PDF/A-1b.
void ConverttoPDFA_1b()
{
std::clog << __func__ << ": Start" << std::endl;
// String para nome do caminho
String _dataDir("C:\\Samples\\Conversion\\");
// String para nome do arquivo de entrada
String infilename("sample.pdf");
// String para nome do arquivo de log
String logfilename("log.xml");
// String para nome do arquivo de saída
String outfilename("PDFToPDFA_out.pdf");
// Abrir documento
auto document = new Document(_dataDir + infilename);
// Converter para documento compatível com PDF/A
// Durante o processo de conversão, a validação também é realizada
document->Convert(_dataDir + logfilename, PdfFormat::PDF_A_1B, ConvertErrorAction::Delete);
// Salvar documento de saída
document->Save(_dataDir + outfilename);
std::clog << __func__ << ": Finish" << std::endl;
}
Para realizar apenas a validação, use a seguinte linha de código:
void ConverttoPDFA_1b_Validation()
{
std::clog << __func__ << ": Início" << std::endl;
// String para nome do caminho
String _dataDir("C:\\Samples\\Conversion\\");
// String para nome do arquivo de entrada
String infilename("sample.pdf");
// String para nome do arquivo de log
String logfilename("log.xml");
// Abrir documento
auto document = new Document(_dataDir + infilename);
// Converter para documento compatível com PDF/A
// Durante o processo de conversão, a validação também é realizada
document->Validate(_dataDir + logfilename, PdfFormat::PDF_A_1B);
std::clog << __func__ << ": Fim" << std::endl;
}
Converter arquivo PDF para PDF/A-3b
Aspose.PDF para C++ também suporta o recurso de converter um arquivo PDF para o formato PDF/A-3b.
void ConverttoPDFA_3b()
{
std::clog << __func__ << ": Início" << std::endl;
// String para nome do caminho
String _dataDir("C:\\Samples\\Conversion\\");
// String para nome do arquivo de entrada
String infilename("sample.pdf");
// String para nome do arquivo de log
String logfilename("log.xml");
// String para nome do arquivo de saída
String outfilename("PDFToPDFA3b_out.pdf");
// Abrir documento
auto document = new Document(_dataDir + infilename);
// Converter para documento compatível com PDF/A
// Durante o processo de conversão, a validação também é realizada
document->Convert(_dataDir + logfilename, PdfFormat::PDF_A_3B, ConvertErrorAction::Delete);
// Salvar documento de saída
document->Save(_dataDir + outfilename);
std::clog << __func__ << ": Fim" << std::endl;
}
Convert PDF file to PDF/A-2u
Aspose.PDF para C++ também suporta o recurso de converter um arquivo PDF para o formato PDF/A-2u.
void ConverttoPDFA_2u()
{
std::clog << __func__ << ": Start" << std::endl;
// String para nome do caminho
String _dataDir("C:\\Samples\\Conversion\\");
// String para nome do arquivo de entrada
String infilename("sample.pdf");
// String para nome do arquivo de log
String logfilename("log.xml");
// String para nome do arquivo de saída
String outfilename("PDFToPDFA3b_out.pdf");
// Abrir documento
auto document = new Document(_dataDir + infilename);
// Converter para documento compatível com PDF/A
// Durante o processo de conversão, a validação também é realizada
document->Convert(_dataDir + logfilename, PdfFormat::PDF_A_2U, ConvertErrorAction::Delete);
// Salvar documento de saída
document->Save(_dataDir + outfilename);
std::clog << __func__ << ": Finish" << std::endl;
}
Convert PDF file to PDF/A-3u
Aspose.PDF para C++ também suporta o recurso de converter um arquivo PDF para o formato PDF/A-3u.
void ConverttoPDFA_3u()
{
std::clog << __func__ << ": Iniciar" << std::endl;
// String para nome do caminho
String _dataDir("C:\\Samples\\Conversion\\");
// String para nome do arquivo de entrada
String infilename("sample.pdf");
// String para nome do arquivo de log
String logfilename("log.xml");
// String para nome do arquivo de saída
String outfilename("PDFToPDFA3b_out.pdf");
// Abrir documento
auto document = new Document(_dataDir + infilename);
// Converter para documento compatível com PDF/A
// Durante o processo de conversão, a validação também é realizada
document->Convert(_dataDir + logfilename, PdfFormat::PDF_A_2U, ConvertErrorAction::Delete);
// Salvar documento de saída
document->Save(_dataDir + outfilename);
std::clog << __func__ << ": Terminar" << std::endl;
}
Adicionar Anexo ao arquivo PDF/A
Caso você tenha a necessidade de anexar arquivos ao formato de conformidade PDF/A, então recomendamos usar o valor PDF_A_3A da enumeração Aspose.PDF.PdfFormat.
PDF/A_3a é o formato que fornece o recurso de anexar qualquer formato de arquivo como um anexo ao arquivo compatível com PDF/A.
void ConverttoPDFA_AddAttachment()
{
std::clog << __func__ << ": Iniciar" << std::endl;
// String para nome do caminho
String _dataDir("C:\\Samples\\Conversion\\");
// String para nome do arquivo de entrada
String infilename("sample.pdf");
// String para nome do arquivo de log
String logfilename("log.xml");
// String para nome do arquivo de saída
String outfilename("PDFToPDFA3b_out.pdf");
// Abrir documento
auto document = new Document(_dataDir + infilename);
// Configurar novo arquivo para ser adicionado como anexo
auto fileSpecification = MakeObject<FileSpecification>(_dataDir + String("aspose-logo.jpg"), String("Arquivo de imagem grande"));
// Adicionar anexo à coleção de anexos do documento
document->get_EmbeddedFiles()->Add(fileSpecification);
// Converter para documento compatível com PDF/A
// Durante o processo de conversão, a validação também é realizada
document->Convert(_dataDir + logfilename, PdfFormat::PDF_A_3A, ConvertErrorAction::Delete);
// Salvar documento de saída
document->Save(_dataDir + outfilename);
std::clog << __func__ << ": Terminar" << std::endl;
}
Substituir fontes ausentes por fontes alternativas
De acordo com os padrões PDFA, as fontes devem estar incorporadas no documento PDFA. No entanto, se as fontes não estiverem incorporadas no documento de origem ou existirem na máquina, o PDFA falha na validação. Neste caso, temos a necessidade de substituir fontes ausentes por algumas fontes alternativas da máquina. Podemos substituir fontes ausentes usando o método SimpleFontSubsituation conforme a seguir durante a conversão de PDF para PDFA.
void ConverttoPDFA_ReplaceFont()
{
std::clog << __func__ << ": Start" << std::endl;
// String para nome do caminho
String _dataDir("C:\\Samples\\Conversion\\");
// String para nome do arquivo de entrada
String infilename("sample.pdf");
// String para nome do arquivo de log
String logfilename("log.xml");
// String para nome do arquivo de saída
String outfilename("PDFToPDFA3b_out.pdf");
// Abrir documento
auto document = new Document(_dataDir + infilename);
System::SharedPtr<Aspose::Pdf::Text::Font> originalFont;
try
{
originalFont = FontRepository::FindFont(String("AgencyFB"));
}
catch (Exception)
{
// Fonte está ausente na máquina de destino
auto substitutions = FontRepository::get_Substitutions();
auto substitution = MakeObject<SimpleFontSubstitution>(String("AgencyFB"), String("Helvetica"));
substitutions->Add(substitution);
}
// Converter para documento compatível com PDF/A
try {
// Durante o processo de conversão, a validação também é realizada
document->Convert(_dataDir + logfilename, PdfFormat::PDF_A_1B, ConvertErrorAction::Delete);
// Salvar documento de saída
document->Save(_dataDir + outfilename);
}
catch (Exception ex) {
std::cerr << ex->get_Message();
}
std::clog << __func__ << ": Finish" << std::endl;
}
Tente converter PDF para PDF/A online
Aspose.PDF para C++ apresenta a você o aplicativo online gratuito “PDF para PDF/A-1A”, onde você pode tentar investigar a funcionalidade e a qualidade com que ele funciona.