Questions de PDF et RPC

  1. FAQ
  2. »
  3. Présentation des produits
  4. »
  5. Questions de PDF et RPC

ODA PDF peut-il être utilisé pour l'exportation à partir d'une entrée/base de données personnalisée ou la source doit être préparée dans l'un des formats pris en charge?

Le PdfExport est un produit indépendant de la base de données, il peut donc être utilisé pour n'importe quel format. Mais votre implémentation doit fournir certaines extensions de protocole nécessaires pour certaines entités et doit prendre en charge le processus de vectorisation ODA.

Est-il possible d'ajouter des tables avec vos propres données lors de l’exportation au format PDF?

Oui, cela est possible avec l'API de publication/Publish API. Il existe un exemple dans OdPdfPublishEx (exemple OdPdfPublishCADEx).

Comment puis-je créer un nuage de points/point cloud en RPC?

Il existe une classe "OdPrcPointSet". Un exemple de code peut être trouvé ici: Prc\Examples\OdPrcCreate\RepresentationItemExample.cpp voir OdPrcRepresentationItemPtr CreatePointSet (OdPrcFileStructure et newStructure).

Vous pouvez également démarrer ODAPrcApp.exe; et en quelques étapes:

  • Fichier / Nouveau
  • Applications d'outils / de chargement
  • Chargez l’OdPrcExCommands.tx
  • Modifier / Commandes enregistrées / Prc créer un exemple / ReprésentationItemPointSet
  • Le vectoriser

Y a-t-il un maximum de l'OdPrcPointSetPtr qui peut être créé en RPC pour l'exporter au format PDF 3D?

Le nombre de points dans chaque objet l’OdPrcPointSet est limité à UINT_MAX. Le nombre d'objets de l’OdPrcPointSet n'est limité que par la taille de l'espace d'adressage.

L'ouverture de fichiers avec un grand nombre d'objets peut être très lente. Cela dépend de votre équipement.

Je vérifiais le projet TD_PdfImport sous Drawing\Imports\PdfImport\. Je ne trouve aucun exemple comment puis-je obtenir un chemin de fichier .pdf et le convertir en dwg.

Des exemples d'utilisation de PdfImport peuvent être trouvés dans ODA Drawings Debug (OdaMfcApp) et notre documentation.

Lors de l'exportation d'un dessin de .dwg en .pdf ayant des polylignes hachurées blanches, la couleur de hachure sera inversée en couleur noire. Existe-t-il un moyen de générer un fichier .pdf sans cette inversion de couleur?

Oui, vous pouvez définir la couleur d'arrière-plan, par exemple:

Code:


PDFExportParams params;
params.setBackground(ODRGB(127, 127, 127));

Le résultat sera un fond gris.pdf.

J'essaie de télécharger le module PdfModuleVI (VI-PDF...), mais je reçois un message indiquant que j'ai des autorisations insuffisantes pour accéder à cette page ou à ce fichier.

La prise en charge de VI PDF a été interrompue.

Il existe un autre module .pdf, disponible gratuitement, qui fait partie des archives du noyau (TD_Pdfium.dll). Vous pouvez lire les versions dans lesquelles il apparaît ici.

Pouvons-nous executer la recherche de texte active pour le fichier .pdf en utilisant le SDK de publication/Publish SDK?

ODA SDK peut fournir des fichiers .pdf avec des textes sous forme de polices PDF et même si vous exportez des textes sous forme de primitives géométriques, il est possible de les rendre consultables tout en utilisant des annotations .pdf.

J'utilise l'OdPdfExportEx.exe pour exporter un fichier .dwg vers un format .pdf. L'extraction de calques est-elle prise en charge pour les fichiers .dwg 3D (en particulier en mode ombré)?

Si vous souhaitez exporter un dessin (sans recourir à l’aide de PRC), l'exportation en mode ombré ne va produire que des images et les calques qui se trouvent dans le fichier .pdf seront désactivées.
Il n'y a aucun moyen de fournir un support de calques si nous exportons le dessin sous forme d'image.

