Передача символов возврата строки Unicode, установленных в классе, на сторону клиента (DWR/HTML/UTF8) для InDesign Team

Я создал инструмент управления контентом, который позволяет команде разработчиков создавать и управлять продуктом, который экспортируется на веб-сайт, а другой группе дизайнеров создавать печатную рекламу для газет, отображающую те же данные о продукте.

Моя проблема связана с графическими дизайнерами InDesign и макросами, которые они используют в InDesign. Макросы могут копировать/вставлять текст/данные и автоматически форматировать текст внутри InDesign в зависимости от наличия определенных символов. В частности, команда дизайнеров использует в своих макросах табуляцию, «мягкий разрыв строки» (возврат со сдвигом) и обычный разрыв строки (жесткий возврат).

Прямо сейчас я генерирую блок текста с записями и нужными символами форматирования в классе java, а затем отправляю его через DWR на сторону клиента. Когда требуется символ табуляции, который я отправляю \t, возвращается \r, и я надеялся, что мягкий разрыв строки будет \n, однако InDesign, похоже, рассматривает как \r, так и \n как обычный разрыв строки.

Я отказался от возможности передать мягкий возврат до вчерашнего дня, когда я наткнулся на Unicode 
 (мягкий разрыв строки) и 
 (обычный разрыв строки). Я пробовал выводить оба этих символа вместо \r и \n в надежде, что InDesign может воспринимать эти символы по-другому. В боксе, который дизайнеры копируют вывод из него, похоже, что никакого персонажа там нет. В тех местах, где я специально указал 
, нет разрыва строки. Когда я копирую/вставляю вывод в текстовый редактор, он показывает мне, что там есть нераспознанный символ (он отображается в виде прямоугольника с вопросительным знаком вокруг него).

Платформа — Java/MySQL, работающая на Tomcat.

На сегодняшний день мне не приходилось слишком много иметь дело с кодировкой символов в этом приложении. В заголовке установлено <meta charset="utf-8" />, но пока это все. Я попытался установить это на utf-16, но это не меняет вывод. Для всех таблиц в базе данных MySQL установлено значение utf8/utf8_general_ci.

Мысли? Как заставить InDesign копировать/вставлять текст и распознавать все его символы, поддерживающие макросы? На самом деле, это просто мягкие разрывы строк, которые он не распознает. ПОМОЩЬ! :)

Спасибо. Извините, что так долго!

Райан В.


person Ryan Vettese    schedule 12.11.2013    source источник
comment
InDesign должен распознавать \n как мягкий разрыв строки в скопированном тексте. Можете ли вы подтвердить, что ваш код все еще содержит этот символ? Возможно, он уже потерян в вашей процедуре копирования/вставки.   -  person Jongware    schedule 12.11.2013
comment
да, он может потеряться, когда он помещается в текстовую область для копирования дизайнером (по моему коду). Если вы скопируете форматированный текст из indesign в текстовую область, а затем обратно, вы потеряете мягкие возвраты. поэтому, возможно, я ищу способ получить текст с мягким возвратом из веб-браузера в дизайн, не теряя его.   -  person Ryan Vettese    schedule 13.11.2013
comment
Если мягкий возврат все еще присутствует в текстовой области, возможно, вы можете заменить его какой-либо постоянной строкой перед копированием и либо изменить ее в своем коде Java, либо, если это также не удается, в самой цели InDesign.   -  person Jongware    schedule 14.11.2013


Ответы (2)


Я некоторое время играл с ID CS6 (OS X), и я не могу на всю жизнь заставить его распознавать вставленный LF как принудительный разрыв строки. LF, CR и CRLF идут к разрывам абзаца. U+2028 и U+2029 отображаются как пустые глифы, а не разрывы.

Я немного опасаюсь публиковать это как ответ, но я попробую:

Вы можете рассмотреть возможность предоставления текста в виде загруженного файла .txt. В CS5 появился «Tagged Text» (своего рода XML-текстовый документ с полной поддержкой символов, атрибутов и т. д. InDesign), поэтому это означает, что ваши дизайнеры смогут размещать текстовый файл и InDesign будет относиться ко всему, как задумано.

Чтобы превратить существующий текст в текст с тегами CS5+ (см. ссылку здесь), поместите <ASCII-MAC> или <ASCII-WIN> (соответственно) в качестве первой строки и экранируйте любые '‹' или '> с помощью обратной косой черты, тогда вы можете использовать <0x000A> в качестве принудительного разрыва строки. (буквально эти 8 символов)

Это, вероятно, мега-излишество, но это, безусловно, самый глупо надежный способ, который я могу придумать. Я отредактирую, если у меня что-то еще заработает.

NB. «принудительный разрыв строки» — это термин, который InDesign использует для символа, созданного с помощью Shift+Enter, вашего «мягкого разрыва строки»; в отличие от «разрыва абзаца» для стандартного возврата каретки. InDesign очевидно представляет принудительные разрывы с LF (U+000A ) и разрывы абзаца с помощью CR (U+000D).

person jgriego    schedule 25.11.2013
comment
У меня не сработало, в моем случае я разрабатываю плагин InDesign с использованием HTML5/CSS3 и Javascript. Пытаясь поместить текст с тегами в текстовые фреймы, мы должны добавить '\r\n' в конец каждой строки, чтобы убедиться, что формат '‹ASCII-WIN›' понятен. Надеюсь, это поможет кому-то. - person Sunny R Gupta; 19.02.2014
comment
Естественно, если вы сообщаете ID, что это формат Windows, вы должны использовать окончание строки Windows (CR+LF). :) - person jgriego; 23.02.2014

Я не уверен, как вы пытались передать и распечатать свои символы (если вы разместите свой код DWR и javascript, я мог бы помочь больше), но я бы попытался убедиться, что ваш вывод java является фактическим UTF -8, используя что-то вроде:

String yourRecordString = "Some line 1. \u2028Some line 2.";
ByteBuffer bb = Charset.forName("UTF-8").encode(yourRecordString);  

Затем вы можете записать байты из bb в выходной поток/файл и проверить их. (Обязательно записывайте их как байты, а не как строку или символы.) Например, кодировка UTF-8 для \u2028 — это E2 80 A8, поэтому вы должны увидеть эту последовательность в соответствующем месте вашего вывода. (Я использую шестнадцатеричный режим в vim для таких вещей.)

Затем убедитесь, что эти байты возвращаются на стороне javascript. (Хотя я не эксперт по DWR, я мог бы предпочесть, чтобы ваша функция java возвращала что-то иное, чем String.)

По крайней мере, это должно помочь вам диагностировать, в чем заключается проблема. Если вы видите эту последовательность и если InDesign по-прежнему не распознает плавные разрывы строк, то вы, по крайней мере, знаете, что проблема связана с InDesign и что вам придется найти какое-то другое решение (например, изменить макросы дизайнера для распознавания других символов). ).

(Кроме того, обратите внимание, что вы можете увидеть кодировку по умолчанию для вашей JVM, используя Charset.defaultCharset(). Мое предполагаю, что по умолчанию используется не UTF-8 и что InDesign, возможно, также имел проблема с UTF-16, которую вы пробовали, из-за порядка следования байтов или чего-то в этом роде.)

person Turix    schedule 25.11.2013