LINUX.ORG.RU

Склейка росыпи pdf в одно pdf-блобище

 , , ,


0

1

охото время склейки заасимптотить к времени копирования исходного набора это очевидная оценка с низу

и второе при склейке (а по факту формирования выходного pdf-ища) - что бы очередные добавленные куски валились на диск а не отжирало всю ram -

ибо склейка в 1 терабайтный pdf (при некотором безумии сей затеи) привозит пробуксовку(ни дня без нового словио)(thrashing) ежель не flush уже зачитанные части

вооот

крч есть чё? верхний скрипт можно и питон но ч>т из увиденных библиотек всё сначала пихуется в озу что огорчает pdf вроде как же типо контейнерный тип и по факту тока дерево достаточно в памяти для навигации сами куски

да и вообще прилепление нового мелкого файла к уже имеющемуся комку оно квадратично что-ли деградирует?



Последнее исправление: qulinxao3 (всего исправлений: 3)

Смотря под какой лицухой. Есть бодрый mupdf, но там дуал, если это не «для себя» то платить. Если pdfium и биндинги к пистону. Если podofo, биндинги сделать легко но весь файл в память высасывает и медленный на больших файлах шопесец

Попробуй первые два, они вроде могут потоком читать/писать

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от upcFrost

Предвкушаю амбивалентно ныряние в формат структуры pdf - всякие флатены укуренные

вопрос упирается по факту как флашить смерженное в процессе докидывания очередных кусочков

что pymupdf что pypdf2 отжирают память(озу) в размере 70%-130% исходного набора (конечного файла)

блин как по басурмански поточная склейка? пока не выгугливается :(

qulinxao3
() автор топика
Ответ на: комментарий от qulinxao3

что pymupdf что pypdf2 отжирают память(озу) в размере 70%-130% исходного набора

Второе да, а первое - странно. Он точно умел с потоком работать. На англ ищи streaming. Pdfium тоже точно умел, вернее там смотря как напишешь write, если в пистоне то ctypes и буфер.

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

upcFrost ★★★★★
()

А вообще можешь попробовать хитрое решение - набей эти файлы в portfolio. Тут правда придётся немного покрасноглазить ибо portfolio ни одна свободная софтина из коробки не умеет (надо создавать словать под это дело), но в этом случае у тебя будет натурально файл с файлами, который и на чтение быстрый, и на запись.

upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost

фроде циклится по грязному doc.inser_pdf(next);doc.saveIncr();doc.close();doc.«reopen» оно - память «ровно» размер очередного кусочка - но :( из за закрытия открытия и прочего получается медленней когда памяти на весь блоб достаточно - выгрыш тока когда итоговый приближается к размеру оперативы

qulinxao3
() автор топика
Ответ на: комментарий от upcFrost

эээ оно список файлов эдак 100к спортфелит?

пока вроде как зогдачка на две части - как не гоняя сами файлы сшить их словари(т.е построить переводы из старых словарей в итоговый) и финальным проходом с новым словарём всё «заинкрементить»

пока хватает быстрой памяти узкое место чтение запись при билде мегаpdf

когда же память заведомо недостаточно

saveIncr - но оно каждый раз при сохраниние по факту добилдивет словарь и когда ид>т следующий чанк то по ходу проходит линейно во размазанному словарю что да>т линейное замедление вроде как

забавно насколько тонок слой цивилизации если достаточно обычная задача на чуть больших величинах деградирует на отличненько

qulinxao3
() автор топика
Ответ на: комментарий от qulinxao3

эээ оно список файлов эдак 100к спортфелит?

Хз, в стандарте ограничений на этот счёт емнип нету. Но конечно можно нарваться на переполнение где-нибудь

пока вроде как зогдачка на две части - как не гоняя сами файлы сшить их словари(т.е построить переводы из старых словарей в итоговый) и финальным проходом с новым словарём всё «заинкрементить»

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

В общем (ключевое слово - общем) случае склейка пдф страница за страницей, по опыту, это путь в никуда, это реально очень сложно даже без оптимизации по памяти. И библиотеки как ты понимаешь пытаются реализовать именно общий случай.

Портфолио придумали именно для этого, потому что скажем эцп тупо запрещает тебе сшивать файлы. Плюс в этом случае у тебя вместо одного плоского xtef table на 100500 позиций будет 100500 вложенных файлов со сравнительно небольшими таблицами. Реально, попробуй этот вариант, может взлетит

upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost

это если и было то в до PDF 1.5

ща спокойно merge - одно повторюсь не удобно так как «файловая структура» по факту размазывается по итоговому файлу - по происходит квадратичное замедление ибо при обьединение словарей происходит его линейное сканирование - не охота нырять в си-реализации что-бы получить ускорение чисто на задачах слияния при подобных файлах

охото чисто подёргать либы = пока лучшим вариантов (из 3ех) оказалась mupdf

вдруг есть ч> для слияния более быстрое и заточенное на большие многотысячестроничные файлы?

зы/ портфолио не подходит :(

1Тб это чисто в идеале по факту итоговый файл будет врядли больше 64G - получается при текущих реализациях при синтезе такого файлы жетально от 128G рамы для минимизации свапа

qulinxao3
() автор топика
Ответ на: комментарий от qulinxao3

Более быстрого нет, чисто из-за сложности открытия pdf «в общем виде». Там есть тонны optional и by-default вещей которые даже в стандарте особо не фигурируют, их можно найти только закидыванием файла в акробат, сохранением и изучением в каком-нибудь itext

upcFrost ★★★★★
()