Converter documentos do escritório em PDFs automaticamente com a API de serviços PDF Foxit

Com nossas APIs de descanso, agora é possível para qualquer desenvolvedor configurar uma integração e documentar o fluxo de trabalho usando sua linguagem de escolha. Mas e as automações do fluxo de trabalho? Felizmente, isso é ainda mais simples (é claro, dependendo da plataforma), pois você pode confiar no serviço de fluxo de trabalho para lidar muito com o levantamento pesado de qualquer automação que você possa ter. Nesta postagem do blog, vou demonstrar um fluxo de trabalho fazendo uso do PipedReam. O PipedReam é uma plataforma de baixo código que permite criar fluxos de trabalho flexíveis, reunindo várias pequenas etapas atômicas. Tem sido um dos meus favoritos há algum tempo, e eu absolutamente recomendo. Mas observe que o que vou mostrar aqui hoje pode ser absolutamente feito em outras plataformas, como o N8N. Quer a versão televisionada? Pegue o vídeo abaixo: Nosso documento do escritório para PDF Workflow Nosso fluxo de trabalho é baseado nas pastas do Dropbox e lida com a conversão automática de documentos do escritório em PDFs. To support that, it does the following: Listen for new files in a Dropbox folder Do a quick sanity check (is it in the input subdirectory and an Office file) Download the file to Pipedream Send it to Foxit via the Upload API Kick off the appropriate conversion based on the Office type Check status via the Status API When done, download the result to Pipedream And finally, push it up to Dropbox in an output subdirectory Here’s a nice graphical representation of this Fluxo de trabalho: Antes de entrarmos no código, observe que as plataformas de fluxo de trabalho como o PipeDream são incrivelmente flexíveis. Quando construo fluxos de trabalho com plataformas como essa, tento dar a cada etapa o mais atômico e focado possível. Eu poderia ter construído uma versão mais curta e mais compacta deste fluxo de trabalho. No entanto, tê -lo quebrado assim facilita a copiar e o modificar daqui para frente (e é exatamente assim que esse surgiu, foi baseado em uma versão mais simples e anterior). Ok, vamos quebrá-lo, passo a passo. Sendo acionados no tubulação, os fluxos de trabalho começam com um gatilho. Embora existam muitas opções para isso, meu fluxo de trabalho usa um “novo arquivo do Dropbox”. Eu conectei o Dropbox via PipeDream para que ele tenha acesso à minha conta. Em seguida, especifiquei uma pasta de nível superior, “Foxit”, para a integração. Além disso, existem duas configurações mais importantes: recursivo – isso diz ao gatilho para arquivar qualquer novo arquivo no diretório raiz, “Foxit”. Minha pasta Dropbox Foxit possui um diretório de entrada e saída. Incluir link – isso diz ao Pipedream para garantir que obtemos um link para o novo arquivo. Isso é necessário para baixá -lo mais tarde. Filtrando o fluxo do documento As próximas duas etapas estão focadas em filtrar e interromper o fluxo de trabalho, se necessário. O primeiro, end_if_output, é uma etapa de fluxo de tubulação embutida que permite fornecer uma condição para o fluxo de trabalho terminar. Primeiro, verificarei o valor do caminho do gatilho (o caminho do novo arquivo) e, se ele contiver “saída”, isso significa que é um novo arquivo no diretório de saída e o fluxo de trabalho não deve ser executado. O próximo filtro é uma etapa de código que lida com duas tarefas. Primeiro, ele verifica se o novo arquivo é um tipo de escritório suportado –.docx, .xlsx ou .pptx – usando nossas APIs. Se a extensão não for uma dessas, o fluxo de trabalho termina programaticamente. Mais tarde no fluxo de trabalho, também precisarei da mesma extensão para rotear a solicitação para o terminal correto. Portanto, o código lida com ambos: validação e preservação da extensão. Importar OS Def Handler (PD: “PipedReam”): Base, Extension = OS.Path.splitext (PD.STEPS[‘trigger’][‘event’][‘name’]) se extensão == “.docx”: api = “/pdf-services/api/documents/create/pdf-from-word” elif extension == “.xlsx”: api = “/pdf-services/api/documents/create/pdf-from-excel” e elif = “/PDF-Services/API/Documents/Create/PDF-FROM-PPT” PRESSE: Return pd.flow.exit (f “Exibindo fluxo de trabalho devido à extensão desconhecida: {Extension}.”) Retorno {“API”: API} Digite o modo de tela completa O modo de tela completa, como você pode ver se a extensão “não é válida. mensagem, que posso verificar mais tarde através da interface do usuário do tubo). Também devolvo o endpoint direito se uma extensão suportada foi usada. Isso será útil mais tarde no fluxo. Faça o download e faça o upload dos dados da API As próximas duas etapas são principalmente sobre como mover dados da fonte de entrada (Dropbox) para a nossa API (Foxit). A primeira etapa, download_to_tmp, usa um script python simples para transferir o arquivo Dropbox para o diretório /tmp para uso nos solicitações de importação do fluxo de trabalho, o Handler (PD: “Pipedream”): Download_url = Pd.Steps[“trigger”][“event”][“link”]