Puis-je modifier un fichier .pdf actuel en utilisant le SDK de publication/Publish SDK?

Le SDK de publication/Publish SDK n'a aucune possibilité de modifier des fichiers .pdf existants. Vous ne pouvez créer de nouveau PDF qu'en l'utilisant.

Je suis en train de convertir le fichier DWG avec l'exemple OdPdfExportEx. Le PDF résultant est différent en termes de coloration, de nuances de couleurs et manque certaines structures dans les Mises en page/Layouts et quant à la page Modèle/Model page, e

Cela se passe parce que vous exportez l'espace du modèle/Model space en mode ZoomToExtents (même si vous ne le faites pas, il y a la zone de tracé "Étendues/Extents" en PlotSettings. Pour changer cela, vous devez définir les paramètres de tracé corrects, comme zone de tracé - "Affichage/Dispaly", sans utiliser l'indicateur ZoomToExtents dans les indicateurs d'exportation .pdf.

Vous pouvez vérifier le dessin dans l'application OdaMfcApp - nous exportons le dessin au fur et à mesure que nous le rendons. Lorsque nous le rendons dans ODAMfcApp, nous ne voyons pas les briques sur les murs, le bois sur le sol et d'autres détails. L'exportation .pdf en cas de style visuel "ombré" (ou "réaliste") passe par le rendu en image, donc le problème ressemble plus à un problème de rendu et l'exportation de .pdf elle-même n'est pas problèmatique.

Existe-t-il un moyen de modifier la taille du "papier" ou de l'adapter automatiquement à la géométrie de la table des blocs enregistrée?

Actuellement, la taille (et surtout la position) ne représente pas la géométrie exportée.

Vous pouvez calculer les étendues des entités sur l'Espace Modèle/Model Space et essayer de définir la taille de papier pour l'Espace papier/Paper Space en fonction de celles-ci. Mais les formats de papier définis peuvent également ne contenir aucun papier pour représenter correctement votre géométrie.

Ou vous pouvez définir les paramètres de tracé suivants:

OdDbPlotSettings *pPlotSettings = pLayout.get();
OdDbPlotSettingsValidatorPtr pValidator = pPlotSettings->database()->appServices()->plotSettingsValidator();
 
pValidator->setStdScaleType(pPlotSettings, OdDbPlotSettings::kScaleToFit);
pValidator->setPlotType(pPlotSettings, OdDbPlotSettings::kExtents);
//and optional
pValidator->setPlotCentered(pPlotSettings, true);

ainsi, votre géométrie sera mise à l'échelle pour s'adapter au format de papier choisi.

Pour changer la taille de papier, vous pouvez utiliser:

pPlotValidator->setCanonicalMediaName(pPlotSettings, OD_T("ISO_A1_(841.00_x_594.00_MM)"));

"ISO_A1_(841.00_x_594.00_MM)" - c'est l'une de nombreuses tailles possibles.

Is it possible to set the annotation scale to an OdPrcMarkupTessBufText object?

Dans prc, vous ne pouvez gérer le positionnement de l’OdPrcMarkupTessBufText que par:

Mode d'affichage de visage/Face View Mode, l’OdPrcMarkupTessBufFaceView:
Dans ce mode, toutes les entités de dessin sont parallèles à l'écran (panneau d'affichage). Le point donné dans les doubles correspond à l'origine du nouveau système de coordonnées dans lequel les entrées sont tracées parallèlement à l'écran.

Mode de dessin de cadre/Frame Draw Mode, l’OdPrcMarkupTessBufFrame:
Dans ce mode, toutes les entités de dessin sont données dans un espace à deux dimensions. Le point donné dans les doubles correspond à un point 3D projeté sur l'écran, tout en fournissant l'origine du système de coordonnées à deux dimensions où vous pouvez dessiner (viewport).

Mode Taille fixe/Fixed Size Mode, l’OdPrcMarkupTessBufFixedSize:
Dans ce mode, toutes les entités de dessin sont dessinées à une taille fixe, indépendante du zoom. Le point donné dans les doubles correspond à l'origine du nouveau système de coordonnées où vous pouvez dessiner à taille fixe. (Adobe a des problèmes avec la prise en charge de ce mode).

