Я столкнулся с той же проблемой около года назад. После поиска всего существующего решения я его не нашел, поэтому я написал сокращенные отчеты о кристаллах, используя библиотеку генерации PDF-кода Zend Framework. Мне пришлось активно адаптировать свою библиотеку для поддержки сгруппированных объектов, повторения разделов и шаблонов. Это сработало, но это было действительно неуклюже, и если бы мне пришлось это сделать снова, я бы нашел способ сфокусировать php на хрустальные отчеты, будь то через веб-сервис, например, Gushiken, или, позвонив в приложение командной строки. CPAN имеет интерфейс Perl для CR: Win32 :: OLE :: CrystalRuntime :: Application .
Если решение PHP было выпущено в прошлом году, я сомневаюсь, что он зрелый достаточно для сравнения с CR. Не тратьте свое время на вытягивание волос - идите с тем, что работает. Время дорогое. Программное обеспечение отсутствует.
Обновлено 13 декабря 2011 г.
Доступны следующие инструменты с открытым исходным кодом:
Инструмент "Отражение" использует отражение. - видимо это не правильно.
Вы просили две вещи - код, показывающий, что делает рефлектор, а также альтернативу рефлектору.
Вот пример, значительно упрощенный по сравнению с тем, что делает Reflector, но он показывает технику отражения: TypeView.cs
У меня нет предложений по замене Reflector с открытым исходным кодом .
Ну, сам Reflector - это сборка .NET, поэтому вы можете открыть Reflector.exe в Reflector, чтобы проверить, как он собран.
На самом деле, я почти уверен, что Reflector считается дизассемблером с некоторыми функциями декомпилятора.Дизассемблер, потому что он считывает байты из файла сборки и преобразует его в язык ассемблера (в данном случае ILasm). Функциональность декомпилятора, которую он предоставляет, анализируя IL на хорошо известные шаблоны (например, выражения и инструкции), которые затем переводятся на языки более высокого уровня, такие как C #, VB.Net и т. Д. Дополнительный api для Reflector позволяет вам написать свой собственный языковой переводчик, если вы хотите ... однако магия того, как он анализирует IL в деревьях выражений, является тщательно охраняемым секретом.
Я бы порекомендовал взглянуть на любую из трех вещей, упомянутых выше, если вы хотите понять, как работают дизассемблеры IL: Dile, CCI и Mono - все это хорошие источники для этого.
Я также настоятельно рекомендую приобрести Ecma 335 spec и книгу Сержа Лидина.