Проблема с публикацией

Автор Тема: Проблема с публикацией  (Прочитано 10045 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн OlegichАвтор темы

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Проблема с публикацией
« : 23-08-2017, 13:10:19 »
Здраствуйте.
Пытаюсь автоматизировать процесс публикации только листов из пространства листа. Нашёл во это алгоритм http://adn-cis.org/sozdanie-mnogolistovogo-pdf-fajla-pri-pomoshhi-dsd.html. В процессе работы несколько раз на каждом листе выдаёт ошибку (скрин прилагается). PDF создаётся, но битый, Adobe сообщает об ошибке (скрин прилагается). Пишу макрос для AutoCad 2017 х64, на С++ в MS Visual Studio 2015 Community. Прошу совета у единомышлеников о том как решить проблему.

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Проблема с публикацией
« Ответ #1 : 23-08-2017, 13:15:25 »
Код использовал один к одному или что-то переделывал? Если переделывал, то давай код и чертеж, с которым экспериментировал.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн OlegichАвтор темы

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Re: Проблема с публикацией
« Ответ #2 : 23-08-2017, 13:18:58 »
Код использовал один к одному. Вызывал так:
AcDbDatabase *pWorkDataBase = acdbHostApplicationServices()->workingDatabase();
plot(pWorkDataBase);

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Проблема с публикацией
« Ответ #3 : 23-08-2017, 13:19:27 »
Еще нужно не забыть установить BACKGROUNDPLOT в 0 перед публикацией, а затем вернуть его назад.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Проблема с публикацией
« Ответ #4 : 23-08-2017, 13:23:06 »
Код использовал один к одному. Вызывал так:
AcDbDatabase *pWorkDataBase = acdbHostApplicationServices()->workingDatabase();
plot(pWorkDataBase);
Каталоги C:\TEMP и C:\TEMP\PDF существуют и есть права на запись в них?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн OlegichАвтор темы

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Re: Проблема с публикацией
« Ответ #5 : 23-08-2017, 13:25:31 »
 В BACKGROUNDPLOT задано 0.

Оффлайн OlegichАвтор темы

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Re: Проблема с публикацией
« Ответ #6 : 23-08-2017, 13:26:04 »
Да, каталоги C:\TEMP и C:\TEMP\PDF существуют и есть права на запись в них.

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Проблема с публикацией
« Ответ #7 : 23-08-2017, 13:30:00 »
Замени
Код - C++ [Выбрать]
  1. acplPublishExecute(dsdData, plotConfig, false);

на
Код - C++ [Выбрать]
  1. acplPublishExecute(dsdData, plotConfig, true);
и посмотри что происходит.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Проблема с публикацией
« Ответ #8 : 23-08-2017, 13:32:24 »
Да. И где тестовый чертеж?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн OlegichАвтор темы

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Re: Проблема с публикацией
« Ответ #9 : 23-08-2017, 13:35:06 »
Результат тот же.

Оффлайн OlegichАвтор темы

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Re: Проблема с публикацией
« Ответ #10 : 23-08-2017, 13:37:57 »
Вот тестовый чертёж.

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Проблема с публикацией
« Ответ #11 : 23-08-2017, 13:45:28 »
Я потестирую и сообщу результат.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн OlegichАвтор темы

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Re: Проблема с публикацией
« Ответ #12 : 23-08-2017, 13:46:31 »
Спасибо вам!

Отмечено как Решение Olegich 24-08-2017, 06:28:15

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Проблема с публикацией
« Ответ #13 : 23-08-2017, 14:11:45 »
Проверил специально в AutoCAD 2017 со всеми обновлениями и в английской и русской локализации вот этот код:
Код - C++ [Выбрать]
  1. //-----------------------------------------------------------------------------
  2. //----- acrxEntryPoint.cpp
  3. //-----------------------------------------------------------------------------
  4. #include "StdAfx.h"
  5. #include "acplmisc.h"
  6. #pragma comment (lib ,"AcPublish_crx.lib")
  7. #include "resource.h"
  8.  
  9.  
  10.  
  11. //-----------------------------------------------------------------------------
  12. #define szRDS _RXST("")
  13.  
  14. //-----------------------------------------------------------------------------
  15. //----- ObjectARX EntryPoint
  16. class CPublishMultiPagePDFApp : public AcRxArxApp {
  17. public:
  18.   CPublishMultiPagePDFApp() : AcRxArxApp() {}
  19.   virtual AcRx::AppRetCode On_kInitAppMsg(void *pkt) {
  20.     AcRx::AppRetCode retCode = AcRxArxApp::On_kInitAppMsg(pkt);
  21.     return (retCode);
  22.   }
  23.   virtual AcRx::AppRetCode On_kUnloadAppMsg(void *pkt) {
  24.     AcRx::AppRetCode retCode = AcRxArxApp::On_kUnloadAppMsg(pkt);
  25.     return (retCode);
  26.   }
  27.   virtual void RegisterServerComponents() {     }
  28.   static void MyGroupMyPublish() {
  29.     plot(acdbCurDwg());
  30.   }
  31.   static void plot(AcDbDatabase *pDb)
  32.   {
  33.     CString pdfPath = "C:\\temp\\pdf\\myPDF.pdf";
  34.     CString deviceName = L"DWG To PDF.pc3";
  35.     Acad::ErrorStatus es = Acad::eOk;
  36.  
  37.     const TCHAR *docName;
  38.     es = pDb->getFilename(docName);
  39.  
  40.     AcDbLayoutManager *layoutManager =
  41.       acdbHostApplicationServices()->layoutManager();
  42.     AcDbDictionary *layoutDict = NULL;
  43.     es = pDb->getLayoutDictionary(layoutDict, AcDb::OpenMode::kForRead);
  44.  
  45.     // Начнём собирать данные в DSD
  46.     AcPlDSDEntries dsdEntries;
  47.     AcDbDictionaryIterator *layoutIterator = layoutDict->newIterator();
  48.  
  49.     // Если мы собираемся печатать только листы пространства листа
  50.     AcDbObjectId msId = acdbSymUtil()->blockModelSpaceId(pDb);
  51.  
  52.     for (; layoutIterator && !layoutIterator->done(); layoutIterator->next())
  53.     {
  54.       AcDbObjectPointer<AcDbLayout> layout(
  55.         layoutIterator->objectId(), AcDb::OpenMode::kForRead);
  56.       // Пропускаем Пространство Модели
  57.       if (layout->getBlockTableRecordId() == msId)
  58.         continue;
  59.  
  60.       const ACHAR *layoutName;
  61.       layout->getLayoutName(layoutName);
  62.  
  63.       AcPlDSDEntry dsdEntry;
  64.       dsdEntry.setLayout(layoutName);
  65.       dsdEntry.setDwgName(docName);
  66.       dsdEntry.setTitle(layoutName);
  67.       dsdEntries.append(dsdEntry);
  68.     }
  69.  
  70.     delete layoutIterator;
  71.     layoutDict->close();
  72.  
  73.     AcPlDSDData dsdData;
  74.     dsdData.setDSDEntries(dsdEntries);
  75.  
  76.     dsdData.setProjectPath(L"c:\\temp\\pdf\\");
  77.     dsdData.setLogFilePath(L"c:\\temp\\pdf\\logdwf.log");
  78.     dsdData.setSheetType(AcPlDSDEntry::SheetType::kMultiPDF);
  79.     dsdData.setNoOfCopies(1);
  80.     dsdData.setDestinationName(pdfPath);
  81.     dsdData.setPromptForDwfName(false);
  82.     dsdData.setSheetSetName(L"PublisherSet");
  83.     dsdData.writeDSD(L"c:\\temp\\pdf\\PublisherSet.dsd");
  84.  
  85.     AcPlPlotConfig *plotConfig = NULL;
  86.     acplPlotConfigManager->setCurrentConfig(plotConfig, deviceName);
  87.  
  88.     // Мы должны это загрузить для работы acplPublishExecute
  89.     acedArxLoad(L"AcPublish.arx");
  90.     resbuf bp_old = { 0,0 }, bp_0 = { 0,0 };
  91.     acedGetVar(L"BACKGROUNDPLOT", &bp_old);
  92.     bp_0 = bp_old; bp_0.resval.rint = 0;
  93.     acedSetVar(L"BACKGROUNDPLOT", &bp_0);
  94.     acplPublishExecute(dsdData, plotConfig, true);
  95.     acedSetVar(L"BACKGROUNDPLOT", &bp_old);
  96.   }
  97.  
  98. };
  99.  
  100. //-----------------------------------------------------------------------------
  101. IMPLEMENT_ARX_ENTRYPOINT(CPublishMultiPagePDFApp)
  102.  
  103. ACED_ARXCOMMAND_ENTRY_AUTO(CPublishMultiPagePDFApp, MyGroup, MyPublish, MyPublish, ACRX_CMD_MODAL, NULL)

Вот результат:


Т.е. выводится в файл нормально. Единственная проблема в том, что листы не настроены на DWG to PDF - их нужно настроить.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн OlegichАвтор темы

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Re: Проблема с публикацией
« Ответ #14 : 24-08-2017, 06:30:35 »
Т.е. выводится в файл нормально. Единственная проблема в том, что листы не настроены на DWG to PDF - их нужно настроить.
Спасибо за помощь, Александр. В этом и оказалось вся проблема. Без вас я бы наверное ещё долго не догадался. Спасибо огромное!