IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Обсуждение программ (http://www.imho.ws/forumdisplay.php?f=3)
-   -   Как выдернуть из векторной графики pdf-файла числен-е знач-я абсцисс и ординат точек? (http://www.imho.ws/showthread.php?t=148694)

lesha1974 26.04.2021 19:26

Как выдернуть из векторной графики pdf-файла числен-е знач-я абсцисс и ординат точек?
 
Например, в файле https://pubs.geoscienceworld.org/gsa...1/7/735/131259 Fig. 1 закодирован, наверно, в виде векторной графики. Потому как там на графике нанесено огромное количество точек и у меня староватый комп, немного, слабо «тянет» и прям видно, когда перехожу на страницу файла с этим рисунком, как точки появляются, последовательно, одна за другой. Т.е. они там закодированы в виден численных данных, задающих геометрические координаты точек.
Мне то эти данные и нужно как-то вытянуть. Чтобы не оцифровывать график. Да и в данном случае – не очень то оцифруешь: точки, местами, так плотно налегают друг на друга, что невозможно их различить.
Можно ли как-нибудь их выцарапать?
Открыл этот pdf-ный файл блокнотом и, действительно, увидел там систематический ряд цифр, который, наверняка, как-то используется для построения графика. Но покумекав и не зная как программируется векторная графика в pdf – файле не смог сообразить как можно вытянуть абсциссы и ординаты точек (хотя бы с точностью до констант пропорциональности).
Может здесь кто разбирается?
А, может, есть какая-то готовая программка, которая автоматически вытягивает (хотя бы с точностью до констант пропорциональности) значения абсцисс и ординат графиков (pdf- файлов), заданных с помощью векторной графики (конечно, такая программа могла бы работать не для всех пэдээфок, а только для тех, в которых точки рисунков закодированы как в выше приведенном примере)?

Merlin Cori 26.04.2021 19:52

ничего не понял.. где, что закодировано?
Нажмите здесь, чтобы увидеть текст полностью

lesha1974 26.04.2021 22:46

Точки первого рисунка как-то закодированы в виде чисел в пэдээфовском файле, задающих значения абсцисс и ординат графиков первого рисунка.
Т.е. в этом файле как-то зашит алгоритм того, что один кругляшек поставить с одним набором значений осей, другой - с другим и т.д. и эти численные зачтения как-то там "зашиты" в виде набора чисел. Мне их и нужно как-то декодировать, чтоб получить сами значения ординат (хотя бы с точностью до константы).
Чтоб задать точку на графике можно по разному закодировать её положение. Можно, например, задать значения абсцисс и ординат, а можно задать её радиус и угол.
В обсуждаемом пэдээфовском файле использован какой-то подобный способ и соответствующие числа в нём приведены (они видны текстовом редакторе). Но я не знаю какой. Если бы знал, то, думаю, открыл бы этот файл текстовым редактором, скопировал бы отуда эти числа и легко преобразовал бы их в значения абсцисс и ординат точек. И тогда проблема была бы снята.
Мой вопрос, собственно, можно свести к тому, как там положение точек закодировано (ну или, может, программка какая есть простенькая, которая декодирует ...?)?

Merlin Cori 26.04.2021 23:09

Цитата:

Сообщение от lesha1974 (Сообщение 1808728)
Точки первого рисунка как-то закодированы в виде чисел в пэдээфовском файле

ничего там не закодировано. весь пдф там - это обычный текст, а график - это картинка

Borland 27.04.2021 07:10

lesha1974,
Merlin Cori,
ну, некоторое кодирование там есть.
Насколь я понимаю - заради оптимизации web-просмотра (данные в виде stream и что-то про /FlateDecode). На не очень шустром компе/нетолстом канале при просмотре в браузере это действительно может проявляться визуально как постепенное появление картинки/текста.
Однако же графика там вполне себе "аналоговая" (растровая), т.е. картинка - это именно картинка, что хорошо заметно при просмотре с большим увеличением в виде характЕрной "пилы" по краям линий.

lesha1974 29.04.2021 06:59

Да: если ещё и очень крупное увеличение (открытого файла) сделать, то это ещё лучше проявляется и, может, будет видно и не только на не очень шустром компе. Да: не всё в пэдээфе бывает обычные картинки плюс текст: картинки, бывают, как-то кодируются аналитически. Но как (с таким часто сталкиваюсь в научных статьях, когда картинки получаются с помощью специальных математических программ)?

Borland 29.04.2021 15:41

Цитата:

Сообщение от lesha1974 (Сообщение 1808761)
картинки, бывают, как-то кодируются аналитически.

Если вы имеете в виду, что "график рисуется по таблице значений непосредственно отображающей программой" - обломайтесь.
Картинка, "вмонтированная" в PDF, может быть векторной (SVG, EMF и т.п.), но от этого не перестаёт быть картинкой, со всеми вытекающими.
Если она векторная, то извлечь оттуда саму картинку можно при помощи, например, LibreOffice Draw (открыть в нём PDF, правой кнопкой по картинке, "Сохранить").
Эту самую векторную картинку можно в дальнейшем редактировать в программе, поддерживающей соответствующий функционал. Но, подчеркну ещё раз: координаты точек в этой картинке практически никакого отношения к данным, по которым строился график, не имеют. Форма графика - да, схожая, но не более того...

Plague 29.04.2021 16:55

кто-нибудь может объяснить доступным IT-языком что требуется топ-стартеру?
если речь о картинке с графиком, то вот
http://ipic.su/img/img7/tn/2013205.1619700440.jpg
и никакого таинства в ней нет: обычный jpg, извлекаемый просто правой кнопкой мыши в Adobe Reader с последующей вставкой во что угодно, хотя бы в Paint, либо {если более продвинуто, то} прямым сохранением в файл из Adobe Acrobat Pro.

lesha1974 29.04.2021 17:45

Например, вот рисунок из статьи, ссылка на которую приведена в первом посте: https://pixs.ru/images/2021/04/29/Gig.1.png https://pixs.ru/image/G0Ulea .
В конечном счёте, мне нужно, чтобы в одной экселевской колонке стояли значения абсцисс точек этого рисунка, а в соседней колонке – соответствующие значения ординат.

Plague 29.04.2021 18:18

не вижу там такого. Ни в Firefox, ни в Хроме, ни в Яндексе, ни в IE

lesha1974 29.04.2021 21:09

Да: оказывается, в первом своём посте дал ссылку, по которой этой статьи в свободном доступе нет. Пардон.
Вот её пэдээфка в свободном доступе: https://www.researchgate.net/profile...nent-cycle.pdf .

Borland 29.04.2021 23:29

Цитата:

Сообщение от lesha1974 (Сообщение 1808772)
Вот её пэдээфка в свободном доступе

Там всё ещё грустнее: то, что показано в браузере по данной ссылке - банальный .png (растровый).
А в скачанном "full-text pdf" - картинка состоит из отдельных элементов, встроенных непосредственно в файл (т.е. хоть и векторная графика, но не "одним куском", а каждая точка и каждый бар являются отдельными картинками. Думается мне, что их координаты на листе ещё менее полезны, чем даже кординаты точек в векторном рисунке...
Правда, и извлечь их как бы проще: в обычном текстовом редакторе описание баров выгрядит так:
Код:

31 0 obj
<<
/Type /Annot
/Subtype /Link
/F 4
/Border [0 0 0]
/Rect [323.81937 543.16095 381.43143 551.76965]
/A <<
/Type /Action
/S /URI
/URI (https://www.researchgate.net/profile/Christopher-Kirkland-2?enrichId=rgreq-929a0abcf09b431136d35dd4859995d1-XXX&enrichSource=Y292ZXJQYWdlOzI1ODYxNzIyNDtBUzoxMDQwMjA5Nzg5NjI0MzZAMTQwMTgxMTk0MjQ5Mw%3D%3D&el=1_x_5&_esc=publicationCoverPdf)
>>
>>
endobj

Директива "/Rect" содержит координаты (нужно ещё понять - какой из точек бара) и размеры (высоту и ширину).
Выдернуть эти цифры с сохранением в .csv можно простейшим cmd-скриптом.
Что-то аналогичное, я полагаю, должно быть и для точек, но ковырять файл мне влом. Ибо долго, да и смысл сего действа для меня лично неочевиден...

Plague 29.04.2021 23:47

Аллилуйя!
на третий день исследований определились, наконец, с объектом исследований. :yees: :facepalm:
Сие есть pdf свёрстанный в Adobe InDesign
Указанный выше график, как верно стелепатировал Борланд - векторная графика.
Открывается в Adobe Illustrator. Возможно и в CorelDraw, и ещё в чём-либо под вектор заточенном, но у меня ничего, кроме люстры, в данный момент под рукой нет, а ставить во имя торжества истины влом.

Можно попробовать выделить и удалить всё лишнее, после чего экспортнуть (Save As) в SVG (просматривается браузерами), - он имеет более упорядоченный для восприятия и преобразования формат, имеющий какое-то подобие координат (хотя, я тоже не сказал бы что уж очень простой). Но как опять же, было верно замечено Борландом, - координаты эти "в попугаях", а не в каких-то фактических единицах измерения.
Что делать дальше - хз :biggrin:
http://depositfiles.com/files/fsrpf1kys

Borland, ты не со страницы миниатюры открывай, а скачай "Download full-text PDF", там вектор всё-таки.

Borland 30.04.2021 00:17

Цитата:

Сообщение от Plague (Сообщение 1808777)
Что делать дальше - хз

Ну, дальше можно прогнать .svg через простейший cmd-скрипт и получить на выходе .csv с координатами точек в пресловутых "попугаях", который уже импортировать в ёксель. ;)
По факту - один for, один find, одно echo.
Смысл сего действа от меня по-прежнему ускользает...:idontnow:

Plague 30.04.2021 00:35

Borland, в svg тоже не всё так просто, полистай её.
Смысл действия мне тоже не очевиден, но осмысленную xml-подобную структуру я вроде выудил :biggrin:

lesha1974 30.04.2021 05:15

Вытащить нужные цифры я бы мог программным образом. Работаю в мэйпле и мне не составит огромного труда это сделать, если знал бы как выглядит структура команд в текстовом редакторе, задающих координаты точек.
Посмотрел, в текстовом редакторе, как часто встречается (в обсуждаемом файле) команда "Rect" и увидел, что всего 9 раз. Т.е. много реже, чем точек на графике. Что наводит меня на мысль, что точки на рисунке, который привёл выше, задаются, в обсуждаемом файле, с помощью чего-то другого.
В текстовом редакторе там, например, видно очень много чисел, заданных последовательно идущими, через косую черту. командами CS0 1584 0 R .
А так же идёт очень длинная серия типа
0000002631 00000 n
0000000000 00000 f
0000000000 00000 f
0000491047 00000 n
0000637422 00000 n
0000637137 00000 n
0000550993 00000 n
0000636843 00000 n
0000636549 00000 n
0000550403 00000 n
0000636258 00000 n
0000635963 00000 n
0000549790 00000 n
0000549489 00000 n
0000638001 00000 n
0000635671 00000 n
0000635375 00000 n
0000635073 00000 n
0000634766 00000 n
0000634456 00000 n
0000548562 00000 n
0000634148 00000 n
0000633643 00000 n
0000633337 00000 n
0000633023 00000 n
0000565266 00000 n
0000632709 00000 n
0000547360 00000 n
...

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

П.С.: Извлечь численные данные координат точек (а не довольствоваться только рисунком) мне нужно для статистического анализа точек. Кроме того, как показал мой анализ, в данных должны сидеть колебания с циклами с сокращающимися периодами (от цикла к циклу в одно и то же количество раз). И такие циклы (для относительно больлшого их числа) просто невозможно увидеть в том масштабе времени, который показан в обсуждаемой статье: нужно этот масштаб, от цикла к циклу увеличивать. Либо поставить начало отсчёта времени в некоторый другой момент (чем в на рисунке статьи) и взять логарифмический масштаб. В частности, для этого мне и нужны численные данные координат точек, а не просто график, который приводится в статье. Сталкиваюсь с такой задачей часто и, поэтому, хотелось бы найти её решение раз повозившись с программкой по вытягиванию из текстового файла нужных цифр.
Но то, что, как выше было отмечено, файл свёрстан в Adobe InDesign меня ободрило тем, что, может, вообще будет не надо писать упомянутую программку, а просто открыть в нём файл и где-то взять нужный набор цифр, может, идущих подряд (без лишнего). Ещё не попробовал ...

lesha1974 30.04.2021 07:35

Что-то не могу раздобыть подходящий Adobe InDesign. То не скачивается, то скачается, но не ставится (например, https://www.softprime.net/grafika/gr...s5-cs6-cc.html). Раз встало (Adobe InDesign CS5 ACE Exam Aid), но не запускалось. Грешу на то, что у меня - экспишка, но пишут, что рассчитано и на экспишку. У кого-нибудь нет такой проги (может, постарее ...)?

Plague 30.04.2021 08:20

Цитата:

Сообщение от lesha1974 (Сообщение 1808781)
просто открыть в нём файл и где-то взять нужный набор цифр, может, идущих подряд (без лишнего)

Сомневаюсь что выйдет.
Ссылку на описание я не зря дал: InDesign - верстальщик печатной продукции, и PDF - не проект данного приложения, а сама эта самая печатная продукция (в электронном виде). Впрочем, и в проекте (уверен на 147%) никакого "нужного набора цифр" не было, а был вставлен график из какого-нибудь Экселя или тому подобного.
Попытка, как говорится, - не пытка, а сам я особо не шаманил с импортом PDF обратно в Indesign, но склоняюсь к тому что будет именно так.

Я написал в чем открывается данный файл.
Что бы я начал делать дальше..? в иллюстраторе удалил бы всё, оставил только 2 точки на графике (панель слоев F7 для контроля в помощь) - сохранил в SVG под одним именем. Потом удалил одну из точек, оставил только одну, сохранил SVG под другим именем, потом сравнил 1 и 2 на текстовом уровне - понял как выглядят в них нужные данные, и развивал мысль уже от этой печки.

Plague 30.04.2021 11:30

Цитата:

Сообщение от Borland (Сообщение 1808762)
извлечь оттуда саму картинку можно при помощи, например, LibreOffice Draw

кстати, им можно сохранить векторную графику в формате fodg (Flat XML ODF Drawing) - на мой взгляд она еще более читаема, чем предложенный мной выше svg
Код:

<draw:path draw:style-name="gr178" draw:text-style-name="P143" draw:layer="layout" svg:width="0.093cm" svg:height="0.095cm" svg:x="7.818cm" svg:y="13.927cm" svg:viewBox="0 0 94 96" svg:d="M94 53c0 21-20 43-41 43-32 0-53-22-53-43 0-32 21-53 53-53 21 0 41 21 41 53z">
 <text:p/>
</draw:path>


lesha1974 30.04.2021 12:45

Цитата:

Сообщение от Plague (Сообщение 1808783)
Что бы я начал делать дальше..? в иллюстраторе удалил бы всё, оставил только 2 точки на графике (панель слоев F7 для контроля в помощь) - сохранил в SVG под одним именем. Потом удалил одну из точек, оставил только одну, сохранил SVG под другим именем, потом сравнил 1 и 2 на текстовом уровне - понял как выглядят в них нужные данные, и развивал мысль уже от этой печки.

По-моему, хорошая мысль - методом последовательного исключения понять как закодированы нужные данные...
Что такое "иллюстратор"? Adobe InDesign?

П.С.: у меня почему-то уведомление по e-mail на эту тему не происходит несмотря на то, что в подписке на тему стоит "моментальное уведомление по e-mail".

Plague 30.04.2021 14:16

Adobe Illustrator - векторный редактор из пакета Adobe Creative Cloud (откуда и индиз).
Но в свете моих сегодняшних опытов, я думаю, хватит и
Цитата:

Сообщение от Borland (Сообщение 1808762)
LibreOffice Draw

с экспортом в
Цитата:

Сообщение от Plague (Сообщение 1808785)
в формате fodg (Flat XML ODF Drawing) - на мой взгляд она еще более читаема, чем предложенный мной выше svg

Цитата:

Сообщение от lesha1974 (Сообщение 1808786)
у меня почему-то уведомление по e-mail на эту тему не происходит

спам-фильтр на ящике стОит проверить...

lesha1974 13.06.2021 07:31

Цитата:

Сообщение от Plague (Сообщение 1808785)
кстати, им можно сохранить векторную графику в формате fodg (Flat XML ODF Drawing) - на мой взгляд она еще более читаема, чем предложенный мной выше svg
Код:

<draw:path draw:style-name="gr178" draw:text-style-name="P143" draw:layer="layout" svg:width="0.093cm" svg:height="0.095cm" svg:x="7.818cm" svg:y="13.927cm" svg:viewBox="0 0 94 96" svg:d="M94 53c0 21-20 43-41 43-32 0-53-22-53-43 0-32 21-53 53-53 21 0 41 21 41 53z">
 <text:p/>
</draw:path>


Не подскажете как можно было бы, простым образом, организовать перенос на новую строку (чтобы он выглядел таковым в текстовом редакторе) после всех выражений типа y="13.927 (точнее, перед всеми выражениями типа «cm" svg:viewBox=»)?
Чтобы потом с помощью экспорта в эксель из текста вытянуть цифры иксов и игреков в виде отдельных столбцов, а не возиться с программированием для вытягивания их программой непосредственно из исходного текста, последовательно перебирая его символы.
Например, если бы была какая-то последовательность символов, на которую можно было бы в ворде заменить заданную последовательность символов (в данном случае, «cm" svg:viewBox=») и которая означала бы перенос строки в ворде, то проблема была бы решена. Но как это сделать в ворде – не знаю.

Borland 13.06.2021 13:09

lesha1974
"Стоя на лыжах в гамаке"... :gigi:
fodg2csv.cmd
Код:

@echo OFF
set "INPUTFILE=c:\folder with\file.fodg"
set "OUTPUTFILE=c:\folder with\file.csv"
1>"%OUTPUTFILE%" echo "width";"height";"X";"Y"
for /f "usebackq tokens=14,17,20,23 delims=:= " %%A in (`find /i "svg:x" "%INPUTFILE%"`) do 1>>"%OUTPUTFILE%" echo "%%~A";"%%~B";"%%~C";"%%~D"

(Отлажено под формат того самого куска, приведённого Plague)
Из fodg выдёргиваются строчки, содержащие "svg:x", из строчки выбираются ширина, высота, X и Y и выводятся в csv. А уже csv является практически "родным" форматом для ёкселя и замечательно импортируется в него.
P.S. Обозначение "cm", если оно вам мешает, можно убрать стандартным "Поиском и заменой" в самом ёкселе. Если это делать в cmd - получится довольно громоздкая конструкция...

lesha1974 13.06.2021 17:45

Вложений: 3
Цитата:

Сообщение от Borland (Сообщение 1809359)
@echo OFF set "INPUTFILE=c:\folder with\file.fodg" set "OUTPUTFILE=c:\folder with\file.csv" 1>"%OUTPUTFILE%" echo "width";"height";"X";"Y" for /f "usebackq tokens=14,17,20,23 delims=:= " %%A in (`find /i "svg:x" "%INPUTFILE%"`) do 1>>"%OUTPUTFILE%" echo "%%~A";"%%~B";"%%~C";"%%~D"

Никак не соображу что это за код, куда его вводить ...

У меня, изначально, был pdf, о котором речь шла в первых сообщениях темы. Потом, редакторами pdf, выкинул оттуда всё кроме графика. В результате получился тот pdf, который прикрепляю в этом сообщении. Потом переделал его в формат fodg , с помощью открытого офиса. Переделанное тоже прицепляю. Потом открыл это переделанное блокнотом и увидел там, в основном, серию однотипных операторов, среди которых иксы и игрики точек графиках в сантиметрах. Всё остальное, в блокноте, удалил и то, что получилось тоже прицепляю, сохранённое в текстовом файле.
Если бы в этом текстовом файле вместо каждого набора символов «cm" svg:viewBox=» поставить "ввод" (на кнопку ввода на клавиатуре нажать; этот "ввод" сделал в прикреплённом текстовом файле для нескольких первых строк, но не удалял упомянутые символы), то полученный текстовый файл эксель уже сможет в себя легко экспортировать так, что в некоторых двух столбах будут стоять численные значения иксов и игриков.
Отсюда у меня и возник вопрос как сделать такой "ввод" автоматически, чтобы не тыкать тысячи "вводов" на клавиатуре.
Строго говоря, эти "вводы" достаточно поставить перед всеми последовательностями «cm" svg:viewBox=», которые есть в текстовом файле и, считай, задача будет решена (т.е. не обязательно удалять и саму эту последовательность; но т.к. я был ориентирован на какую-то готовую программку по замене символов, если такая существует, в ней можно было бы упомянутую серию символов заменить на серию символов, соответствующею нажатию на клавиатуре "ввод" и задача тоже была бы, считай, решена).

Borland 13.06.2021 18:13

Вложений: 1
Цитата:

Сообщение от lesha1974 (Сообщение 1809366)
Никак не соображу что это за код, куда его вводить ...

:facepalm:
Это батник. Скрипт командной оболочки Windows (cmd.exe).
Создаётся в текстовом редакторе (хоть в стандартном "Блокноте").
Только не забудьте подставить свои значения в INPUTFILE и OUTPUTFILE (соответственно, пути к исходному файлу и файлу результата)...

В аттаче: ваш текстовик (3-й вариант), переименованный в file.fodg; скрипт; результирующий file.csv.

lesha1974 13.06.2021 19:23

Ну надо же как, оказывается, коротко можно это сделать! Круто! У меня бы "километровый" текст в мэйпле получился бы... Ширина, высота - это наверно, характеристики размера кружков (точек графика; т.е. не являются искомыми данными)...

П.С.: посмотрел в ящике антиспамового фильтра - уведомлений там на эту тему не оказалось (и во "входящих" моего ящика - тоже нет).

П.С1.: В 249 строчке "file" почему-то получился "мусор" (что, конечно, пущая мелочь ...).

Borland 13.06.2021 19:53

Цитата:

Сообщение от lesha1974 (Сообщение 1809368)
В 249 строчке "file" почему-то получился "мусор"

Он туда перекочевал непосредственно из вашего исходника (строчка 818)...:biggrin:

Цитата:

Сообщение от lesha1974 (Сообщение 1809368)
Ширина, высота - это наверно, характеристики размера кружков (точек графика; т.е. не являются искомыми данными)

Думается, удаление пары лишних столбиков из ёксельной таблички трудности не представляет?.. Скрипт переделать нетрудно, но откровенно влом. :gigi:


Часовой пояс GMT +4, время: 06:13.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.