tiff2pdf colorido

3

Eu converti alguns arquivos .tif digitalizados para .pdf usando tiff2pdf (libtiff versão 4.0.3) com compactação JPEG. Visualizá-los em evince mostrou um fundo colorido (rosado).

Meu pensamento inicial foi de que meu scanner estava quebrado, mas os arquivos .tif estão OK e também os arquivos .pdf se eu não usar compactação JPEG (mas o arquivo ficar muito grande).

Como posso obter um .pdf com JPEG compactado usando ferramentas de linha de comando que não são coloridas?

    
por Norm 05.04.2015 / 08:52

1 resposta

2

Este é um problema que parece ter sido relatado por volta de 2007 e ressurgido (ou usei uma versão mais antiga do a biblioteca há muito tempo que não tinha esse problema).

O que você pode fazer é pós-processar o arquivo de saída (supondo que seu sed tenha a opção -i ):

 tiff2pdf -j input.tif -o out.pdf
 sed -i 's|/DecodeParms << /ColorTransform 0 >>||' out.pdf

por algum motivo você recebe mensagens de erro e um arquivo PDF corrompido se você deixar de fora a opção -o para tiff2pdf e enviar a saída diretamente para sed (o que você não obtém se tiff2pdf -j input.tif > out.pdf ou)

Se você estiver disposto a consertar as fontes tiff 4.0.4beta, você pode comentar as linhas 5160-5163 em tools/tiff2pdf.c (que escreve ColorTransform stuff):

    /*
    if(t2p->tiff_photometric != PHOTOMETRIC_YCBCR) {
        written += t2pWriteFile(output, (tdata_t) "/DecodeParms ", 13);
        written += t2pWriteFile(output, (tdata_t) "<< /ColorTransform 0 >>\n", 24);
     }
     */

ou altere a função t2pseekproc para:

static uint64
t2p_seekproc(thandle_t handle, uint64 offset, int whence)
{
    T2P *t2p = (T2P*) handle;
    int res;
    if (t2p->outputdisable <= 0 && t2p->outputfile) {
        res = fseek(t2p->outputfile, (long) offset, whence);
        if (res == -1 && offset == 0 && whence == SEEK_END)
            return 0;
        return res;
    }
    return offset;
}

para que ele não falhe mais se você fizer um fseek do final com o deslocamento 0 (o que o IMO só faz sentido se um diferente fseek , com um valor diferente de zero, o precedeu e falhou). / p>

Com essas duas alterações, todos os testes ainda são aprovados (mas obviamente não cobrem toda a funcionalidade). Com a segunda alteração, você pode fazer:

 tiff2pdf -j | input.tif | sed -i 's|/DecodeParms << /ColorTransform 0 >>||' out.pdf

qual é menos provável que o IMO quebre algo em tiff2pdf que não foi testado pelo conjunto de testes na origem.

    
por 05.04.2015 / 09:02