Mode matriciel/Matrix Mode, l’OdPrcMarkupTessBufMatrix:
Dans ce mode, toutes les entités de dessin sont transformées par la matrice donnée en double post multipliée par la matrice de transformation courante. À la fin du mode, la matrice de transformation précédemment active est restaurée.

 

Pour appliquer l'un de ces modes à l'objet OdPrcMarkupTessBufText, placez-le dans BufBlock par la fonction setNextInBlock(), par exemple: Code:

 

OdPrcMarkupTessPtr CreatePlainTextMarkup (OdPrcFileStructure &pCurFS)
{
//...
  pCurMkpTess = pCurMkpTess->setNext(OdPrcMarkupTessBufMatrix::createObject());
  OdGePoint3d origP(3, 3, 0);
  ((OdPrcMarkupTessBufMatrixPtr &) pCurMkpTess)->setMatrix(OdGeMatrix3d::translation(origP.asVector()));
  OdPrcMarkupTessBufTextPtr pBufText = OdPrcMarkupTessBufText::createObject();
  ODA_VERIFY(pBufText->setText(L"Markup with Text type", 20, 4) == eOk);
  ((OdPrcMarkupTessBufMatrixPtr &) pCurMkpTess)->setNextInBlock(pBufText);
//...
}

Est-il possible de modifier par programme la transparence/translucidité (opacité) d'un BREP et/ou d'un MAILLAGE/MESH tout en publiant un PDF 3D à partir de PRC?

Oui, vous pouvez utiliser la fonction. Code:

OdPrcCategory1LineStyle::setTransparency (OdInt8 transparency);

pour le style de ligne/LineStyle de l'objet correspondant.

Comment puis-je définir la couleur des points individuels dans un objet l’OdPrcPointSet?

Ce n'est pas possible. Dans PRC, vous devez créer des Objets de jeu de points/PointSet objects séparés à cette fin. Mais vous pouvez les joindre en une seule Partie-Définition/ PartDefinition:


 ...
    OdPrcPartDefinitionPtr newDefinition = OdPrcPartDefinition::createObject();
    pPrc_FileStructure->addObject(newDefinition);
    ...
   for (int k = 0; k < num_point; ++k)
  {
     OdPrcPointSetPtr pPointSet  = OdPrcPointSet::createObject();
     pPointSet->styleId() = OdPrcCategory1LineStyle::createByColor(getR(k), getG(k), getB(k), *pPrc_FileStructure);
     OdPrcName name;
     name.setName(<point name>);
     pPointSet->name() = name;
     pPointSet->setBehaviourBitField(PRC_GRAPHICS_Show);
     pPrc_FileStructure->addObject(pPointSet);

     pPointSet->point().push_back(OdGePoint3d(X(k), Y(k), Z(k)));
    
     newDefinition->representationItem().push_back(pPointSet->objectId());
  }

  newDefinition->setBehaviourBitField(PRC_GRAPHICS_Show); 
  pPrc_FileStructure->fileStructureTree().partDefinition().push_back(newDefinition->objectId());
  ...

Comment puis-je extraire des données d'image raster tout en utilisant le nouvel importateur PDF (PDFium)?

L’OdDbRasterImageDef::sourceFileName() renvoie le chemin d'accès au fichier raster.

Est-il possible d'exporter un dessin .dwg au format .pdf dans son état zoomé actuel autre que la vue étendue?

C'est un comportement par défaut. Regardez viewExtents()/setViewExtents() dans PdfExportParams.h

Quand j'essaie d'exporter un dessin .dwg vers un fichier .pdf et le fichier .dwg a un nom de couche sans parenthèse fermée et avec "activer le support de couche” ACTIVÉ, le fichier .pdf devient vide.

Le fichier pdf n'est en fait pas vide, mais le logiciel Adobe® ne peut pas l'ouvrir. Si vous supprimez '(' du nom de couche dans le fichier .pdf, le logiciel Adobe pourra le charger.

