O programa converte todos os arquivos .pdf da pasta com excessão aqueles com espacos no nome, por exemplo "exemplo 1.pdf"
Copie oo código c e salve como 1.c
Complile, cc 1.c -o 1 e execute com ./1
Pronto basta procurar o arquivo PDFTK ...
Ai vai o código:
Eu ia colocar em c mas como nao da pra colocar vai em xml
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define LEITURA 0
#define ESCRITA 1
#define LEITURAESCRITA
2
#define TAMNOME 500
/*===================================================================*/
/*===================================================================*/
void
mostraRespricoes();
int open1(char *file,
int oflag );
void prog();
char *gettextoarq(int
fd, char *buf, int buf_size, char *texto);
char
*gettextoarq1Somenteleitura( char *arq, char *texto);
char
***getLinhasSomenteleitura(char *arq, int *j, char ***texto4);
void mostraLinhas(char
*arq, int j);
char
*getLinhaISomenteleitura(char *arq, int *j, char *linha, int I);
char
*gettextoarq1Somenteleitura1( char *arq);
char
*getLinhaISomenteleitura1(char *arq, int I);
int
getNumeroLinhaString(char *str);
int contachar(char
string[], char letra);
void mostraLinhas1(char
*arq);
int
getNumeroLinhaStringArquivo(char *arq);
char *strpdftk(char
*arq);
void limpaStr(char
*Str);
char
**getvetorLinhasArg(char *arq);
void mostraLinhas2(char
*arq);
char
**getvetorLinhasArg1(char *arq);
char
**getvetorLinhasArg1(char *arq);
void mostraLinhas3(char
*arq);
int
getimaiorStringemArq(char *arq);
int
get_Strlen_da_maior_String_em_Arq(char *arq);
char
***alocar_vetor_string_arq(char *arq);
char
***get_vetor_string_arq(char *arq);
void mostraLinhas4(char
*arq);
char
***alocar_vetor_string_arq(char *arq);
char
substituiEspacoPor_(char *str);
char *subs_str(char
*string, char *substring, char *nova);
/*===================================================================*/
/*===================================================================*/
/*===================================================================*/
char
***get_vetor_string_arq(char *arq)
{
int l, i, j, k, m, n,
o, num_linhas;
char ***vet1, **vet;
vet1=NULL; vet=NULL;
vet1=alocar_vetor_string_arq(arq);
vet=*vet1;/* tenho o
vetor de strings alocadinha basta preenchê-lo*/
num_linhas=getNumeroLinhaStringArquivo(arq);
for(i=0;
i<num_linhas; i++)
{
sprintf(vet[i] ,
"%s", getLinhaISomenteleitura1(arq, i) );
}
return vet1;
}
/*===================================================================*/
/*===================================================================*/
void mostraLinhas4(char
*arq)
{
int l, i, nl;
char **vet, ***vet1;
vet=NULL; vet1=NULL;
vet1=get_vetor_string_arq(arq);
vet=*vet1;
nl=getNumeroLinhaStringArquivo(arq);
for(i=0; i <
nl;i++)
{
printf("\n
vet[%i]: %s", i, vet[i]);
}
printf("\n\n
************************************\n\n");
}
/*===================================================================*/
void mostraLinhas3(char
*arq)
{
int l, i;
char **vet;
vet=NULL;
vet=getvetorLinhasArg1(arq);
if(vet==NULL){printf("\n Deu problema no mostra linha3 ver e
nulo !\n");}
//t8=getLinhaISomenteleitura1(arq,
9);
/*printf("\n
Passemos a i=getNumeroLinhaStringArquivo(arq);\n");*/
i=getNumeroLinhaStringArquivo(arq);
//printf("
********* Mostrando as %i linhas do arquivo %s ****\n\n", i,
arq);
printf("Linhas(vet)[
%i ]{%i}: %s \n", 0, strlen(vet[0]), vet[0]);
printf("Linhas(vet)[
%i ]{%i}: %s \n", 1, strlen(vet[1]), vet[1]);
/*
for(l=0; l < i;
l++)
{
printf("Linhas(vet)[
%i ]{%i}: %s \n", l, strlen(vet[l]), vet[l]);
}*/
printf("\n\n
************************************\n\n");
}
/*===================================================================*/
/*===================================================================*/
void mostraLinhas2(char
*arq)
{
int l, i;
char **vet;
vet=getvetorLinhasArg(arq);
//t8=getLinhaISomenteleitura1(arq,
9);
i=getNumeroLinhaStringArquivo(arq);
//printf("
********* Mostrando as %i linhas do arquivo %s ****\n\n", i,
arq);
for(l=0; l < i;
l++)
{
printf("Linhas(vet)[
%i ]{%i}: %s \n", l, strlen(vet[i]), vet[i]);
}
printf("\n\n
************************************\n\n");
}
/*===================================================================*/
int
get_Strlen_da_maior_String_em_Arq(char *arq)
{
int l, i, k, la, bb,
maior, idomaior;
char **vet,
str[TAMNOME];
k=0;maior=0;
for(i=0;
i<getNumeroLinhaStringArquivo(arq);i++)
{
k =
strlen(getLinhaISomenteleitura1(arq, i));
if(k>=maior){maior=k;idomaior=i;}
}
return maior;
}
/*===================================================================*/
char
***alocar_vetor_string_arq(char *arq)
{
int tam1, tam2, i,
j;
char **vetor;
tam2 =
get_Strlen_da_maior_String_em_Arq(arq);
tam2=tam2*sizeof(char);
tam1=getNumeroLinhaStringArquivo(arq);
if((vetor=(char**)malloc(tam1*sizeof(char*)))==NULL)
{
printf("\n Nao
foi possivel alocar as linhas do de vetor de strings para do arquivo
\n");
return NULL;
}
for(i=0;
i<tam1;i++)
{
if((vetor[i]=(char*)malloc(tam2))==NULL)
{
printf("\n
Nao foi possivel alocar as colunas do vetor de strings para do
arquivo \n");
for(--i;i>=0;i--)
{
free(vetor[i]);
}
free(vetor);
return NULL;
}
}
return &vetor;
}
/*===================================================================*/
int
getimaiorStringemArq(char *arq)
{
int l, i, k, la, bb,
maior, idomaior;
char **vet,
str[TAMNOME];
k=0;maior=0;
for(i=0;
i<getNumeroLinhaStringArquivo(arq);i++)
{
k =
strlen(getLinhaISomenteleitura1(arq, i));
if(k>=maior){maior=k;idomaior=i;}
}
return idomaior;
}
/*===================================================================*/char
**getvetorLinhasArg1(char *arq)
{
int l, i, k, la, bb;
char **vet,
str[TAMNOME];
/* o probela e alocar
o vetor para armazenar*/
i=getNumeroLinhaStringArquivo(arq);
vet=(char**)malloc(i*sizeof(char*));
if(vet==NULL){printf("\n
Nao foi possivel alocar as linhas do vetor de linhas \n");
return NULL;}
for(la=0; la < i;
la++)
{
strcpy(str
,getLinhaISomenteleitura1(arq, la));
k = strlen(str);
/*printf("\n k
= strlen(str);: %i\n st: %s\n", k, str);*/
vet[la]=(char*)malloc(k*sizeof(char));if(vet[la]==NULL){printf("\n
Nao foi possivel alocar as colunas do vetor de linhas \n");
free(vet);return NULL;}
sprintf(vet[la],
"%s", str);
for(bb=0; bb<=la;
bb++)
printf("%s \n
", vet[bb]);
//strcpy(vet[l],
str);
// if((l%2)!=0){
//printf("
%i%%3=%i\nLinhas(vet[%i])[ %i ]: %s \n str : %s \n\n",l, l%3, l,
l, vet[l], str);
//}
}
//printf("
vet[1-4]: %s %S %s %S \n\n", vet[0], vet[1], vet[2], vet[4]);
printf(" Agora vem
a montagem do vetor vet : %s \n\n", vet);
/* for(la=0; la <
i; la++)
{
printf("\n
vet[%i]: %s\n ", la, vet[la]);
}*/
return vet;
}
/*===================================================================*/
void mostraLinhas1(char
*arq)
{
int l, i;
//t8=getLinhaISomenteleitura1(arq,
9);
i=getNumeroLinhaStringArquivo(arq);
printf("
Mostrando as %i linhas do arquivo \n\n", i);
for(l=0; l < i;
l++)
{
printf("Linhas[
%i ]: %s \n", l, getLinhaISomenteleitura1(arq, l));
}
printf("\n\n
************************************\n\n");
}
/*===================================================================*/
char
**getvetorLinhasArg(char *arq)
{
int l, i, k;
char **vet, *str;
l=getNumeroLinhaStringArquivo(arq);
//printf("
Mostrando as %i linhas do arquivo \n\n", l);
vet=(char**)malloc(l*sizeof(char));
if(vet==NULL){printf("\n
Nao foi possivel alocar as linhas do vetor de linhas \n");
return NULL;}
for(i=0; i < l;
i++)
{
strcpy(str
,getLinhaISomenteleitura1(arq, i));
k = strlen(str);
vet[i]=(char*)malloc(k*sizeof(char));
if(vet[i]==NULL){printf("\n
Nao foi possivel alocar as colunas do vetor de linhas \n");
return NULL;}
strcpy(vet[i] ,
str);
printf("vet[ %i
]: %s \n", l, vet[i]);
}
//printf("\n\n
************************************\n\n");
return vet;
}
/*===================================================================*/
/*===================================================================*/
void mostraLinhas(char
*arq, int j)
{
int l;
//t8=getLinhaISomenteleitura1(arq,
9);
printf("\n\n
Mostrando as %i linhas do arquivo \n\n", j);
for(l=0; l < j;
l++)
{
printf("Linhas[
%i ]: %s \n", l, getLinhaISomenteleitura1(arq, l));
}
printf("\n\n
************************************\n\n");
printf(" %s \n O
Arquivo tem %i linhas", gettextoarq1Somenteleitura1(arq),
getNumeroLinhaString(gettextoarq1Somenteleitura1(arq)));/**//**/
printf("\n\n
************************************\n\n");
}
/*===================================================================*/
void mostraRespricoes()
{
printf(" 1 - O
arquivo arqpdf.txt tem que estar no mesmo diretorio \n ");
printf(" 2 - Os
arquivos a serem convertidos devem estar no mesmo diretorio \n");
printf(" 3 - O
arquivo gerado tera o nome de \'PDFTK921_ ...pdf\'\n");
printf(" 4 - Os
nomes dos arquivos a serem unidos nao podem possuir espacoe em
branco, pelo menos por enquanto\n");
}
/*===================================================================*/
/*===================================================================*/
int contachar(char
string[], char letra)
{
int contador,
tamanho, ocorrencia = 0;
tamanho =
strlen(string);
for(contador=1;contador <= tamanho;contador++)
if(string[contador] == letra)
ocorrencia++;
return(ocorrencia);
}
/*===================================================================*/
int
getNumeroLinhaString(char *str)
{
/*onde str é a
string com várias linhas*/
return
contachar(str, '\n');
}
/*===================================================================*/
int
getNumeroLinhaStringArquivo(char *arq)
{
/*onde str é a
string com várias linhas*/
int i;
char *s1;
s1=gettextoarq1Somenteleitura1(arq);
i=getNumeroLinhaString(s1);
i=i-1;
return i;
}
/*===================================================================*/
/* fazer uma função
que retorne somente a string da linha,
* deve-se passar a
linha e um ponteiro onde string estara*/
char
*getLinhaISomenteleitura1(char *arq, int I)
{
int i;
char text[10000],
*t1, *t2, charater[500], *ta1;
t1=gettextoarq1Somenteleitura1(arq);
sprintf(text, "%s",
t1);
/* agora com a
string t1 tendo uma copia em "text"
* da pra ficar
mais aliviado, pois nao perderemos o
* conteudo do
arquivo, os nomes dos documentos*/
//res = strtok(s,
delim);
t2=strtok(text,
"\n");
//sprintf(texto[0],
"%s", t2);
//printf(" \n
O conteudo da variaveis text (antes de retornar a linha) e %s \n Ja o
conteudo de t2 e %s \n \n", text, t2);
if(I==0)
{
return t2;
}
for(i=1;(i<=I)&&
(t2 != NULL); i++)
{ //res =
strtok(NULL, delim);
t2=strtok(NULL,
"\n");
sprintf(charater,
"%s", t2);
//printf("
\n O conteudo do arquivo na linha %i e %s \n Ja o conteudo de t2 e
%s \n Ja o conteudo de charater e %s \n", i, text, t2,
charater);
if(i==I)
{ strcpy(ta1,
charater);
return t2;
}
if(t2==NULL)
{
printf("
\n A linha pedida para a funcao e maior que a quanidade de linhas no
arquivo! \n Entre com um valor de linha menor que o numero de linhas
do arquivo!\n ");
return NULL;
}
}
if(i==I)
{
strcpy(ta1,
charater);
return t2;
}
return NULL;
}
/*===================================================================*/
void limpaStr(char
*Str)
{
int i, j;
i=strlen(Str);
for(j=i-1;j>=0;j--)
{
/*Str[j]=NULL*/;strcpy((*(Str+j)),"
");
}
}
/*===================================================================*/
/* fazer uma função
que retorne somente a string da linha,
* deve-se passar a
linha e um ponteiro onde string estara*/
char
*getLinhaISomenteleitura(char *arq, int *j, char *linha, int I)
{
int i;
char texto[500][500],
text[10000], *t1, *t2, charater[500];
printf("\n
Agora entrarei na funcao t1=gettextoarq1Somenteleitura(arq, t1);\n");
t1=gettextoarq1Somenteleitura1(arq);
sprintf(text, "%s",
t1);
/* agora com a
string t1 tendo uma copia em "text"
* da pra ficar
mais aliviado, pois nao perderemos o
* conteudo do
arquivo, os nomes dos documentos*/
t2=strtok(text,
"\n");
sprintf(texto[0],
"%s", t2);
*j=i;
if(I==0)
{
if(/*
*linha==NULL */strcmp(linha,NULL)==0)
{/* se estiver
passando somente um
* ponteiro sem
nada , NULL*/
linha=texto[0];
}
sprintf(linha,
"%s", texto[0]);
return
linha;
}
//printf("*j=
%i \t", *j);
for(i=1;(i<500)||(t2!=NULL);
i++)
{
t2=strtok('\0',
"\n");
sprintf(charater,
"%s", t2);
strcpy(texto[i],
charater);
*j=i;
// printf("*j=
%i \t", *j);
if(t2==NULL ||
strlen(charater)<3)
{
*j=i;
printf("
\n A linha pedida para a funcao e maior que a quanidade de linhas no
arquivo! \n Retornarei a ultima linha do arquivo\n ");
if(/*
*linha==NULL */strcmp(linha,NULL)==0)
{/* se
estiver passando somente um
* ponteiro
sem nada , NULL*/
linha=texto[i-1];
/*linha =
*//*strcpy(linha, texto[i-1]);*/
return
linha;
}
sprintf(linha,
"%s", texto[i-1]);
return linha;
}
if(i==I)
{
if(/*
*linha==NULL */strcmp(linha,NULL)==0)
{/* se
estiver passando somente um
* ponteiro
sem nada , NULL*/
linha=texto[i];
return
linha;
}
sprintf(linha,
"%s", texto[i]);
return linha;
}
}
return NULL;
}
/*===================================================================*/
char
***getLinhasSomenteleitura(char *arq, int *j, char ***texto4)
{
int i;
char texto[500][500],
text[10000], *t1, *t2, charater[500], **texto5;
t1=gettextoarq1Somenteleitura(arq,
t1);
printf("\n
entrou em char ***getLinhasSomenteleitura(char *arq, int *j, char
***texto4) \n gettextoarq1Somenteleitura(arq, t1); = %s \n ",
t1);
sprintf(text, "%s",
t1);
/* agora com a
string t1 tendo uma copia em "text"
* da pra ficar
mais aliviado, pois nao perderemos o
* conteudo do
arquivo, os nomes dos documentos*/
t2=strtok(text,
"\n");
sprintf(texto[0],
"%s", t2);
*j=i;
//printf("*j=
%i \t", *j);
for(i=1;(i<500)||(t2!=NULL);
i++)
{
t2=strtok('\0',
"\n");
sprintf(charater,
"%s", t2);
strcpy(texto[i],
charater);
*j=i;
// printf("*j=
%i \t", *j);
if(t2==NULL ||
strlen(charater)<3)
{
*j=i;
/*
*texto4=&texto[0][0];
*texto4= =
strdup(texto[0]);*/
// strcpy(texto5,
texto);
*texto4=texto5;
return texto4;
}
}
/*
*texto4=&texto[0][0];
*texto4= =
strdup(texto[0]);*/
// strcpy(texto5,
texto);
*texto4=texto5;
// return
&texto5;
return texto4;
}
/*===================================================================*/
char
*gettextoarq1Somenteleitura1( char *arq)
{
int fd, buf_size;
char buf[500],
buf2[10000], *buf3;
buf_size=499;
fd=open1(arq,
LEITURA);
buf3=gettextoarq(fd,
buf, buf_size,buf2);
close(fd);
return buf3;
}
/*===================================================================*/
/*===================================================================*/
/*===================================================================*/
/*===================================================================*/
/*===================================================================*/
char *strpdftk(char
*arq)
{
int i, j, k, l, m, n,
n1;
char *arq1, *arq2,
*arqout, *out, *ext, *meio;
l=getNumeroLinhaStringArquivo(arq);
n1=strlen("pdftk
");
n1=n1+800;
out=(char*)malloc(n1*sizeof(char));
arq1=(char*)malloc((n1-120)*sizeof(char));
arq2=(char*)malloc((n1-120)*sizeof(char));
ext=(char*)malloc((n1-500)*sizeof(char));
k=0;
i=0;
m=1;
//printf("\n
String0: %s\n", out);
//limpaStr(out);
//printf("\n
String1depois: %s\n", out);
/*printf("\n\n\n\n
getLinhaISomenteleitura1(arq, 2) : %s \n\n\n",
getLinhaISomenteleitura1(arq, 2));*/
/*
printf("\n\n\n\n
arquivos0 e arquivo1 arquivo2 respectivamente %s %s %s \n\n\n",
getLinhaISomenteleitura1(arq, 0), getLinhaISomenteleitura1(arq, 1),
getLinhaISomenteleitura1(arq, 2));*/
arq1=getLinhaISomenteleitura1(arq,
0);
arq2=getLinhaISomenteleitura1(arq,
1);
sprintf(ext, "
pdftk %s %s cat output PDFTK921_%i.pdf ;", arq1, arq2, 0);
//printf("\n %s
\n", ext);
strcat(out, ext);
k++;
sprintf(ext, "
pdftk PDFTK921_%i.pdf %s cat output PDFTK921_%i.pdf ;", k-1,
getLinhaISomenteleitura1(arq, 2), k);
strcat(out, ext);
//printf("\n
%s\n\n ", ext);
k++;
sprintf(ext, "
pdftk PDFTK921_%i.pdf %s cat output PDFTK921_%i.pdf ;", k-1,
getLinhaISomenteleitura1(arq, 3), k);
strcat(out, ext);
//printf("\n
%s\n\n ", ext);
k++;
for(i=4; i<l; i++)
{
sprintf(ext, "
pdftk PDFTK921_%i.pdf %s cat output PDFTK921_%i.pdf ;", k-1,
getLinhaISomenteleitura1(arq, i), k);
strcat(out, ext);
//printf("\n
\n %s\n\n ", ext);
k++;
}
//printf("\n out
= %s\n", out);
--k;
for(--k;k>=0;k--)
{
sprintf(ext, "
rm pdftk PDFTK921_%i.pdf ; ", k);
strcat(out, ext);
// printf("\n
\n %s\n\n ", ext);
}
strcat(out, " ls
-la ");
//printf("\n out
= %s\n", out);
return out;
}
/*===================================================================*/
/*===================================================================*/
/*===================================================================*/
/*===================================================================*/
/*===================================================================*/
/*===================================================================*/
/*===================================================================*/
/*===================================================================*/
char
*gettextoarq1Somenteleitura( char *arq, char *texto)
{
int fd, buf_size;
char buf[500],
buf2[10000], *buf3;
buf_size=499;
fd=open1(arq,
LEITURA);
printf("\n
Agora entrarei na funcao buf3=gettextoarq(fd, buf,
buf_size,buf2);\n");
buf3=gettextoarq(fd,
buf, buf_size,buf2);
printf("\n
Antes de entrar no If do texto \nO conteudo do arquivo %s e :\n %s
\n", arq, buf3);
if(/*
*texto==NULL */strcmp(texto,NULL)==0)
{/* se estiver
passando somente um
* ponteiro
sem nada , NULL*/
texto=buf3;
}
sprintf(texto,
"%s", buf3);
//printf("\n
Agora entrarei na funcao close(fd);\n");
close(fd);
//printf("\n O
conteudo do arquivo %s e :\n %s \n", arq, buf3);
return buf3;
}
/*===================================================================*/
char *gettextoarq(int
fd, char *buf, int buf_size, char *texto)
{
for(;;)
{
if(read(fd, buf,
buf_size)==0)
{
sprintf(texto, "
%s \n", buf);
return texto;
}
sprintf(texto, "
%s \n", buf);
}
}
/*===================================================================*/
int open1(char *file,
int oflag )
{
int fd;
if((fd=open(file,
oflag))==-1)
{
printf("\n Nao
e possivel abrir o arquivo %s \n", file);
return fd;
}
return fd;
}
/*===================================================================*/
char
substituiEspacoPor_(char *str)
{
return subs_str(str,
" ", "_");
}
/*===================================================================*/
char *subs_str(char
*string, char *substring, char *nova)
{
char *extrai;
int
tamanho1,tamanho2,contador, a4;
tamanho1 =
strlen(substring);
tamanho2 =
strlen(nova);
a4=strlen(string);
if((tamanho1 >
tamanho2) || (tamanho2 > tamanho1))
return(" ");
else
{
extrai =
strstr(string,substring);
if(extrai)
{
for(contador = 0;contador < a4; contador++)
string[(extrai - string) + contador] = nova[contador];
return(string);
}
else
return("
");
}
}
/*===================================================================*/
void prog()
{
char cmd[400],
arq[200], texto[600], **t1, ***t6, *t7, *t10, *t8, tr[200];
int i;
strcpy(tr,"O
joao e bacana pra caramba");
t7=NULL,t8=NULL;
sprintf(arq, "%s",
"arqpdf.txt");
//sprintf(stdout
,"%s", "imprimindo na tela, stdout com sprintf");
/*
printf("************************************");
printf("\n\n a
string %s sem espacos e : %s \n\n", tr,
substituiEspacoPor_(tr));*/
printf("************************************");
printf("\n
Programa que concatenara todos os arquivos .pdf em um \n\n\n ");
printf(" Para
esse programa funcionar direito e Necessario que: \n ");
mostraRespricoes();
sprintf(cmd, "for
x in *.pdf; do echo %s ", "\"$x\"; done >
arqpdf.txt");
system(cmd);
printf(" \n
cmd:\n %s \n ", cmd);
t10=strpdftk(arq);
printf(" \n
cmd:\n %s \n ", t10);
system(t10);
printf("
\n\n");
}
/*===================================================================*/
int main()
{
prog();
return ;
}
/*===================================================================*/
/*
*
* ordem das chamadas
de funções que estão me
dando dor de cabeça:
*
* prog();
==>>getLinhaISomenteleitura(arq, &i, t7, 3); ==>>
gettextoarq1Somenteleitura1(arq); ==>> ==>> ==>>
==>> ==>> ==>> ==>> ==>> ==>>
==>>
*
* -> prog();
==>>mostraLinhas(arq, 10); ==>>getLinhaISomenteleitura1(arq,
3); ==>> t1=gettextoarq1Somenteleitura1(arq); ==>> ==>>
==>> ==>> ==>> ==>> ==>> ==>>
==>> ==>>
-> prog();
==>>mostraRespricoes() ==>>[mostraLinhas4(arq);==>>
(vet1=get_vetor_string_arq(arq);==>>)==>>nl=getNumeroLinhaStringArquivo(arq);==>>]==>>
==>> ==>> ==>> ==>> ==>> ==>>
==>> ==>> ==>>
* */
Nenhum comentário:
Postar um comentário