Questions sur le Texte et la Police

  1. FAQ
  2. »
  3. Présentation des produits
  4. »
  5. Questions sur le Texte et la Police

Lorsque je lis le texte d'un fichier .dwg (version CAD 2000), j'obtiens des caractères comme "\M + 5BFAA\M + 5B9D8", mais ce devrait être le caractère chinois "开关". Cette erreur apparaît lorsque j'utilise la plate-forme Java sous Linux; sous Windows cela

Le Fichier DWG version CAD 2000 contient une chaîne de texte en codage multi-octets. Les versions .dwg supérieures stockent le texte en unicode. Donc, pour convertir les multi-octets en unicode, vous devez initialiser la carte d’une manière suivante une fois en démarrant votre application - OdCharMapper.initialiser ("adinit.dat "). "adinit.dat" doit être avec un lieu de chemin complet.

Veuillez trouver plus d'informations sur le support des polices (connexion ODA requise).

Il existe une option d’indicateur avec l’OdPdfExportEx qui autorise l’utilisation des polices TTF intégrées. Cela permet-il à l'exportation PDF de collecter les polices du fichier DWG?

Lorsque les textes sont exportés en .pdf, les polices TTF peuvent être exportées de deux manières.

Il suffit de faire référence à la police, donc pdf viewer devrait trouver cette police dans le système quand vous ouvrez le fichier pdf.

Le fichier de police TTF entier est exporté au format .pdf. Cela entraîne une augmentation de la taille du fichier, mais pdf viewer ouvre la police à partir du pdf et rend le texte tel qu'il devrait être rendu - il n'y aura donc aucun problème de portabilité.

L'exportation PDF ne collecte pas du tout des polices de dessin, elle les collecte à partir du système. Cet indicateur permet d’exporter les fichiers pdf et intégrer les fichiers de polices complets dans un fichier pdf.

Veuillez trouver plus d'informations dans la documentation sur les paramètres d'exportation pdf.

Que se passe-t-il si le fichier DWG ne contient pas des données de police?

Si le fichier DWG ne contient pas les données de police, il ne contient pas de textes, donc rien ne se passe, il n'y a rien à exporter (concernant les polices).

Comment puis-je exporter des dessins dans l'espace modèle vers un pdf de plusieurs pages par zone Windows sans mise en page car les dessins ont des cadres différents?

Il n'y a pas de moyen direct d'exporter des multiples zones Windows en différentes pages. Mais il y a deux autres méthodes:

Vous pouvez créer plusieurs mises en page dans le dessin, mettre les fenêtres avec les zones nécessaires sur ces mises en page, de sorte que vous pourrez exporter chaque mise en page vers une page différente du pdf.