Le PdfModule permet-il de convertir un fichier .pdf dans un fichier .dwg?

Non, mais vous pouvez utiliser le module Pdfium gratuit. Vous pouvez trouver plus d'informations ici.

 

Est-il possible de définir une section transversale dans un fichier .prc?

Vous pouvez utiliser la classe OdPrcFromCurvesSurface, qui implémente le type PRC_TYPE_SURF_FromCurves du format .prc, et après procéder comme suit:

eval_point = first_curve.evaluate(param.u) + second_curve.evaluate(param.v) – origin;

Une autre façon consiste à utiliser une surface NURB (si vous avez du code pour convertir une surface de section transversale en surface NURB).

Veuillez consulter l'application exemple OdPrcCreate (Prc/Examples/OdPrcCreate):

  • Pour obtenir un exemple de code et créer un objet de la classe OdPrcFromFromCuresSurface (le cas d'exemple est "BrepModelFromCurves").
  • Pour obtenir un exemple de code et créer un objet de la classe OdPrcNurbsSurface (le cas d'exemple est "BrepModelNURBS").

Est-il possible de créer un fichier .pdf de pages multiples avec la méthode prcToPdf()?

Non, la méthode prcToPdf() ne prend pas en charge la multi-pagination. Pour travailler avec les fichiers .pdf, vous devez utiliser une boîte à outils/toolkit prenant en charge cette fonctionnalité. La méthode prcToPdf() ne peut pas être utilisée en tant que créateur du fichier .pdf; son but est d'insérer le contenu .prc en fichier .pdf et de le rendre. En fait, Teigha ne contient pas de fonctionnalités similaires à l’éditeur des fichiers .pdf.

Comment puis-je définir la couleur d'arrière-plan par défaut tout en exportant dans un fichier .pdf à l’aide du support .prc?

Actuellement, la possibilité de définir une couleur d'arrière-plan n'est pas fournie; vous ne pouvez le faire qu'au niveau de fichier .pdf. Par exemple, si vous avez les données suivantes dans un fichier .pdf:

<<
/Type /Annot
/Subtype /3D
/Rect [0 123 594 718]
/P 2 0 R
/F 68
/Contents 9 0 R
/3DA <<
/Transparent true
/A /PO
/D /XD
>>
/3DV <<
/Type /3DView
/XN (Default View)
/MS /M
/CO 3.334073
/C2W [1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 -1.000000 7.712374 5.931818 3.334073 ]
/P <<
/Subtype /O
/OB /Max
/OS 0.519500
>>
>>

pour changer la couleur d'arrière-plan par défaut:

  1. Remplacez la clé /Transparent true par /Transparent false.
  2. Définissez la nouvelle valeur de la couleur d'arrière-plan entre les touches/clés /CO et /C2W:

/BG <<
	  /C [
	    0.0
	    0.0
	    1.0
	  ]
	  /Subtype /SC
>>

Comment puis-je récupérer le nom du fichier pdf à partir d'un objet l’OdDbPdfReference?

Utilisez le fragment de code suivant comme exemple:

OdDbObjectId idDefinition = pPdfRef->definitionId();
OdDbPdfDefinitionPtr pDef = idDefinition.openObject();
OdString strActiveFileName = pDef->activeFileName();
OdString strSourceFileName = pDef->sourceFileName();

Ce fragment exemple suppose que la variable pPdfRef est un pointeur intelligent vers une instance de la classe l’OdDbPdfReference, qui a été correctement créée et ajoutée à la base de données de dessin.

J'ai exporté un fichier .dwg vers un fichier .pdf avec l’indicateur zoom sur les étendues désactivé, mais le dessin n'a pas été affiché. Pourquoi?

Lorsque l'indicateur Zoom sur les étendues est égal à false, les paramètres de page de sortie sont extraits des propriétés de la mise en page et une application personnalisée ne peut pas les modifier.

Veuillez consulter la boîte de dialogue de configuration sur la page de l'application exemple ODAMfcApp. Pour ouvrir la boîte de dialogue Configuration de la page/Page Setup, utilisez les commandes Fichier -> Configuration de la page/File -> Page Setup dans le menu principal.

Le SDK de publication/Publish SDK prend-il en charge le format .pdf/a pour l'exportation?

Oui, la fonctionnalité d'exportation PDF prend en charge la création d'archives de documents .pdf (PDF/A). Pour spécifier une version du format PDF/A, utilisez le mode d'énumération PDF_A_mode de la classe PDFExportParams.

Actuellement, le SDK de publication/Publish SDK prend en charge les versions suivantes de format PDF/A:

  • PDF/A-1b
  • PDF/A-2b

La transparence ne fonctionne pas pour l'exportation vers un fichier .pdf.

La transparence fonctionne correctement, mais elle doit être activée à l'aide des paramètres de tracé/plot settings lorsque vous devez l'exporter dans un fichier .pdf:

OdDbLayoutPtr pLayout = OdDbBlockTableRecordPtr(pDb->getActiveLayoutBTRId().safeOpenObject())->getLayoutId().safeOpenObject(OdDb::kForWrite);
pLayout->setPlotTransparency(true);
exportToPdf(pDb);

Rappelez-vous également que depuis la version 4.2, la classe PDFExportParams ne contient plus l'indicateur kSupportTransparency.

Est-il possible d'exporter quelques fichiers .dwg vers un seul fichier .pdf (ajoutez les dessins un par un dans le même fichier .pdf)?

Actuellement, non. Pour le faire, fusionnez plusieurs bases de données de dessin dans une seule base de données et exportez la base de données fusionnée. Une autre idée est d'exporter chaque base de données de dessin dans un fichier .pdf séparé, et après – collecter les fichiers .pdf sortis dans un seul fichier en utilisant le logiciel gratuit .pdf.

Quels types d'entités de dessin peuvent être exportés vers un fichier .pdf à l’aide du format .prc pris en charge?

Toutes les entités de dessin peuvent être exportées de manière régulière.

Comment puis-je générer un fichier .pdf à partir d'une base de données .prc?

Veuillez utiliser le fragment de code suivant comme exemple:

{
  // open .prc for read and write access
  OdStreamBufPtr pPrcStream = odrxSystemServices()->createFile("\\input.prc", Oda::kFileRead, Oda::kShareDenyNo, Oda::kOpenExisting);

  // load special module
  OdPrcToPdfModulePtr pModule = ::odrxDynamicLinker()->loadModule(OdPrcToPdfModuleName, false);

  // create new .pdf file
  OdStreamBufPtr pPdf = odrxSystemServices()->createFile("\\output.pdf", Oda::kFileWrite, Oda::kShareDenyNo, Oda::kCreateAlways);

  // insert .prc to .pdf with some default paper and 3D View parameters.
  OdResult res = pModule->prcToPdf(pPrcStream, pPdf);
  ODA_ASSERT(res == eOk);
}

Vous pouvez utiliser une version plus compliquée de la méthode prcToPdf():

virtual OdResult prcToPdf(OdStreamBufPtr pPrcStream, OdStreamBufPtr pPdfStream, const OdGsPageParams &pdfParams, const OdGeMatrix3d &C2W, double CO, double OS);

Pour plus d'informations sur les paramètres C2W, CO et OS, reportez-vous à la spécification du format de document portable Adobe®/.

Comment puis-je modifier le contenu ou sélectionner des objets dans un fichier .pdf?

ODA ne fournit pas de fonctionnalité pour modifier un fichier .pdf ou pour y sélectionner des objets. Veuillez utiliser des applications tierces à ces fins.

Comment puis-je créer un fichier .pdf animé dans le SDK de publication/Publish SDK?

L'animation fait partie du format .pdf, mais pas du format .prc. Le SDK de publication/Publish SDK ne fournit pas d'API pour modifier les fichiers .pdf.

Puis-je compresser un fichier .pdf avec la méthode prcToPdf()?

Un fichier .pdf créé par la méthode prcToPdf() contient des données déjà compressées.