Recentemente, eu precisava de uma única página em branco em PDF (8,5 "x 11") e percebi que não sabia como criar uma a partir da linha de comando.
A emissão touch blank.pdf
produz um arquivo PDF vazio . Existe uma ferramenta de linha de comando que produz uma página PDF vazia ?
command-line
pdf
Brian Fitzpatrick
fonte
fonte
Respostas:
convert
, o utilitário ImageMagick usado na resposta do Ketan também permite escrever algo comoou
ou (para papel A4 horizontal)
etc. , sem criar um arquivo de texto vazio. @chbrown notou que isso cria um arquivo pdf menor.
"xc:" significa "X Constant Image", mas pode ser realmente considerado como "x canvas". É uma maneira de especificar um único bloco de uma cor, neste caso nenhum. Mais informações em http://imagemagick.org/Usage/canvas/#solid, que é o manual "de fato" do ImageMagick. [complementado com informações da tubulação] (Coisas como
pdf:a
pode ser usado para declarar explicitamente o formato de um arquivo.label:'some text'
,gradient:
,rose:
elogo:
parecem ser outros exemplos de formatos de arquivos especiais.)Anko sugeriu postar essa modificação como uma resposta separada, por isso estou fazendo isso.
fonte
~/bin
Como o menor GIF possível , o menor possível em branco páginas PDF precisa ser trabalhado à mão, porque é tão pequena que os bits desnecessários-mas-inofensiva de metadados tornam-se uma parte significativa do tamanho do arquivo e compressão realmente torna as coisas maiores . Também requer atenção cuidadosa às regras na especificação do PDF sobre quais bits da estrutura do arquivo são e não são necessários. (Você sabia que os objetos da página devem conter um
/Resources
dicionário, mesmo que esteja vazio, mas não precisam incluir um/Contents
fluxo?)Se você não usar o objeto PDF 1.5 e fluxos de referência cruzada (que tem a vantagem de que o arquivo pode ser completamente imprimível em ASCII), acredito que o melhor que você pode fazer é 317 bytes. Se estiver copiando e colando, observe que precisa haver um espaço à direita em todas as quatro entradas da tabela de referência cruzada (as linhas entre
0 4
etrailer<<...
) e que não deve haver uma nova linha final após o%%EOF
.Substituir a tabela de referência cruzada por um fluxo de referência cruzada v1.5 criado manualmente torna o arquivo um pouco menor, pelo preço de não ser mais ASCII imprimível: 294 bytes. (Para fins de legibilidade, sem mencionar a possibilidade de digitá-lo, o fluxo de refex abaixo foi hexdump, mas isso não é refletido em seu dicionário de stream. Para recuperar um PDF válido, você deve substituir o hexdump pelo bytes binários brutos correspondentes ou altere
/Length 15
para/Length 30/Filter/ASCIIHexDecode
e aceite um arquivo com 328 bytes.)Também experimentei agrupar os objetos 1 a 3 em um fluxo de objetos, mas isso adiciona mais sobrecarga do que economiza, mesmo quando o fluxo é compactado.
Uma possível formulação alternativa do fluxo de refex é
Infelizmente, apesar das economias substanciais no comprimento dos dados reais do fluxo, o adicional
/Index[1 4]
consome quase um byte da economia. Além disso, não está claro para mim se você tem permissão para deixar o objeto 0 completamente fora do arquivo. (Também não está claro para mim se o objeto 0 deve ter o número de geração -1. Se isso não for necessário, você realmente salvará mais bytes com.)
Para alterar o tamanho do papel, substitua
612 792
pela largura e altura apropriadas, expressas em pontos PostScript (72 pontos PostScript = 1 polegada americana ou 25,4 milímetros). Por exemplo,595 842
para A4. Você pode incorporar isso em um script de shell que cospe um PDF em branco de qualquer tamanho de papel desejado; a única parte complicada seria garantir que ostartxref
deslocamento permanecesse preciso, mesmo que o tamanho do objeto 3 fosse alterado.fonte
Se você tiver
convert
(um utilitário ImageMagick) instalado, poderá fazer o seguinte:fonte
convert
também tem uma-size
opção que você pode usar para definir o tamanho do pdf de saída.convert xc:none -page Letter a.pdf
sem criar um arquivo txt vazio.(null)
erro de fonte.convert.im6: improper image header
a.txt '@ error / txt.c / ReadTXTImage / 429. convert.im6: nenhuma imagem definidaa.pdf' @ error/convert.c/ConvertImageCommand/3044.
echo .bp | groff -T pdf > t.pdf
Trazido a você pelo groff, o software mais subestimado do mundo.
fonte
groff: can't find `DESC' file
egroff:fatal error: invalid device `pdf'
com a versão 1.22.2 do Groff no CentOS 7.2.bash 4.1.2
runninggroff 1.18.1.4
.bp
significa apenas "quebra de página", e é por isso que produz um documento de 2 páginas. Para produzir um documento de 1 página, faça o ainda mais simplesecho | groff -T pdf > blank.pdf
.echo .bp
fato deve ser substituída porecho
, exatamente como @FaheemMitha disseVocê pode usar o pdfTeX:
que produz uma página única em branco
texput.pdf
de cerca de 900 bytes, metade do que o ImageMagick usa.Isso coloca você à mercê do tamanho padrão do papel da instalação do TeX. Para definir o tamanho explicitamente, você pode ir para o LaTeX:
Outra opção seria usar o driver PDF do Ghostscript, embora o
ps2pdf
script útil :que é muito mais silencioso que o TeX, mas produz uma saída menos compacta (cerca de 2300 bytes).
fonte
echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf
. Isso é um pouco menor, com 2200 bytes.echo '\documentclass[letterpaper]{article}\usepackage[pass]{geometry} \begin{document}\shipout\hbox{}\end{document}' | pdflatex
criaarticle.pdf
. É possível fazê-lo criarblank.pdf
diretamente?-jobname <basename>
na linha de comando.\shipout\hbox{}
oushowpage
produz uma página. O TeX e o Postscript têm construções em loop que você pode usar, mas provavelmente é mais simples usar a linguagem de script de sua escolha para duplicar o comando um número apropriado de vezes.Uma maneira fácil de criar um PDF com uma página em branco é usando
rst2pdf
:apenas ecoar em um único espaço não servirá, você acabará com um arquivo PDF sem páginas (que não é o mesmo que um arquivo vazio).
fonte
Na linha de comandos, digite:
o comando
ps2pdf
é usado para converter o arquivo PostScript para pdffonte
ps2pdf blank.pdf
retorna um erro, porque espera um arquivo Postscript como argumento. E o segundo comando requer um pré-existentefile.pdf
. Estou esquecendo de algo?touch blank.ps
.; 2ps2pdf blank.ps blank.pdf
.; 3.pdftk A=1.pdf B=blank.pdf cat A1-end B output 2.pdf
Por último, não menos importante, aqui está a maneira Ghostscript de criar um PDF mostrando uma página vazia:
O tamanho da página provavelmente será Letter. Se você deseja A4, use o seguinte:
Background: o
-c
parâmetro pode ser seguido por qualquer string PostScript válida, que o Ghostscript tentará interpretar. E uma página vazia no PostScript é representada por este pequeno bloco de código:fonte