CDW в PDF КОМПАС V14

Автор AndreySt, 12.11.13, 15:25:41

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

IgorRUtver

Ваушки, спасибщ Slaviation за материал буду разбираться!

IgorRUtver

 "pdf2d.DLL - уже готовый конвертер исходя из экспортных функций.
- LPKOMPASCONVERTER WINAPI GetIKompasConverter() - предопределенная функция, возвращающая интерфейс конвертера."   
А как пользоваться данной функцией, просто как экспортной из dll?

Можно создать приложение и получить адрес функции GetIKompasConverter и т.д., но может быть проблема с лицензией, т.к. если внимательно посмотреть, то там есть функции, которые отвечают за правильное использование конвертера. Если использовать на прямую, Вам необходимо изучить древний талмуд, "Delphi 5 Руководство разработчика, глава 9".
+ Благодарностей: 1

IgorRUtver

мда..., я думал будет полегче, спасибо буду разбираться

Так вроде уважаемый Slaviation уже код привёл.
1. Открываем ключ в реестре.
2. Читаем значение Path.
3. Получаем интерфейс конвертера IApplication.Converter.
4. Получаем интерфейс параметров конвертирования IСonverter.ConverterParameters.
5. Запустить процесс конвертации IСonverter.Convert.
+ Благодарностей: 1

AndreySt

Спасибо всем за помощь, разобрался конвертирует прекрасно))) но вот еще есть вопрос, какую библеотеку использовать для сохранения в DWG?
ЗЫ вот только на " convParam->PutColorType(0);" выпадает ошибка(access violation) убрал эту строчку, вроде нормально конвертирует

AndreySt

насчет импорта в dwg разобрался, нужная библиотека находится в ..\Libs\ImpExp\dwgdxfexp.rtw

IgorRUtver

Sabahs и Slaviation Спасибо большое за подробную помощь! в PDF конвертирует :o:
var
   newKompasAPI : IApplication;
   disp : IDispatch;

   Registry: TRegistry;
   pСonverter : IConverter;
    pСonverterPtr : IUnknown;
   path2 : string;
   i2 : integer;
begin
Registry := TRegistry.Create;
Registry.RootKey := hkey_local_machine;
If Registry.OpenKeyReadOnly('SOFTWARE\ASCON\KOMPAS-3D\Converters\Pdf2d') then
path2 := Registry.ReadString('path');
disp := IDispatch( CreateKompasApplication );
  newKompasAPI := disp As IApplication;
   pСonverter := newKompasAPI.Converter[path2];
    pСonverterPtr := pСonverter.ConverterParameters(0);
    //pСonverterPtr.PutColorType(0);
    If pСonverter.Convert('','C:\Users\Admin\Desktop\MyDraft.pdf',0,false) = 1 then
     Showmessage('TRUE')
     else
     Showmessage('FALSE');

Единственное, не получается задать в pСonverterPtr цвет линий, pСonverterPtr.PutColorType(0) не прокатило :|

Если смотреть код уважаемого Slaviation, то pСonverterPtr(IUnknown) нужно привести к интерфейсу IPdf2dParam.

IgorRUtver

А где описание этого интерфейса находится?


IgorRUtver

Спасибо, вроде, разобрался, наваял как смог, pPdf2dParamDisp не равен nil
...
    pСonverterPtr := pСonverter.ConverterParameters(0);
    pPdf2dParamDisp := pСonverterPtr as IPdf2dParamDisp;
    pPdf2dParamDisp.ColorType := 1;
...
Но при попытке установить ColorType выдаёт "Внутренняя ошибка приложения". Значение свойства ляпнул на "обум". Смущает в описании интерфейса ColorType: SYSINT. Что это за тип такой?

SYSINT=Integer
pPdf2dParamDisp должен выглядеть IPdf2dParam.
У меня сейчас SDK не стоит, если можно, то прилепите код и pdf2d.pas сгенерированный из pdf2d.tlb.

IgorRUtver

Конечно, как доберусь до компьютера. Вот только я не подключал pdf2d.pas, исправлю и выложу код.

IgorRUtver

Я pdf2d.pas не подключал, а скопировал описание интерфейса,
  IPdf2dParamDisp = dispinterface
    ['{1BF78A7C-E274-4B61-8771-EBD0542E8F04}']
    property EmbedFonts: WordBool dispid 1;
    property GrayScale: WordBool dispid 2;
    property Resolution: SYSINT dispid 3;
    property Scale: Double dispid 4;
    property ColorType: SYSINT dispid 5;
    property OnlyThinLine: WordBool dispid 6;
    property MultiPageOutput: WordBool dispid 7;
    property PageRange: SYSINT dispid 8;
    property PageRangeStr: {??PWideChar}OleVariant dispid 9;
    property PageOddEven: SYSINT dispid 10;

А получить pdf2d.pas из pdf2d.tlb не выходит, выдает ошибку, сам файл pdf2d.tlb весит 4 кБт, это нормально?

Нужен нормальный файл, просто скопировать не то.
Насколько я понял, там проблема с регистрацией dll, но разбираться времени нет, своих проблем хватает.

Прикрепил pdf2d.pas полученный из pdf2d.tlb.
+ Благодарностей: 2

IgorRUtver

Спасибо большое за потраченное на меня время, а то я обшарил все компьютеры на работе, и нигде не нашел. Добавил файл, все работает.

var
   newKompasAPI : IApplication;
   disp : IDispatch;
   pPdf2dParam : IPdf2dParam;
   Registry: TRegistry;
   pСonverter : IConverter;
    pСonverterPtr : IUnknown;
   path2 : string;
begin
Registry := TRegistry.Create;
Registry.RootKey := hkey_local_machine;
If Registry.OpenKeyReadOnly('SOFTWARE\ASCON\KOMPAS-3D\Converters\Pdf2d') then
path2 := Registry.ReadString('path');
disp := IDispatch( CreateKompasApplication );
  newKompasAPI := disp As IApplication;
   pСonverter := newKompasAPI.Converter[path2];
    pСonverterPtr := pСonverter.ConverterParameters(0);
    pPdf2dParam := pСonverterPtr as IPdf2dParam;
    pPdf2dParam.ColorType := 1;
    pСonverter.Convert('','C:\Users\Admin\Desktop\MyDraft.pdf',0,false)
end;

ZerOCooL

Уважаемые коллеги!

Помогите, пожалуйста, разобраться со следующим вопросом - описанную выше библиотеку для конвертации чертежей в pdf положил в папку \Bin\. Перезагрузил приложение. Но в списке допустимых для сохранения форматов до сих пор так и не значится pdf.

Поясните, пожалуйста, где я ошибся и что необходимо доработать в самой программе. Спасибо.

С уважением, Алексей.

Виктор 1987

Возможность создания PDF введена в сервис-паке на К14.