Adicionar marcas-d’água a documentos PDF
🤖/document/watermark adiciona marcas-d’água de texto personalizadas a todas as páginas de um PDF.

Adiciona texto a todas as páginas de um PDF existente, preservando o conteúdo original da página como conteúdo PDF. O texto selecionável existente continua selecionável. Os tamanhos das páginas, as caixas de recorte e a rotação das páginas são preservados.
O texto é incorporado ao conteúdo da página. Isso cria uma marca-d’água visível, mas não oferece proteção contra cópias nem remoção permanente de conteúdo.
Posicionamento por coordenadas
Use x_offset e y_offset para mover a marca-d’água em relação a position, como os deslocamentos da marca-d’água em /image/resize e /video/encode. Os deslocamentos usam pontos de PDF em vez de pixels e aceitam valores fracionários. Eles são aplicados após o ajuste do texto; deslocamentos que movem o texto para fora da área visível da página podem fazer com que ele seja cortado.
Para coordenadas medidas a partir do canto superior esquerdo da página visível, defina position: "top-left", margin: 0 e rotation: 0. Por exemplo, essas configurações posicionam a caixa delimitadora da marca-d’água a 72 pontos da borda esquerda e a 144 pontos da borda superior em todas as páginas, incluindo páginas rotacionadas e recortadas:
{
"robot": "/document/watermark",
"use": ":original",
"text": "Licensed to ${fields.name}",
"position": "top-left",
"margin": 0,
"rotation": 0,
"x_offset": 72,
"y_offset": 144
}
Apenas PDFs não criptografados são compatíveis. Modificar um PDF assinado digitalmente invalida suas assinaturas existentes. Este Robot não preserva a conformidade com PDF/A nem a certificação do documento.
Exemplo de uso
Adicionar texto específico da solicitação a todas as páginas de um PDF:
{
"steps": {
"watermarked": {
"robot": "/document/watermark",
"text": "${fields.watermark}",
"use": ":original"
}
}
}Parâmetros
interpolateboolean | Record<string, boolean>Controla se as Assembly Variables são interpoladas em campos individuais de instruções.
Por padrão, a maioria dos campos de instruções dos Robots interpola Assembly Variables. Defina isso como
falsepara tratar todos os campos de instruções como texto literal, ou defina o caminho de um campo individual comofalsepara tratar apenas esse campo como texto literal. Para campos específicos de um Robot que são literais por padrão, defina isso comotrueou defina o caminho desse campo comotruepara voltar a usar a interpolação.Use nomes de campos como
pathou caminhos com pontos comoffmpeg.vfpara objetos aninhados.output_metaRecord<string, boolean> | boolean | Array<string>Permite especificar um conjunto de metadados cujo cálculo é mais custoso para a CPU e que, por isso, vem desativado por padrão para manter o processamento das suas Assemblies rápido.
Para imagens, você pode adicionar
"has_transparency": trueneste objeto para extrair se a imagem contém partes transparentes e"dominant_colors": truepara extrair um array de códigos de cores hexadecimais da imagem.Para imagens, você também pode adicionar
"blurhash": truepara extrair uma string BlurHash, uma representação compacta de um placeholder da imagem, útil para exibir uma prévia desfocada enquanto a imagem completa carrega.Para imagens,
"thumbhash": trueem vez disso extrai um ThumbHash codificado em base64 emmeta.thumbhash, junto commeta.has_alpha(se existe um canal alfa, mesmo quando totalmente opaco). Ele descreve pixels orientados por EXIF e usa o primeiro quadro de imagens animadas. A extração é feita em regime de melhor esforço: imagens acima de 40 megapixels, formatos não suportados ou uma decodificação com falha/limitada não geram placeholder. Uma extração bem-sucedida adiciona uma cobrança de metadados equivalente a 20% dos bytes desse arquivo. Nenhuma sobretaxa de ThumbHash se aplica quando desativado ou quando nenhum hash é gerado.Defina essa opção no Step que produz a imagem, como
/upload/handlepara originais enviados por upload ou/image/resizepara saídas processadas. Defini-la apenas em/transloadit/storenão solicita a extração: o armazenamento preserva os metadados do produtor. O Transloadit Storage persiste um hash gerado com sua versão imutável e o retorna em resultados armazenados e em leituras nativas de ativos. Uploads diretos para o S3 não geram placeholders. Um placeholder contém informações da imagem, portanto proteja-o com os mesmos controles de acesso da imagem completa.Para vídeos, você pode adicionar o parâmetro
"colorspace": truepara extrair o espaço de cores do vídeo de saída.Para vídeos, você também pode adicionar
"interlaced": truepara detectar se o vídeo é entrelaçado. Isso combina a flag barata do ffprobefield_ordercom uma passagem de amostragemidetlimitada sobre os primeiros quadros da origem, expondointerlaced,field_ordere um objeto de diagnósticointerlace_detectionemfile.meta. Isso é computacionalmente caro e cobrado de acordo.Para áudio, você pode adicionar
"mean_volume": truepara obter um único valor que representa o volume médio do arquivo de áudio.Você também pode definir isso como
falsepara pular a extração de metadados e acelerar a transcodificação.user_metaRecord<string, any>(padrão:{})Adiciona metadados JSON personalizados a cada arquivo emitido sem modificar seu conteúdo. Objetos e arrays aninhados são suportados.
A herança depende do Robot. Os valores são mesclados com o
user_metaexistente no arquivo de saída; o Step atual substitui as chaves de nível superior com o mesmo nome. Atribua explicitamente as chaves necessárias quando um Robot criar novas saídas.Nos Steps de processamento,
${file.*}se refere à primeira entrada e${result.*}ao arquivo emitido. Os valores são avaliados para cada saída após a execução do Robot, antes da extração subsequente de metadados e do armazenamento temporário. Em:original, os valores são avaliados para cada upload antes da extração de metadados.Os Steps subsequentes leem
${file.user_meta.key}. Consulte Metadados personalizados para ver um exemplo completo e as regras de herança.resultboolean(padrão:false)Se os resultados deste Step devem estar presentes no Assembly Status JSON
queuebatchDefinir a fila como “batch” rebaixa manualmente a prioridade dos Jobs deste Step, para evitar o consumo de vagas prioritárias de Jobs em Jobs que não precisam de tempo zero de espera na fila
force_acceptboolean(padrão:false)Forçar um Robot a aceitar um tipo de arquivo que ele teria ignorado.
Por padrão, os Robots ignoram arquivos que não conhecem. O 🤖/video/encode, por exemplo, ignora tranquilamente imagens de entrada.
Com o parâmetro
force_acceptdefinido comotrue, você pode forçar os Robots a aceitar todos os arquivos enviados a eles. Isso normalmente leva a erros e só deve ser usado para depuração ou para lidar com casos extremos.ignore_errorsboolean | Array<meta | execute>(padrão:[])Ignorar erros durante fases específicas do processamento.
Definir isso como
["meta"]fará com que o Robot ignore erros durante a extração de metadados.Definir isso como
["execute"]fará com que o Robot ignore erros durante a fase principal de execução.Definir isso como
trueequivale a["meta", "execute"]e fará com que erros sejam ignorados nas duas fases.usestring | Array<string> | Array<object> | objectEspecifica quais Steps usar como entrada.
- Você pode escolher qualquer nome para os Steps, exceto
":original"(reservado para uploads de usuários tratados pela Transloadit) - Você pode fornecer vários Steps como entrada usando arrays:
{ "use": [ ":original", "encoded", "resized" ] } - Você também pode marcar os Steps de entrada com
aspara transmitir intenção semântica aos Robots:{ "use": [ { "name": ":original", "as": "image" }, { "name": ":original", "as": "mask" } ] }
DicaProvavelmente é tudo o que você precisa saber sobre
use, mas você pode ver os casos de uso avançados.- Você pode escolher qualquer nome para os Steps, exceto
text— obrigatóriostringO texto a ser colocado em todas as páginas. Use Assembly Variables como
${fields.watermark}para personalizar cada requisição. Quebras de linha criam várias linhas de texto. Os caracteres precisam estar disponíveis na fonte selecionada; caracteres não compatíveis geram um erro.fontDejaVu Sans | DejaVu Serif | DejaVu Sans Mono(padrão:"DejaVu Sans")A fonte incorporada usada na marca-d’água.
font_sizestring | number(padrão:36)O tamanho máximo da fonte em pontos de PDF. O texto é reduzido para caber dentro das margens da página.
colorstring(padrão:"#808080")A cor da marca-d’água, expressa como um valor RGB hexadecimal de seis dígitos.
opacitystring | number(padrão:0.25)A opacidade da marca-d’água, de 0 (totalmente transparente) a 1 (totalmente opaca).
positionbottom | bottom-left | bottom-right | center | left | right | top |(padrão:"center")A posição dentro da página visível, considerando a rotação e o recorte da página.
x_offsetstring | number(padrão:0)Deslocamento horizontal em relação a
position, em pontos de PDF (72 pontos = 1 polegada). Valores positivos movem a marca-d’água para a direita, exceto nas posições alinhadas à direita, em que a movem para a esquerda. Valores negativos invertem essa direção. Os deslocamentos seguem os eixos da página visível, independentemente da rotação do texto.y_offsetstring | number(padrão:0)Deslocamento vertical em relação a
position, em pontos de PDF (72 pontos = 1 polegada). Valores positivos movem a marca-d’água para baixo, exceto nas posições alinhadas à parte inferior, em que a movem para cima. Valores negativos invertem essa direção. Os deslocamentos seguem os eixos da página visível, independentemente da rotação do texto.rotationstring | number(padrão:45)A rotação do texto em graus no sentido anti-horário, em relação à página visível.
marginstring | number(padrão:24)O recuo em relação às bordas visíveis da página, em pontos de PDF, usado para posicionar e ajustar a marca-d’água antes de aplicar x_offset e y_offset.