À l'aide de PDFBox à écrire codé en UTF-8 chaînes de caractères au format PDF
Je vais avoir de la difficulté à écrire des caractères unicode à un fichier PDF à l'aide PDFBox. Voici un exemple de code qui génère des déchets caractères au lieu de délivrer de la "š". Que puis-je ajouter pour obtenir un soutien pour des chaînes UTF-8?
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
PDPageContentStream contentStream = new PDPageContentStream(document, page);
PDType1Font font = PDType1Font.HELVETICA;
contentStream.setFont(font, 12);
contentStream.beginText();
contentStream.moveTextPositionByAmount(100, 400);
contentStream.drawString("š");
contentStream.endText();
contentStream.close();
document.save("test.pdf");
document.close();
OriginalL'auteur Lucas Moellers | 2011-03-24
Vous devez vous connecter pour publier un commentaire.
Vous utilisez l'un de l'intégré de Base de 14 polices qui sont fournis avec le logiciel Adobe Reader. Ces polices ne sont pas en Unicode; ils constituent de fait un standard de l'alphabet Latin, mais avec un couple de caractères supplémentaires. Il ressemble au personnage que vous mentionnez, une minuscule s avec un caron (š), n'est pas disponible en format PDF texte Latin... si une majuscule Š est disponibles mais curieusement uniquement sur Windows. Voir l'Annexe D de la spécification PDF à http://www.adobe.com/devnet/pdf/pdf_reference.html pour plus de détails.
De toute façon, faire le point... vous avez besoin d'incorporer une police Unicode si vous souhaitez utiliser des caractères Unicode. Assurez-vous que vous êtes autorisé à intégrer n'importe quelle police que vous décidez sur... je peux recommander l'open-source Gentium ou Le Doulos polices car ils sont gratuits, de haute qualité et un vaste support de l'Unicode.
Je suis sûr que j'ai eu ce problème aussi, une fois... je ne me souviens pas exactement, mais je pense que ça pourrait être un problème avec l'incompatibilité des codages. En d'autres termes, PDFBox pourrait penser que la police est une police latine au lieu d'une police Unicode. Essayez de définir l'encodage avec
font.setEncoding(...)
et voir stackoverflow.com/questions/1713751/... pour plus d'infos sursetEncoding()
Je suis passé à la bibliothèque iText. Il a été beaucoup plus facile à travailler pour l'affichage des caractères unicode.
iText n'est pas libre
OriginalL'auteur gutch