file_path = f “/tmp/ {pd.steps[‘trigger’][‘event’][‘name’]} “com requests.get (download_url, stream = true) como resposta: resposta.raise_for_status () com open (file_path,” wb “) como arquivo: para chunk in Response.iter_content (chunk_size o jeito completo = 8192): arquivo. A próxima etapa do upload para Foxit através da API de upload: importar o sistema de importação solicita o DEF Handler (PD: “PipeDream”): clientId = os.environ.get (‘foxit_client_id’) secret = os.environ.get (‘foxit_client_secret’) = isto (“gon.get (‘floxit (‘ Foxit_Client_Client_Secret ‘) = os.envoron.get (‘ Foxit ‘) “Client_Secret”: Secret} com o Open (PD.STEPS[‘download_to_tmp’][‘$return_value’]’rb’) como f: arquivos = {‘arquivo’: (pd.Steps[‘download_to_tmp’][‘$return_value’]f)} request = requests.post (f “{host}/pdf-services/api/documents/upload”, arquivos = arquivos, cabeçalhos = cabeçalhos) return request.json () digite o modo de tela cheia de tela full-screen e o modo de tela full-screen e o modo de linha full e o modo de tela full-screen e o modo de linha full e o modo de tela inteira e o modo de tela full-screen e o modo de tela inteira e o modo de tela full-screen e o modo de linha full. Uso deles para minhas credenciais e host da Foxit. Pegue suas próprias credenciais gratuitas aqui! Convertendo o documento usando a API Foxit A próxima etapa realmente iniciará a conversão. Meu fluxo de trabalho suporta três tipos de entrada diferentes (Word, PowerPoint e Excel). Estes mapeiam para três pontos de extremidade da API. Mas lembre -se de que, anteriormente, farejamos a extensão de nossa entrada e definimos o ponto final lá. Como todas as três APIs funcionam da mesma forma, isso é literalmente tudo o que precisamos fazer – acertar o terminal e passar o valor do documento da etapa anterior. Importar solicitações de importação do Def Handler (PD: “PipeDream”): clientId = os.environ.get (‘foxit_client_id’) secret = os.environ.get (‘foxit_client_secret’) host = os.environ.get (‘foxit_host’) tabela “{” client_id “: cliente:” cliente, ” “Content-type”: “Application/JSON”} Body = {“DocumentId”: PD.STEPS[‘upload_to_foxit’][‘$return_value’][‘documentId’]

} API = PD.STEPS[‘extension_check’][‘$return_value’][‘api’]

print (f “{host} {api}”) request = requests.post (f “{host} {api}”, json = corpo, cabeçalhos = cabeçalhos) return request.json () digite o modo de tela full screen fullcreen Mode “: o resultado dessa chamada e quase todas as APIs Foxit, será uma tarefa:” TaskId “” Status O próximo passo é aquele que pode levar alguns segundos – verificando o status do trabalho. O ponto final do Foxit retorna um valor como assim: {“taskId”: “”, “status”: “”, “Progress”: “”, “resultdocumentId”: “”, “Error”: {“Code”: “”, “Mensagem”: “}} Digite o modo de tela completa. Aqui está o código do Python para isso: importar solicitações de importação do sistema de importação do Sleep Def Handler (PD: “PipeDream”): clientId = os.environ.get (‘foxit_client_id’) secret = os.environ.get (‘floxit_client_secret’) host = os.environ.get (‘FOXIT_HOST’) “client_secret”: segredo, “type de conteúdo”: “Application/json”} done = false enquanto feito é false: requests.get (f “{host}/pdf-services/api/tasks/{pd.steps[‘create_conversion_job’][‘$return_value’][‘taskId’]} “, cabeçalhos = cabeçalhos) status = request.json () se status[“status”] == “Concluído”: done = status de retorno True Elif Status[“status”] == “falhou”: print (“falha. Aqui está o último status:”) print (status) retornar pd.flow.exit (“falha no trabalho”) else: print (f “status atual, {status[‘status’]}, porcentagem: {status[‘progress’]} “) Sleep (5) Digite o modo de saída de tela cheia da tela cheia, como mostrado, os erros são simplesmente registrados por padrão – mas você pode aprimorar isso adicionando notificações, como enviar um e -mail a um administrador, enviar uma mensagem de texto ou outros alertas. lida com o download do resultado do Foxit usando o endpoint Download: Importar solicitações Importar o OS Def Handler (PD: “PipeDream”): clientId = os.environ.get (‘foxit_client_id’) secret = os.environ.get (‘foxit_client_secret’) host = odonviron.get (‘FOXIT_HOST’) “Client_Secret”: Secret,} # Dado um arquivo de input.docx, precisamos usar o input.pdf base_name, _ = os.path.splitext (pd.steps[‘trigger’][‘event’][‘name’]) caminho = f “/tmp/ {base_name }.pdf” print (caminho) com open (path, “wb”) como saída: bits = requests.get (f “{host}/pdf-services/api/documents/{pd.steps[‘check_job’][‘$return_value’][‘resultDocumentId’]}/download “, stream = true, cabeçalhos = cabeçalhos) .Content Output.Write (bits) return {” FileName “: f” {base_name} .pdf “,” caminho “: caminho} digite o modo de tela full -full. Extensão em PDF para criar o nome do arquivo usado para armazenar localmente para o Fream. e corresponder aos valores e expressões codificados. {{Steps.Download_result_to_tmp. No fundo, posso simplesmente colocar os arquivos na minha pasta Dropbox e meus documentos do escritório serão convertidos automaticamente.

Fonte

Publicar comentário

Você pode ter perdido