Mac OS X: объединение из базы данных
Я хотел бы, чтобы несколько пользовательских полей из (серверной) базы данных были объединены в документы Word Processing, помимо обычных полей "mail merge". Я не нахожу ничего подобного API из коробки, который позволяет вам делать это для пользовательских полей. Похоже, что это будет довольно распространенным явлением в программном обеспечении для бизнеса, но я предполагаю, что это еще одна причина, почему Mac не преуспевает там.
Если бы я написал для этого приложение для Mac OS X/Objective-C/Cocoa, был бы лучший способ подойти к нему - найти и заменить строки в файле RTF? Может быть, в сыром RTF? Есть ли лучший способ или формат для работы с этим?
2 ответа
Возможно, вы захотите проверить MGTemplateEngine Мэтта Джеммелла, так как он звучит так, как будто это то, что вы ищете.
Если нет специального "API слияния почты", это не недоброжелатель - он должен быть слишком конкретным, чтобы быть достаточно полезным, чтобы быть API. Если подумать об этом более подробно, то нет достаточно абстрактного случая, чтобы оправдать выделенный встроенный API. Большинство людей хотят "объединить записи из базы данных MySQL в документ Word" или "объединить записи из базы данных Oracle в документ PDF".
Тем не менее, все строительные блоки существуют для его построения, и это относительно просто (псевдокод):
retrieve interesting records
for each record
load a new copy of template
replace strings
save modified template to a file or do whatever
next record
Некоторые моменты:
- Какао читает и пишет RTF/RTFD и Word Doc форматирует изначально. Вы найдете эту информацию в текстовой системной документации.
- "Чтение полей из базы данных" носит очень общий характер. Если у вас еще нет соединения с базой данных, разобраны (т.е. у вас уже есть данные слияния), вам нужно быть более конкретным о базе данных (то есть, что вы пытались, если что-нибудь).
- Когда у вас есть данные и шаблон документа, "слияние по почте" - это просто замена строки токена (например, $$!FIRSTNAME!$$ или другая смешная уникальная комбинация). Это легко сделать с помощью встроенных функций NSMutableString и цикла for.
- Существуют фреймворки RegEx, если вам нужно что-то более сложное в отношении #3.