Imprime o arquivo PDF com o caminho do arquivo no rodapé

4

Eu gostaria de imprimir um PDF no Windows, mas quero imprimir o caminho do arquivo PDF no rodapé do documento impresso (como eu sou capaz de fazer no Word).

Estamos usando o Adobe Reader ou o Foxit Reader.

Você conhece alguma maneira de conseguir isso?

    
por bernhardrusch 04.08.2010 / 10:14

3 respostas

4
Primeiro: alguns drivers de impressora permitem que você defina uma "marca d'água" para cada página impressa. Você pode abusar desse recurso para fazer o que quiser. No entanto, de acordo com o meu conhecimento, o Acrobat Reader não inclui esse recurso (embora você possa (ab) usar o suporte JavaScript embutido dentro do Acrobat para obter algo parecido com o que você deseja ...

OK, então. Deixe-me também dar uma chance. Já que estamos aqui no superuser.com (e não no stackoverflow.com), eu farei sem uma linguagem de programação , e use apenas (lote) scripts . p>

Primeiro passo: Use o Ghostscript para criar uma página de rodapé em PDF mostrando a string 'footer' com um caminho

Usaremos um relativamente simples Ghostscript para isso. O comando usa um pequeno snippet de PostScript como entrada de linha de comando ( -c "..." ) e exibe o PDF como 'myfooter.pdf'. Usaremos letra como o tamanho da mídia (substitua por a4 ou o que você precisar). Aqui vai:
(Estou assumindo que estamos no Windows. Se um dos leitores estiver no Linux, use gs em vez de gswin32c.exe .)

gswin32c.exe ^
 -o myfooter.pdf ^
 -sDEVICE=pdfwrite ^
 -sPAPERSIZE=letter ^
 -c "72 12 moveto /Helvetica findfont 9 scalefont setfont (File: d:\c\b\a.pdf) show"

Agora, temos uma página em PDF que contém apenas o rodapé, com o restante da tela sem nenhum conteúdo. Você pode abri-lo em um visualizador e ver que a sequência começa em 72 pontos PostScript (72 pt == 1 polegada) à esquerda do canto inferior esquerdo e 12 pontos na parte superior.

Segunda etapa: use o PDF ToolKit para sobrepor a página de rodapé ao PDF original

Usaremos o PDF O comando pdftk.exe do ToolKit agora. Este utilitário de linha de comando pode fazer muitas coisas para PDFs. O recurso que precisamos aqui: sobrepor páginas de dois documentos PDF diferentes para fornecer um 'carimbo' ou um 'background' ao arquivo original. Aqui vai:
(Se um leitor estiver no Linux, use pdftk em vez de pdftk.exe .)

pdftk.exe ^
  d:\c\b\a.pdf ^
  stamp myfooter.pdf ^
  output d:\c\b\result-with-footer-a.pdf

(BTW, o pdftk também é derivado da libreary do iText, a que a outra resposta se refere).

Terceiro passo: crie um script em lote que torne os dois passos anteriores automaticamente

Isto é deixado para os seus prazeres de exercício ...; -)

Você pode querer girar a corda em 90 graus, para que ela seja lida verticalmente na borda esquerda da página. Para este caso, modifique o comando do Ghostscript assim: gswin32c.exe -sDEVICE=pdfwrite -o myfooter.pdf -dAutoRotatePages=/None -c "12 72 moveto /Helvetica findfont 9 scalefont setfont 90 rotate (File: d:\c\b\a.pdf) show showpage" .

    
por 07.08.2010 / 13:31
2

Aqui está um arquivo de lote do Windows criado a partir de @ Kurt's responder :

@echo off
if [%*]==[] goto :usage
if not exist outdir mkdir outdir

for %%a in (%*) do (
 call :makeFooter %%a
 call :addFooter %%a
 )
goto :eof

:makeFooter
  gswin32c ^
  -o outdir\footer_%1 ^
  -sDEVICE=pdfwrite ^
  -c "5 5 moveto /Helvetica findfont 12 scalefont setfont (%~n1) show"
  goto :eof

