Извлечение текста с получением стилей CS6

  • Автор темы Автор темы yotun
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

yotun

Участник
Топикстартер
Сообщения
21
Реакции
46
Всем привет.
Бьюсь уже несколько дней, но просвета нет
Задача следующая: получить содержимое макета из индизайна, включая картинки, очень желательно с оригинальным расположением иллюстраций, даже если они не анкорены.
Спасибо Евгениусу, подсказал обход по Stories, с получением GeometricBounds

Но вот с получением стилей текста реальная проблема.
Каждый "кусок" стилизованного текста хранится в TextStyleRanges(n), но никакой привязки к параграфу нет.

for Paragraphs было бы зачетно, но там нет инфы о стилях примененных непосредственно к некоторым частям текста, если же обратиться к его TextStyleRanges то там ВСЕ параграфы и найти текущий параграф как-то не получилось


На выходе нужен некий xml, в котором будет информация о принадлежности того или иного текста к некоему параграфу, с сохранением стилей для каждого изменения.
Перебор по Characters для каждого параграфа не пройдет, слишком долго и бессмысленно
Подскажите алгоритм для любого языка, будь то js или vb.
 
Ответ: Извлечение текста с получением стилей CS6

Задача следующая: получить содержимое макета из индизайна, включая картинки
А в чем заключается сверхзадача, если не секрет?
 
Ответ: Извлечение текста с получением стилей CS6

А в чем заключается сверхзадача, если не секрет?
Ничего экстраординарного, мне нужно полноценное xml-представление книги-журнала, количество которых может исчисляться сотнями.
на ручное "исправление" каждого макета нет ни сил, ни времени.
или я неправильно понял вопрос?
 
Ответ: Извлечение текста с получением стилей CS6

или я неправильно понял вопрос?
Думаю, что правильно, но ответ не прозвучал. Вы пытаетесь реализовать намеченный вами способ решения какой-то задачи. Пока стало понятно, что речь идет о попытке автоматизации какого-то "ручного исправления". Возможно, внятно сформулировав основную задачу, найдуться более простые решения, а может быть уже есть и готовые. Но это как хотите, разумеется.
 
Ответ: Извлечение текста с получением стилей CS6

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

Эээээ, основная задача - ИЗВЛЕЧЕНИЕ текста и иллюстраций из макета книги. НЕ экспорт, НЕ сохранение текста в некий из поддерживаемых индизайном форматов.
Мне нужна возможность работы с текстом, графикой и стилями через Interop.Adobe.dll
Я подключаю указанную библиотеку к проекту на .NET и работаю с COM-объектами, представленными этой библиотекой.

Как бы еще сформулировать ОБЩУЮ задачу?)

В частности звучит так: как из параграфа получить куски текста с РАЗНЫМИ стилями, не перебирая посимвольно?
для примера один из частных случаев: "Да здравствует индусский код!
Индусский код - самый клевый код в мире.
Индусы, пишите больше!"
Итого у нас ТРИ параграфа, и как минимум 5 стилей
В первом параграфе у нас сейчас как минимум пять TextStyleRanges.
Параграф об этом не знает ровным счетом ничего, если я правильно понимаю модель адоба.
Информация о разностилевых блоках находится в textStyleRanges.Texts параграфа, но в нем самом нет инфы о том что тот или иной кусок относится к текущему параграфу.

Если и сейчас не объяснил - простите, по другому не могу)
 
Ответ: Извлечение текста с получением стилей CS6

но в нем самом нет инфы о том что тот или иной кусок относится к текущему параграфу.
Есть:
Код:
textStyleRange.paragraphs
Чтобы понять, как это работает, выделяем символ и получаем сначала textStyleRange, к которому он относится:
Код:
var doc = app.activeDocument;
var sel = doc.selection[0];
var tsr = sel.textStyleRanges[0];
tsr.select();
... а потом и абзац, в котором находится этот textStyleRange:
Код:
tsr.paragraphs[0].select();
 
Ответ: Извлечение текста с получением стилей CS6

Как бы еще сформулировать ОБЩУЮ задачу?
Ну, если задача состоит в том, чтобы просто "извлечь текст и иллюстрации из макета" и получить "возможность работы с текстом, графикой и стилями через Interop.Adobe.dll", то, наверное, вы справились. Если же "извлечение текста и иллюстраций из макета" и наличие "возможности работы с текстом, графикой и стилями через Interop.Adobe.dll" подразумевает получение какого-то нового продукта/издания/или зачем-то еще, то нет.)) Я пытаюсь понять, что вы хотите получить в итоге после того как извлечете текст и иллюстрации и покромсаете все это на куски и стили особым способом.
 
Ответ: Извлечение текста с получением стилей CS6

можно и xml тэги назначить по стилям перед экспортом
 
Ответ: Извлечение текста с получением стилей CS6

XML, просто XML, из которого я могу сделать буквально что угодно, главное чтобы в нем была инфа выведенная из дурацкого представления адобовских кодеров
 
Ответ: Извлечение текста с получением стилей CS6

Если экспортировать документ в IDML и раскрыть его, то в файлике Story_ХХХ.xml можно сразу найти такую разбивку:


