ADN Open CIS
Сообщество программистов Autodesk в СНГ

27/01/2016

Как создать pdf-подложку средствами AutoCAD .NET?

PDF подложки представлены классами PdfDefinition и PdfReference classes в AutoCAD .NET API. Вставка подложка (в данном случае PDF) должна ссылаться на совместимое определение подложки. Вставка подложка определяет положение контента в чертеже, определение подложки определяет контент подложки.

Примечание: Путь к PDF-файлу в коде указан явно и нуждается в редактировани, чтобы соответствовать пути к файлу в вашей системе.

Код - C#: [Выделить]
  1. [CommandMethod("pdfInsert")]
  2. static public void DoPdfInsert()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.  
  7.     using (Transaction t =
  8.         doc.TransactionManager.StartTransaction())
  9.     {
  10.         DBDictionary nod =
  11.             (DBDictionary)t.GetObject(db.NamedObjectsDictionaryId,
  12.                                                 OpenMode.ForWrite);
  13.         string defDictKey =
  14.           UnderlayDefinition.GetDictionaryKey(typeof(PdfDefinition));
  15.  
  16.         if (!nod.Contains(defDictKey))
  17.         {
  18.             using (DBDictionary dict = new DBDictionary())
  19.             {
  20.                 nod.SetAt(defDictKey, dict);
  21.                 t.AddNewlyCreatedDBObject(dict, true);
  22.             }
  23.         }
  24.         ObjectId idPdfDef;
  25.         DBDictionary pdfDict =
  26.             (DBDictionary)t.GetObject(nod.GetAt(defDictKey),
  27.                                         OpenMode.ForWrite);
  28.  
  29.         using (PdfDefinition pdfDef = new PdfDefinition())
  30.         {
  31.             pdfDef.SourceFileName = @"C:\temp\test.pdf";
  32.             idPdfDef = pdfDict.SetAt("TEST", pdfDef);
  33.             t.AddNewlyCreatedDBObject(pdfDef, true);
  34.         }
  35.         BlockTable bt =
  36.             (BlockTable)t.GetObject(db.BlockTableId,
  37.                                     OpenMode.ForRead);
  38.         BlockTableRecord btr =
  39.             (BlockTableRecord)t.GetObjec(
  40.                             bt[BlockTableRecord.ModelSpace],
  41.                            OpenMode.ForWrite);
  42.  
  43.         using (PdfReference pdf = new PdfReference())
  44.         {
  45.             pdf.DefinitionId = idPdfDef;
  46.  
  47.             btr.AppendEntity(pdf);
  48.             t.AddNewlyCreatedDBObject(pdf, true);
  49.         }
  50.         t.Commit();
  51.     }
  52. }

 

 

Источник: http://adndevblog.typepad.com/autocad/2012/04/how-to-create-a-pdf-reference-in-autocadnet.html

Автор перевода: Александр Ривилис

Обсуждение: http://adn-cis.org/forum/index.php?topic=3368

Опубликовано 27.01.2016
Отредактировано 28.01.2016 в 13:16:02