Pergunta

Eu gostaria de perguntar se é possível editar arquivos PDF usando o xpdf Biblioteca e se sim, como? Eu acho que isso é possível, mas não consegui encontrar nenhum tutorial nem documentação para xpdf, então eu realmente não tenho idéia :(. Também estou aberto para usar outra biblioteca se algum outro tiver suporte para pdf edição. Meu único requisito para essa biblioteca é que ela deve ser um C ++ biblioteca ou pelo menos um C um e tem que ser plataforma cruzada (Windows e Linux)

Eu só preciso de edição básica de um arquivo PDF, por exemplo:

"Este é um texto em um documento PDF" seria alterado para "este é um texto em pdf "com uma cor de texto diferente também.

Obrigado por todas as suas respostas!

Foi útil?

Solução

Só para que você entenda o escopo do que está se metendo, "edição básica" do conteúdo em PDF é quase sempre não trivial.

O conteúdo da página no PDF é representado por programas de RPN curtos que pintam na página. É um idioma pequeno semelhante ao PostScript em semântica, mas sem estruturas ou definições de função de loop (portanto, não há problema de parada). Em um mundo são, seu texto na página será representado por algo assim:

BT /F1 12 Tf 72 720 Td (this is a text in a pdf document) Tj ET

que quando traduzido em algo mais familiar, é o seguinte:

BeginText();
SetFont(F1, 12.0);  // Font 1, 12.0 pt
TextMoveTo(72, 720);
ShowText("this is a text in a pdf document");
EndText();

Então, neste caso, você deve transformar isso em algo assim:

BeginText();
SetFont(F1, 12.0);  // Font 1, 12.0 pt
TextMoveTo(72, 720);
ShowText("this is a ");
SetFont(F2, 12);
ShowText("text");
SetFont(F1, 12);
ShowText(" in a pdf document");
EndText();

o que se tornaria:

BT /F1 12 Tf 72 720 Td (this is a ) Tj /F2 12 Tf (text) Tj /F1 12 Tf
( in a pdf document) Tj ET

  1. Você precisa extrair a página e todos os seus recursos (não triviais)
  2. Você precisa gerar uma nova página, inserindo novos recursos (você está adicionando uma nova fonte), incorporando a fonte se for permitida
  3. Altere o fluxo de conteúdo da página para incluir seu conteúdo alterado.

E 3 é onde você vai ficar pendurado, porque há um número infinito de maneiras de gerar uma página com o conteúdo que você descreve e mesmo com uma biblioteca decente, você terá dificuldade em ter talvez 70 % deles. Deixe -me descrever brevemente por que isso é tão ruim quanto parece. Existem programas de geração em PDF (estou olhando para você, Troff) que colocam todo o texto simples em uma página primeiro e depois colocam todo o texto em itálico e depois todo o texto em negrito. Eu juro, não estou inventando isso. Alguns programas querem colocar o texto com muita precisão; portanto, se você tiver sorte, eles usarão o operador TJ que estabelece um texto com kerning específico. Se você não tiver sorte (que é a maior parte do tempo), eles estão, em vez disso, estabelecem o texto com um conjunto de movimentos antes de cada glifo na página. E se o seu texto for colocado em uma curva ou uma orientação incomum (mapas, anúncios)? E os casos em que alguém altera sutilmente o tamanho da fonte para uma maior distinção entre a parte superior e a minúscula ou simula pequenas tampas?

É por isso que, quando escrevi a ferramenta de texto para encontrar o Acrobat 1.0, levei dois meses de suor para lidar com tantos casos de borda. Este não é o texto de edição - está apenas tentando encontrar uma única palavra ou frase.

Não vou recomendar uma biblioteca para você - desculpe - dei uma breve olhada no XPDF e não está claro se ele possui ou não recursos de geração de PDF ou se é simplesmente um consumidor de PDF. O PDFLIB, que é um produto comercial, parece ser gerar PDF, embora não esteja claro se ele pode consumi -lo, mas você certamente pode obter os dois lados colando -os juntos.

Se fosse eu, eu usaria ferramentas que desenvolvi e ainda ficaria um pouco tímido dessa tarefa. Minha biblioteca está sendo usada por ATALASOFT, a empresa em que trabalho, para gerar PDFs a partir de pano inteiro e fazer edição em um domínio muito limitado (anotações, metadados de documentos). A parte mais difícil é que fazemos o possível para ocultar a complexidade do PDF de nossos clientes. Em geral, nossos clientes querem nós Para entender as especificações em vez de eles e facilitar o resto - mas tarefas como essa (a redação é outra), são realmente difíceis de fazer sem entender a profundidade da especificação do PDF. Se você começar a entrar no mundo da biblioteca da manipulação do PDF, comece a ler as especificações, especialmente o capítulo 8 (gráficos) e o capítulo 9 (texto), e você entenderá melhor o que terá que fazer com a biblioteca.

Outras dicas

XPDF é uma biblioteca PDF somente leitura. Não pode escrever pdf muito menos modificar o conteúdo.

Você já olhou para o iText/isharp para editar arquivos PDF?

Embora não seja uma biblioteca no sentido tradicional, Pdfedit Possui recursos de edição scriptáveis. Mas requer Qt. Podofo Provavelmente se encaixa melhor em seus requisitos. Há também Pdfhummus.

Mas tenha cuidado que, se você espera editar o texto do PDF gerado por ferramentas fora do seu controle, provavelmente enfrentará alguns problemas. O problema é - e @plinth o mencionou - existem muitas maneiras de gerar texto que seriam semelhantes, mas que contextualmente são muito diferentes um do outro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top