Vous pouvez essayer le PdfPublish pour le faire. Avec Publish, vous pouvez exporter le dessin en pdf, puis mettre les références sur le dessin dans plusieurs pages de votre pdf ou même à plusieurs endroits d'une page, puis appliquer l'écrêtage dessus (https://www.opendesign.com/blog/2018/december/publishing-2d-cad-objects).

Que se passe-il si le type de police utilisé dans un fichier d'entrée n'est pas trouvé lors de la conversion?

Le SDK Dessins ODA prend en charge les polices TTF et SHX, mais ODA ne redistribue pas les fichiers de polices. Si la police requise n'est pas trouvée par défaut, une police intégrée similaire à Simplex sera utilisée. Pour plus de détails, veuillez consulter la rubrique Gestion des polices topic.

Comment puis-je obtenir des formes à partir du texte avec des polices SHX?

Regardez /Drawing/Examples/ExCommands/ExTxtExp.cpp. C’est l'explosion du texte .shx en lignes et ellipses et du TTF en triangles et en contours réalisée.

Comment puis-je placer un objet texte au centre d'une polyligne fermée? Lorsque je définis les coordonnées du centre comme position du texte, le texte est placé à partir de ce point vers la droite.

Utilisez pText->setAlignmentPoint(OdGePoint3d(outlineCenter.x(), outlineCenter.y(), outlineCenter.z())) et définissez l'alignement du texte d’une manière suivante:

pText->setHorizontalMode(OdDb::TextHorzMode::kTextCenter );
pText->setVerticalMode(OdDb::TextVertMode::kTextVertMid) ;

La méthode adjustAlignment() est appelée lorsque l'entité de texte est fermée mais peut être appelée directement étant ajoutée au bloc:

m_blockTableRecordPtr->appendOdDbEntity(pText); 
pText->adjustAlignment(NULL);

Pourquoi AutoCAD® d’Autodesk® n'affiche-t-il pas les polices .otf d'un fichier .dwg créé par les ODA SDK?

AutoCAD ne prend pas en charge des polices .otf et fonctionne avec les polices .ttf uniquement. ODA fonctionne correctement avec les deux polices: .otf et .ttf.

Pourquoi le texte de sortie de ODAMfcApp n'est-il pas le même que le texte de sortie de l'OdSvgExportEx?

La différence est causée par différents algorithmes de localisation des polices .shx. Vous pouvez définir un point d'arrêt dans ODAMfcApp::findFile() et voir ce qui se passe. L'exemple OdSvgExportEx n'essaie pas de trouver des polices dans les dossiers AutoCAD® d’Autodesk®

Comment puis-je extraire toutes les données du texte contenues dans les objets d'un dessin?

Pour apprendre à extraire des données de texte, reportez-vous à la rubrique Extraction de données de texte et à l'application exemple: Drawing/Examples/OdExtractTextEx.

Comment puis-je supprimer un style de texte?

Un style de texte peut être supprimé à l’aide de:

styleId.safeOpenObject(OdDb::kForWrite)->erase(true);

Remarque: Les styles de texte "Standard" et actuels ne peuvent pas être supprimés.

Comment puis-je définir le texte d'une seule ligne à l'envers?

Regardez les méthodes de classe OdDbText suivantes: setRotation(), mirrorInX(), mirrorInY().

Les codes du format de texte MText peuvent-ils être supprimés des objets MText?

Oui, c’est possible. Utilisez la méthode OdDbMText::explodeFragments() et ces membres suivants dans la structure OdDbMTextFragment:

int changeStyle; 	// 0 == No change; 1 == Change to original; 2 == Change to other
bool lineBreak; 	// Text is followed by a line break.
bool newParagraph; 	// Text fragment starts a new paragraph.

Comment faire exploser une entité de texte en polylignes?

Vous pouvez trouver l'implémentation des commandes TextContourExplode qui explosent toutes les deux entités de texte .shx et .ttf en polylignes dans le fichier Dessin/Examples/ExCustObjs/DrxDebugCmds.cpp/ Drawing/Examples/ExCustObjs/DrxDebugCmds.cpp.

Pourquoi le texte japonais semble-t-il brouillé lors de l’ouverture dans TrueView si la page de code est définie sur CP ANSI_932?

Vous devez définir le texte Unicode correct sur votre entité de texte. Exemple:

char* txt = ""; // Some multi-byte Japanese text in CP_ANSI_932
   OdAnsiString mbStr(txt, CP_ANSI_932);
   OdString unicodeStr(mbStr);
   OdDbTextPtr textEnt; // Some database text entity
   textEnt->setTextString(unicodeStr);

Lors de l'enregistrement, le contenu du texte de dessin sera décodé automatiquement par ODA dans un format approprié.

Comment renvoyer des valeurs Unicode pour des symboles spéciaux lorsque l'objet OdDbMText est explosé en MTextFragments?

La structure de l’OdDbMTextFragment contient le membre de texte OdString qui a des caractères Unicode.

Pourquoi le texte multiligne est-il différent après avoir explosé sur les plates-formes Windows® et non Windows?

Vous avez besoin des mêmes polices sur différentes plates-formes pour obtenir le même résultat. Certaines polices ne peuvent pas être disponibles sur les plates-formes non Windows et Windows. Dans ce cas, la police indisponible est remplacée par la police disponible et vous pouvez obtenir une entité de texte distincte pour chaque phrase, mot ou même symbole. Si la police utilisée dans le texte multiligne est disponible sur votre ordinateur, elle sera appliquée à tous les symboles et vous obtenez une entité de texte. Veuillez consulter la rubrique Gestion des polices dans le Guide du développeur.

Comment obtenir le nom de police et la taille d'un objet OdDbText?

Utilisez la méthode OdDbTextStyleTableRecord::font() pour obtenir les caractéristiques telles que typeface, bold, italic, charset, pitch_and_family de la police Windows associée au style de texte.

Si la méthode font() renvoie une police de caractères vide, utilisez la méthode OdDbTextStyleTableRecord::fileName(). Cette méthode renvoie le nom du fichier uni-font associé à ce style de texte. La taille du texte est une propriété de l'entité OdDbText et la méthode height() renvoie sa valeur. Pour plus de détails, veuillez consulter la rubrique Gestion des polices dans le Guide du développeur.

Pourquoi les caractères Kanji sont-ils mal affichés après la lecture d’un fichier .dxf sur macOS?

Au moment de l'exécution et dans les dernières versions .dwg, le texte est stocké en Unicode. Les anciennes versions stockent le texte en tant que MBCS. Pour convertir du texte en Unicode, il est nécessaire de connaître une page de code, qui est stockée dans le fichier .dwg/.dxf. Mais de très anciennes versions (ou les fichiers .dxf générés par certaines applications) peuvent ne pas avoir d'informations de page de code. Dans ce cas, une page de code système par défaut est utilisée. L'implémentation de systemCodePage se trouve dans le fichier Kernel/Extensions/ExServices/ExSystemServices.cpp.

Le chargement d'un tel fichier peut dépendre des paramètres de langue de l'ordinateur. Sur les plates-formes non Windows, l’OdCharMapper doit être initialisé à l’aide du fichier adinit.dat qui contient des tables de conversion de texte pour les pages de code MBCS. Le fichier se trouve dans le dossier /Kernel. Regardez aussi le fichier Drawings/Examples/OdReadEx/OdReadEx.cpp.

Pourquoi une police utilisée dans un fichier .dwg ne s'affiche-t-elle pas correctement?

La police peut ne pas être disponible pour l'application qui affiche le dessin. Voici une liste de moyens possibles pour résoudre ce problème:

OdString fontFile = pHostApp->findFile(L"fontFileName.ttf"); // Or use the full path name
OdTtfDescriptor descr;
pHostApp->ttfFileNameByDescriptor(descr, fontFile);
  1. Placez le fichier de police dans le même dossier que le dessin. Assurez-vous que la police contient des caractères nécessaires.
  2. Si le dessin est placé dans un autre dossier que l'application, utilisez la variable d'environnement ACAD pour définir le dossier avec la police requise ou utilisez la méthode findFile() de l'application pour spécifier où se trouve le fichier de police:

Des informations détaillées sur la gestion des polices peuvent être trouvées ici: https://docs.opendesign.com/td/FontHandling.html

Pourquoi les objets texte d'un fichier .dxf ont-ils un alignement incorrect lorsque le fichier est ouvert par l'application OdaMfcApp?

ODA SDK ne recalcule pas la position du texte pour les entités de texte lors du chargement d'un fichier .dxf car ce recalcul peut corrompre la position pour le déclenchement rond si la police référencée n'est pas disponible. Les applications clientes basées sur les ODAs SDK version 3.5 ou supérieure peuvent remplacer ce comportement par défaut à l’aide de la méthode: OdDbHostAppServices::setDxfTextAdjustAlignment(true);.

Pourquoi les symboles gdt d'un fichier .dwg créé dans une application autre qu'un package d’AutoCAD® d’Autodesk® sont-ils mal affichés?

Tous les symboles gdt ne sont pas présents dans les autres polices. Pour afficher correctement les symboles, vous avez besoin de la police correcte avec le même codage. Il n'est donc pas nécessaire de convertir les codes de caractères. Par exemple, pour afficher les caractères cyrilliques, vous devez utiliser une police cyrillique, mais aucun enregistrement n'est requis.

Pour voir tous les caractères d'une police TTF sur Microsoft® Windows®, vous pouvez utiliser la carte de caractères Windows.

Pour plus de détails, veuillez consulter la rubrique Gestion des policesGestion des polices.

Pourquoi un texte contenant uniquement des caractères chinois a-t-il une hauteur et une largeur incorrectes?

Toutes les polices n'ont pas de symboles chinois. Dans ce cas, ODA SDK remplace une autre police à la place de la police utilisée dans un dessin, mais ce n'est pas la même chose. Notez que vous pouvez obtenir un résultat différent avec AutoCAD® d’Autodesk® et qu'une entité de texte unique peut utiliser des polices différentes.

Quelle police est utilisée par défaut dans ODA SDK?

ODA SDK contient les deux polices SHX intégrées par défaut: une police simple similaire à txt.shx et une police gdt. Veuillez trouver des informations détaillées sur la prise en charge des polices dans la rubrique Gestion des polices du Guide de développeur.

Comment puis-je définir le texte sur "souligner", "surligner" et "barrer"?

Vous pouvez trouver des codes spéciaux pour gérer les propriétés d'entité OdDbText tels que "souligner" et "overline" dans la rubrique Codes spéciaux de texte à une Ligne et Symboles Unicode du Guide de développeur. Pour les codes spéciaux OdDbMText, reportez-vous à la rubrique Codes de format de texte multiligne.

ODA SDK fournit-il un fichier .shx alternatif avec le même jeu de caractères qu’AutoCAD® d’Autodesk® fournit avec le fichier simplex.shx?

ODA SDK ne fournit aucun fichier de police supplémentaire. Il existe une police intégrée similaire à simplex.shx avec des symboles minimaux (latin et chiffres).