:: Visual Foxpro, Foxpro for DOS
Re: djvu в image
sphinx

Сообщений: 31402
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Цитата:
Рядом с открываемым файлом оставлять свои следы - это не оч.хор.

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


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: djvu в image
akvvohinc

Сообщений: 4261
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Рядом с открываемым файлом оставлять свои следы - это не оч.хор. (как Эксели и Верд это делают - держат скрытые файлы открывающего
Если я правильно понял, то речь шла не об аналоге того, как это делают Ворд и Эксель.

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

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

Вопрос - сколько секунд занимает "расшифровка" файла размером, допустим, 100Mb.
Может, не стоит заморачиваться с "копиями", а просто выполнять расшифровку каждый раз?
Во всяком случае, такой вариант работы я бы имел в виду как опцию - наверняка кто-то захочет работать именно в таком режиме.
Ratings: 0 negative/0 positive
Re: djvu в image
sphinx

Сообщений: 31402
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Цитата:
Но просто наличие файла с подходящим именем не гарантирует того, что "копия" соответствует оригиналу - ведь исходный PDF с момента предыдущего обращения мог измениться, да и "копию" кто-то мог "попортить".
И если это так, то надо делать новую "копию", а не пользоваться "устаревшей".

PDF-файл все же не таблица, чтобы на момент работы с ним его "могли попортить" (изменить).


------------------
"Veni, vidi, vici!"(с)




Исправлено 1 раз(а). Последнее : sphinx, 08.05.24 11:09
Ratings: 0 negative/0 positive
Re: djvu в image
akvvohinc

Сообщений: 4261
Откуда: Москва
Дата регистрации: 11.11.2008
sphinx
PDF-файл все же не таблица, чтобы на момент работы с ним его "могли попортить" (изменить).
Не на "момент работы", а при повторной работе:
kornienko_ru
Красиво было бы в памяти создать xref без создания временного файла. Но подумал, что каждый раз при обращении к этому файлу, особенно, если он очень большой, будет тратиться каждый раз лишнее время.
То есть если бы речь шла об одном обращении к файлу, автор готов был ограничиться созданием xref в памяти.
Ratings: 0 negative/0 positive
Re: djvu в image
sphinx

Сообщений: 31402
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
А разве обработка данных (файла целиком, или его части ) в памяти не быстрее, чем операции RW с диском?


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: djvu в image
sphinx

Сообщений: 31402
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Цитата:
Не на "момент работы", а при повторной работе:

Хорошо. Так надо в ТЗ определить - что есть повторная работа, КТО и в КАКОЙ момент времени открывает файл? Если он локально создан/скопирован - так один пользователь его и пользует. Найти код, где открытие файла не было закрыто, сделать красиво. С сетевым не так просто - его одновременно могу 100500 пользователей открывать. Ежели нет текстового слоя и не редактируют - забери в темповый каталог и открывай хоть до посинения. Потом почистить бы хорошо.

Я проблемы не вижу.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: djvu в image
akvvohinc

Сообщений: 4261
Откуда: Москва
Дата регистрации: 11.11.2008
sphinx
А разве обработка данных (файла целиком, или его части ) в памяти не быстрее, чем операции RW с диском?
Операции Read/Write файла будут в обоих вариантах.
Но при первой обработке эти операции будут с исходным файлом, а при повторных - с дешифрованной "копией".
Разница - во времени дешифровки.
Поэтому я и спросил, насколько она продолжительна.

Например, есть 100Mb "нешифрованный" PDF и такой же "шифрованный".
На сколько секунд обработка первого в среднем закончится быстрее?
Ratings: 0 negative/0 positive
Re: djvu в image
kornienko_ru

Сообщений: 235
Откуда: Владивосток
Дата регистрации: 06.09.2015
Я решил не создавать версий pdf или индексного файла по аналогии с файл.idx. Ну, если у кого-то будут гигантские pdf, может быть тогда будет смысл. А в актуальном состоянии такой индекс поддерживать легко. Для этого надо сравнивать время модификаций этих файлов, только и всего.
Тестовый файл DD.pdf открывается в быстром варианте. А вот с CC.pdf явно испорчен. Поднял спецификацию pdf версии 1.7? (как у CC.pdf)... не нашел, чтобы в спецификации было сказано, что объект описания страниц может отсутствовать. Наоборот, наличие такого объекта требуется в обязательном порядке. А в CC.pdf он отсутствует, соответственно запрос на количество страниц: ? pdfToStr("CC.pdf") — выдает ноль, т.е. страниц нет. Кроме того в самом файле есть ссылка на объект описания страниц (он под номером 6), но сам объект 6 отсутствует. Я было хотел предположить, что если в файле всего 1 страница, то может не быть объекта описания страниц, но не нашел подтверждения этого предположения в спецификации. Правда в ней сказано, что существуют скрытые объекты, т.е. такие, которые специально скрываются. Да, там есть висячие зашифрованные объекты. Но если это так, значит создатель специально скрыл эту информацию, чтобы никто ничего не модифицировал. Значит это касается уровня безопасности. Ну и не надо тогда туда лезть. В общем принял решение CC.pdf не трогать. Могу предложить вариант анализировать количество страниц в pdf перед извлечением страницы, если 0, а известно, что 1 страницы, то просто взять, этот файл в переменную командой fileToStr(). Также в спецификации я прочитал, что кроме версий с описанием номеров страниц, есть pdf с именованными страницами. Т.е. вместо номеров, там объект, который описывает имена страниц. Это интересно, хотел бы предусмотреть, но к сожалению в наличии такого файла у меня нет. А если начну предусматривать, то не факт, что что-то сделаю не так, испорчу и придется возвращать назад. Когда у меня будет такой файл, тогда сделаю. Если кто-то знает как расшифровывать объекты то сообщите, будем расшифровывать.
Текст prg обновил github.com от 09.05.2024.
Ratings: 0 negative/0 positive
Re: djvu в image
lemenev

Сообщений: 136
Дата регистрации: 23.06.2022
Такие программы, как FineReader или PDF-XChange Editor, легко определяют количество станиц в PDF-файле, разбивают его на отдельные страницы, вычленяют диапазоны страниц. (Это проверено на всех предлагаемых ранее файлах.) Значит, это делается и возможно реализовать на Fox.
Где заводить временный файл – не важно. Важно почистить за собой по окончании работы программы. Мусор имеет обыкновение накапливаться.
Если вновь возникнет необходимость обратиться к тому же файлу, то не проблема вновь создать временный файл.
Ratings: 0 negative/0 positive
Re: djvu в image
lemenev

Сообщений: 136
Дата регистрации: 23.06.2022
Протестировал последний вариант программы на файле DD.PDF:
  • Программа по-прежнему «раздувает» файлы.
  • Программа не проверяет допустимый диапазон страниц. Для 4-ой записывается какой-то мусор объёмом более 5К.
  • Программа не проверяет наличие файла.
  • Программа на странице 3 после пункта 3 меняет шрифт, а в пункте 4 пропадают символы «О».

    Программа для тестирования:
    stroka=pdfToStr("C:\Users\User\Documents\Visual FoxPro Projects\DD.pdf",1)
    ?LEN(stroka)
    =strToF(m.stroka,"my4-1.pdf")
    stroka=pdfToStr("C:\Users\User\Documents\Visual FoxPro Projects\DD.pdf",2)
    ?LEN(stroka)
    =strToF(m.stroka,"my4-2.pdf")
    stroka=pdfToStr("C:\Users\User\Documents\Visual FoxPro Projects\DD.pdf",3)
    ?LEN(stroka)
    =strToF(m.stroka,"my4-3.pdf")
    stroka=pdfToStr("C:\Users\User\Documents\Visual FoxPro Projects\DD.pdf",4)
    ?LEN(stroka)
    =strToF(m.stroka,"my4-4.pdf")
    ?=pdfToStr("C:\Users\User\Documents\Visual FoxPro Projects\EE.pdf",1)
    Ratings: 0 negative/0 positive
  • Re: djvu в image
    sphinx

    Сообщений: 31402
    Откуда: Каменск-Уральски
    Дата регистрации: 22.11.2006
    Миш, дак ты КОНСТРУКТИВНУЮ критику, не бла-бла-бла.... Корниенко и ждет ее. Он допилит, уверен.

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

    Не прав?


    ------------------
    "Veni, vidi, vici!"(с)
    Ratings: 0 negative/0 positive
    Re: djvu в image
    kornienko_ru

    Сообщений: 235
    Откуда: Владивосток
    Дата регистрации: 06.09.2015
    Вообще-то с самого начала (с первой версии) стоял оператор file() для проверки наличия файла. Кроме того я ввел проверку на наличие страниц в файле. О какой еще проверке на наличие вы, Михаил, говорите? Из вашего сообщения не ясно, как раздувается файл. Как это проверить, если вы выводите только определенные страницы. Я не вижу раздутия. Возможно у вас не последняя версия, т.к. я 09.05.2024 заливал prg на githab 2 раза. Повторяю ваш тест:
    ? len(fileToStr("DD.pdf")) && результат 311800
    ? pdfToStr("DD.pdf") && результат 3
    ? len(pdfToStr("DD.pdf",1,3)) && результат 288838 (раздутия нет, наоборот, файл уменьшился)
    ? len(pdfToStr("DD.pdf",4)) && результат 5033, в файле только заголовочная часть без страниц,
    && т.к. только 3 страницы. Сделаю, чтобы выдавалась пустая строка
    ? len(pdfToStr("DD.pdf",1)) && результат 233783
    ? len(pdfToStr("DD.pdf",2)) && результат 280640
    ? len(pdfToStr("DD.pdf",3)) && результат 275281
    ? pdfToStr("EE.pdf") && файла нет, результат пустая строка (сделаю, чтобы без
    && параметров страниц, выдавался -1, типа файла нет)
    Но на документации по описанию формата pdf (в очень больших pdf) я обнаружил, что prg не правильно ищет страницы. Это от того, что у этих больших файлов очень большая вложенность страничного объекта. Я предусмотрел по лени 1 уровень вложенности. Сегодня переделаю на многократную вложенность этого объекта, напишу для него специальную рекурсивную функцию. Это пока одна критичная недоработка. Если зашифрована таблица перекрестных ссылок, включается медленный режим, таблица восстанавливается. Ну а если зашифрован страничный объект, я пока не знаю, что делать в отличие от некоторых существующих просмоторщиков. Возможно у их разработчиков есть соглашения с компанией Adobe на раскрытие алгоритма шифрования или это какие-то известные алгоритмы.... тогда подскажите Хотя с другой стороны, я сам формирую pdf, которые в последствии использую, поэтому не применяю никакую шифрацию, мне это не надо. Думаю, вряд ли это кому-нибудь надо. А если очень надо можно сконвертировать через эти же программы в pdf без шифрации, как вариант.
    Ratings: 0 negative/0 positive
    Re: djvu в image
    sphinx

    Сообщений: 31402
    Откуда: Каменск-Уральски
    Дата регистрации: 22.11.2006
    Цитата:
    Разница - во времени дешифровки.

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


    ------------------
    "Veni, vidi, vici!"(с)
    Ratings: 0 negative/0 positive
    Re: djvu в image
    kornienko_ru

    Сообщений: 235
    Откуда: Владивосток
    Дата регистрации: 06.09.2015
    Александр К,
    я решил у яндекса спросить про шифрацию и нашел некую библиотеку, которая может быть использована для pdf, включая шифрацию, ту которая присутствует в файлах Михаила. Она же очень широко распространена по очень многим pdf. Но с библиотеками я не очень дружу, делаю всё больше сам. Если кому интересно, попробуйте использовать через Declare. Скачать набор библиотек для разных ОС по ссылке:
    sourceforge.net

    P/S библиоnека z.lib предназначена для различных действий с pdf.



    Исправлено 1 раз(а). Последнее : kornienko_ru, 10.05.24 13:29
    Ratings: 0 negative/0 positive
    Re: djvu в image
    lemenev

    Сообщений: 136
    Дата регистрации: 23.06.2022
    kornienko_ru
    О какой еще проверке на наличие вы, Михаил, говорите?

    Уважаемый kornienko!
    Вы только не обижайтесь, но вот небольшой ликбез по тестированию программ.
    Если в вашем случае есть три входных параметра pdf, n1, n2, то программа должна проверять что:
    1. передан хотя бы один параметр
    2. pdf – символьного типа
    3. файл, на который ссылается переменная pdf, существует
    4. файл, на который ссылается переменная pdf, имеет структуру PDF, а не Word или Zip. Файл могли переименовать, дав ему расширение .pdf
    5. если задан второй параметр, то он числового типа
    6. n1 должен укладываться в диапазон от 1 до максимального номера страницы в файле
    7. если задан третий параметр, то он числового типа
    8. n2 должен укладываться в диапазон от n1 до максимального номера страницы в файле


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



    Исправлено 1 раз(а). Последнее : lemenev, 10.05.24 18:15
    Ratings: 0 negative/1 positive
    Re: djvu в image
    kornienko_ru

    Сообщений: 235
    Откуда: Владивосток
    Дата регистрации: 06.09.2015
    Уважаемый Михаил. Вы только не обижайтесь. Может вам полы помыть? Мне такие проверки лично не нужны, поскольку в моем комплексе такие ситуации, как другие типы входных переменных никогда не встретятся. При предоставлении программ обычно указывается, что продукт предоставляется в "том виде, как есть". Если вам надо проверить, что там может оказаться формат Word или еще, что-то ничего вам не запрещает перед вызовом все проверить. Я так и понял, что вы тролите, вам эта программа по сути не нужна. Но то, что я заметил по существу, я на днях доделаю. Например, то что в VFP массивы большого размера создаются, но не работают. Я планирую массивы заменить на курсор. Например, обработка pdf с 250 тыс. объектов на VFP зависает.



    Исправлено 1 раз(а). Последнее : kornienko_ru, 15.05.24 16:21
    Ratings: 0 negative/0 positive
    Re: djvu в image
    lemenev

    Сообщений: 136
    Дата регистрации: 23.06.2022
    Здесь на форуме хамство не приветствуется.
    Я с хамами не общаюсь.
    Ratings: 0 negative/0 positive
    Re: djvu в image
    krin

    Сообщений: 174
    Дата регистрации: 08.02.2005
    уважаемый kornienko_ru, благодарю за проделанную вами работу, педантичность и подробные комментарии. при необходимости воспользуюсь.
    Ratings: 0 negative/0 positive
    Re: djvu в image
    kornienko_ru

    Сообщений: 235
    Откуда: Владивосток
    Дата регистрации: 06.09.2015
    lemenev
    Уважаемый kornienko!
    Вы только не обижайтесь, но вот небольшой ликбез по тестированию программ.
    Если в вашем случае есть три входных параметра pdf, n1, n2, то программа должна проверять что:
    1. передан хотя бы один параметр
    2. pdf – символьного типа
    3. файл, на который ссылается переменная pdf, существует
    4. файл, на который ссылается переменная pdf, имеет структуру PDF, а не Word или Zip. Файл могли переименовать, дав ему расширение .pdf
    5. если задан второй параметр, то он числового типа
    6. n1 должен укладываться в диапазон от 1 до максимального номера страницы в файле
    7. если задан третий параметр, то он числового типа
    8. n2 должен укладываться в диапазон от n1 до максимального номера страницы в файле


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

    Михаил, а ваша реплика, с которой вы сюда зашли не хамство? А вам уже говорили, чтобы вы конструктивнее писали, а не обтекаемо. По конкретней. Вот, к примеру, ваши 8 пунктов по существу сводятся к одному, 1 равно 2 — чтобы тип первого параметра имя файла было текстовым. Т.к. если совсем не задать тмя файла, переменная "имя файла" будет создана, даже в этом случае, просто её тип будет логическим. Сколько здесь не приводили разных решений, но такого еще не было, чтобы проверять то, чего быть не может. Например, функция Пивы, которую недавно опубликовал сам модератор, о дате в формате UTC. Ну давайте не быть идиотами. Если вы пишите в тексте своей программы функцию без параметров, там, где по предназначению должна на входе быть строка, как вы вообще тогда пишете программы....
    Ratings: 0 negative/0 positive
    Re: djvu в image
    sphinx

    Сообщений: 31402
    Откуда: Каменск-Уральски
    Дата регистрации: 22.11.2006
    Цитата:
    Но с библиотеками я не очень дружу, делаю всё больше сам.

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

    P.S. Паша писал РЕПО-код. Исправился. РЕПРО - от репродукция. РЕПО - это с финансами, нагуглите точное определение.


    ------------------
    "Veni, vidi, vici!"(с)
    Ratings: 0 negative/0 positive


    Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

    On-line: 12 (Гостей: 12)

    © 2000-2024 Fox Club 
    Яндекс.Метрика