Код:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<idPkg:Story xmlns:idPkg="http://ns.adobe.com/AdobeInDesign/idml/1.0/packaging" DOMVersion="6.0">
    <Story Self="u112" AppliedTOCStyle="n" TrackChanges="false" StoryTitle="$ID/" AppliedNamedGrid="n">
        <StoryPreference OpticalMarginAlignment="false" OpticalMarginSize="12" FrameType="TextFrameType" StoryOrientation="Horizontal" StoryDirection="LeftToRightDirection"/>
        <InCopyExportOption IncludeGraphicProxies="true" IncludeAllResources="false"/>
        <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Normal">
            <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]" FillColor="Color/Word_R220_G38_B27" PointSize="13">
                <Content>[B]Да[/B]</Content>
            </CharacterStyleRange>
            <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]" FillColor="Color/Word_R38_G38_B38" PointSize="13">
                <Content>[B] здра[/B]</Content>
            </CharacterStyleRange>
            <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]" FillColor="Color/Word_R38_G38_B38" PointSize="13" Underline="true">
                <Properties>
                    <UnderlineColor type="object">Color/Word_R38_G38_B38</UnderlineColor>
                </Properties>
                <Content>[B]вс[/B]</Content>
            </CharacterStyleRange>
            <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]" FillColor="Color/Word_R0_G36_B187" PointSize="13">
                <Content>[B]тв[/B]</Content>
            </CharacterStyleRange>
            <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]" FillColor="Color/Word_R38_G38_B38" PointSize="13" Underline="true">
                <Properties>
                    <UnderlineColor type="object">Color/Word_R38_G38_B38</UnderlineColor>
                </Properties>
                <Content>[B]уе[/B]</Content>
            </CharacterStyleRange>
            <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]" FillColor="Color/Word_R38_G38_B38" PointSize="13">
                <Content>[B]т ин[/B]</Content>
            </CharacterStyleRange>
            <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]" FillColor="Color/Word_R38_G38_B38" FontStyle="Bold" PointSize="13">
                <Content>[B]дусск[/B]</Content>
            </CharacterStyleRange>
            <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]" FillColor="Color/Word_R38_G38_B38" PointSize="13">
                <Content>[B]ий код![/B]</Content>
                <Br/>
            </CharacterStyleRange>
        </ParagraphStyleRange>
        <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Paragraph Style 1">
            <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]">
                <Content>[B]Индусский код - самый клевый код в мире.[/B]</Content>
                <Br/>
            </CharacterStyleRange>
        </ParagraphStyleRange>
        <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Normal">
            <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]" FillColor="Color/Word_R38_G38_B38" PointSize="13">
                <Content>[B]Индусы, [/B]</Content>
            </CharacterStyleRange>
            <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]" FillColor="Color/Word_R115_G243_B44" PointSize="13">
                <Content>[B]пишите [/B]</Content>
            </CharacterStyleRange>
            <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]" FillColor="Color/Word_R38_G38_B38" PointSize="13">
                <Content>[B]больше![/B]</Content>
            </CharacterStyleRange>
        </ParagraphStyleRange>
    </Story>
</idPkg:Story>

Возможно, будет проще преобразовать этот XML в вашу структуру, чем формировать заново.
 
Ответ: Извлечение текста с получением стилей CS6

Спасибо.
Я пробовал отсмотреть IDML, но при таком экспорте не смог найти файла связи между графикой и текстом, где-то она есть, но пока найти не могу
 
Ответ: Извлечение текста с получением стилей CS6

Чем не подходит тег <Image>? Для картинок свободно расположенных на странице его можно найти в файле Spread_XXX.xml, а для помещенных в тексте - он в файле Story_ХХХ.xml
 
Ответ: Извлечение текста с получением стилей CS6

нет привязки к тексту, ДО он текстового фрейма, ПОСЛЕ, посредине между двумя?
 
Ответ: Извлечение текста с получением стилей CS6

Похоже, что вы пытаетесь извлечь из верстки информацию которой там нет. В отличие от более-менне одномерного HTML здесь двумерная страница. До, после, посередине - скорее определяются человеческим восприятием полосы, чем какими-то характеристиками элементов.
 
Ответ: Извлечение текста с получением стилей CS6

Не согласен с вами, если оперировать объектами, которые предоставляет скриптинг, то можно получить всю упомянутую мной информацию, у большинства тех самых объектов есть GeometricBounds, который и определяет то самое расположение, до, после, а если вдуматься, то и "поверх", иначе говоря картинка может быть background'ом для некоего текста.
 
Ответ: Извлечение текста с получением стилей CS6

Я хотел сказать, что информация о взаимосвязях принципиально отсутствует в верстке. Книжная верстка делается людьми и только для людей. Безусловно, ориентируясь на значения GeometricBounds можно строить предположения относительно связей элементов верстки между собой. Для простых версток, возможно, это даст неплохой результат. Но только попробуйте программно найти взаимосвязи на такой странице:

Посмотреть вложение 55168
 
Ответ: Извлечение текста с получением стилей CS6

К сожалению ссылка не открывается, не могу ничего ответить.
Не сказал бы что ваше утверждение истинно, на мой взгляд верстка вообще не для людей, верстка для печати, а я как раз хочу получить представление "для людей".
 
Ответ: Извлечение текста с получением стилей CS6

Можно определить положение 1 и последнего символа textStyleRange
PHP:
app.activeDocument.stories[0].paragraphs[0].textStyleRanges[i].characters[0].insertionPoints[0].index
app.activeDocument.stories[0].paragraphs[0].textStyleRanges[i].characters[-1].insertionPoints[0].index

Может это поможет?
 
Ответ: Извлечение текста с получением стилей CS6

хм, надо подумать, спасибо за идею:)
 
Статус
Закрыто для дальнейших ответов.