Esta pergunta foi feita várias vezes no Stack Overflow:
As respostas apontam para várias bibliotecas de código aberto que fazem o que você quer, com algumas ressalvas:
- A conversão entre especificações complexas é difícil e as ferramentas geralmente têm erros. Pode não ser possível converter sem perdas.
- A conversão pode exigir informações que você não tem disponíveis, como os metadados XMP e as fontes no computador de origem.