:addFooter
  pdftk ^
  %1 ^
  stamp outdir\footer_%1 ^
  output outdir\%1
  del outdir\footer_%1
  goto :eof

:usage
  echo. &echo. -={ Usage: %0 [list of pdf files or pattern] }=-
  echo. &echo. %~n0 foo*.pdf &echo.

2013-fev-04:

  • correção de erros: estava falhando porque o nome do arquivo não estava sendo passado para o marcador & Rotinas addFooter corretamente
  • change: out filename agora mantido como entrada, também remove arquivos de rodapé temporários

Pode ser necessário alterar gswin64c para instalações de 64 bits do ghostscript.

As unidades na linha -c de :makeFooter estão em pontos. Então 5 5 /moveto é 5pts e 5pts acima da parte inferior esquerda da página, e /Helvetica ... 12 é usar uma fonte Helvetica de 12pt.

    
por 16.11.2011 / 23:35
1

Não há como atualizar automaticamente como o campo no Word. Mas o que você pode fazer é processar o arquivo depois que ele é criado e movido para o local diferente do documento de origem. O PDF foi realmente projetado para impressão e a mudança para permitir formulários e outras coisas foi apenas um hack.

Eu estou supondo que você vai querer que isso seja algum tipo de processo automatizado e genérico, então você precisará usar uma biblioteca separada para fazer isso. Um dos mais prolíficos é o iText, que é uma biblioteca de código aberto java que permite a edição de arquivos PDF. Não é muito difícil de usar e vou fornecer um exemplo abaixo do código que você precisará para fazer este exercício funcionar.

Você precisará do JDK e iText do sourceforge. Aqui está o código java

import java.io.*;
import com.itextpdf.text.pdf.*;
import com.itextpdf.text.*;
public class AddFooter {
    public static void main(String[] args) throws Exception {
        String fileName;
        try {
            fileName = args[0];
        } catch (Exception e) {
            System.out.println("You need to pass the filename after command");
            return;
        }
        int         bottomHorizontalOffset = 100;
        int         bottomVerticalOffset = 10;
        String      workingDir = System.getProperty("user.dir");
        String      file = workingDir + "\" + fileName;
        String      stamped = workingDir + "\" + fileName + "_stamped.pdf";
        stamped = stamped.replaceAll("\\", "\\\\");
        file    = file.replaceAll("\\", "\\\\");
        PdfReader   pdfReader   = new PdfReader(file);
        PdfStamper  pdfStamper  = new PdfStamper(pdfReader, new FileOutputStream(stamped));

        for(int i = 1; i <= pdfReader.getNumberOfPages(); i++) {
            PdfContentByte content = pdfStamper.getUnderContent(i);
            BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
            content.beginText();
            content.setFontAndSize(bf, 12);
            content.setTextMatrix(bottomHorizontalOffset, bottomVerticalOffset);
            stamped = stamped.replaceAll("\\\\", "\\");
            content.showText(stamped);
            content.endText();
        }
        pdfStamper.close();
    }
}

Esse código tem alguns problemas e, como não sei todos os detalhes, eles estão aqui:

  1. Um novo pdf é criado com um nome diferente, e esse é o caminho e o nome no rodapé
  2. Você pode ajustar o fundo ... variáveis para posicionar o texto na parte inferior
  3. Você precisa ajustar a fonte e o tamanho para o que corresponderá aos seus documentos
  4. Ele é codificado para windows, então alguns ajustes seriam necessários para * nix
  5. Espera que seja executado a partir do diretório onde está o arquivo, é assim que obtém o caminho.
  6. Ele NÃO será atualizado automaticamente se você mover o arquivo; na verdade, não será possível executá-lo uma segunda vez e eliminar o texto original.
  7. Esse código foi criado rapidamente, mas compila e funciona, portanto, se você precisar de mais, esse seria um bom ponto de partida.

Como o pdf não tem os campos 'autoupdate' você não quer mudar a associação do pdf para apontar para um script para rodar isto, porque então toda vez que você abrir o arquivo ele irá reescrever o rodapé.

Divirta-se.

    
por 06.08.2010 / 21:11

Tags