Comment ne annotations encodent acrobat ajoutées sous forme de notes autocollantes à pdfs?

StackOverflow https://stackoverflow.com/questions/375321

  •  22-08-2019
  •  | 
  •  

Question

Nous avons lu et écrit Post-it Notes / Annotations / Commentaires à pdfs via un contrôle activeX dans notre application depuis plusieurs années. Nous avons récemment mis à niveau vers Delphi2009 avec Support Unicode. Ce qui suit est à l'origine des problèmes.

Quand on appelle

CAcroPDAnnot.GetContents

Les résultats semblent être assez étrange et nous perdons notre Unicode Chars. Il est pas comme l'enregistrement en tant que chaîne de ansi qui résulterait habituellement en retour ????? au contraire, nous obtenons une chaîne telle que

, És, « ú,É • -Z ×, ð,Ð, ¢, ½,ç

Pour une chaîne de caractères japonais.

Cependant, si je sauve les commentaires dans le PDF à un fichier de données via le menu dans le pdf lui-même, il est écrit dans le fichier comme quelque chose comme

0kL0Oeå0k~¨ª0'0r0D0_0 ‰

Ce dernier peut être l'exportation et réimportés dans un acrobate pdf et recréera les caractères unicode corrects. Cependant, une fois que j'appelle CAcroPDAnnot.GetContents dans mon code, il revient comme autre chose.

  1. est CAcroPDAnnot.GetContents brisé?
  2. Y at-il un schéma de codage je devrais être au courant?
  3. Y at-il une alternative que je pourrais être en mesure de le faire?

Merci

Était-ce utile?

La solution

  

, És, « ú,É • -Z ×, ð,Ð, ¢, ½,ç

C'est la chaîne:

に 行 く 日 に 風邪 を ひ い た ら

dans le codage CP-932 alias Shift-JIS, un codage terrible mais déplorablement encore populaire au Japon.

Vous interprétez actuellement en tant que CP-1252 (Windows Europe occidentale). Si votre composant PDF lecture ne convertit pas automatiquement pour vous, vous aurez besoin de trouver un moyen de détecter ce codant pour le document et le convertir manuellement.

Je ne sais pas ce que Delphi prévoit la lecture encodages, mais avez-vous obtenu les encodages pour Shift-JIS installé dans Windows, à partir du Panneau de configuration -> Options régionales - option> « Installer les fichiers pour les langues d'Asie orientale »? Dans le cas contraire, cela pourrait expliquer pourquoi ce serait un échec pour convertir automatiquement, peut-être.

Autres conseils

Vous n'êtes pas exactement nous donner beaucoup d'informations pour travailler avec.

Je suppose que vous parlez la méthode de classe « Acrobat.CAcroPDAnnot » getContents ici. Quelle version d'Acrobat utilisez-vous? Avez-vous des versions peut-être commuté (ou d'exécuter une mise à jour) autour du temps que vous avez commencé la programmation avec Delphi 2009?

Alors: comment avez-vous instancier l'objet? Si vous utilisez un fichier * de _TLB.pas généré à partir de la DLL, vous êtes certain qu'il correspond encore? (Essayez re-générer, si incertain).

Troisièmement: comment appelez-vous la méthode? Quel type de variable vous assignez le résultat?

Ce qui pourrait aussi aider, est de savoir si vous pouvez fournir un échantillon d'une annotation (y compris de préférence les caractères non-ASCII); et pour cette annotation:

  • ce qu'il devrait ressembler (et ce qu'il ne ressemble à l'intérieur Reader)
  • ce qu'il retourne lorsque vous utilisez une version pré-2009 de Delphi *
  • ce qu'il retourne lors de l'utilisation Delphi 2009 *

(* de préférence, les codes d'octet hexadécimal des chaînes de caractères (ANSI / largeur); mais la sortie de l'inspecteur Ctrl-F7 devraient faire)

Alors peut-être que quelqu'un pourrait fournir une réponse plus significative.

Ok, l'une des principales différences entre Delphi 2009 et les versions antérieures est que le type de chaîne par défaut est une chaîne de caractères Unicode. Cela signifie que si vous utilisez le même composant ActiveX comme dans les versions précédentes, vous passez des chaînes unicode à des chaînes ascii et qui est généralement pas une bonne idée.

Il y a deux solutions pour ce problème:

  • Essayez si vous pouvez mettre à jour votre composant activeX afin qu'il supporte les chaînes unicode complet.
  • Utilisez AnsiString et non chaîne pour communiquer avec le composant activeX. Dans ce cas, vous pouvez toujours utiliser l'ancienne interface, mais vous êtes toujours lié aux mêmes limitations.
  • Utilisez un autre contrôle qui crée pdf. Il y a beaucoup de choses à trouver, mais être prêt à changer une grande partie de votre logiciel. (Certains contrôles sont basés XML et l'encodage d'utilisation.)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top