PDFLib в PHP перебирает ресурсы, а не сбрасывает их в файл - PullRequest
3 голосов
/ 05 июня 2009

Я только что унаследовал PHP-проект, который генерирует большие PDF-файлы и обычно задыхается после нескольких тысяч страниц и нескольких гигабайт серверной памяти. Проект использовал PDFLib для генерации этих файлов «в памяти».

Мне было поручено исправить это, поэтому первым делом я отправил вывод PDFLib в файл, а не встраивал в память. Проблема в том, что он все еще строит память PDF-файлов. И большая часть памяти никогда не возвращается в ОС. В конце концов, все это задыхается и умирает.

Когда я задаю программе создание только фрагментов больших PDF-файлов, кажется, что данные не полностью сбрасываются в файл в end_document (). Я не получаю ошибок, но PDF не читается, и открытие его в шестнадцатеричном редакторе делает очевидным, что поток не завершен.

Я надеюсь, что кто-то испытывал подобные трудности.

Ответы [ 2 ]

2 голосов
/ 06 июня 2009

Решено! Необходимо вызывать PDF_delete_textflow () для каждого текстового потока, поскольку они получают область документа и не уходят до тех пор, пока документ не будет закрыт, чего никогда не было, поскольку до этого момента вся доступная память была исчерпана.

1 голос
/ 05 июня 2009

Вы должны убедиться, что закрываете каждую страницу, а также закрываете документ. Это можно сделать, вызвав end_page_ext в конце каждой написанной страницы.

Кроме того, если вы импортируете страницы из другого PDF, вы должны вызывать «close_pdi_page» после каждой страницы с ошибками и «close_pdi_document», когда вы закончите с каждым импортированным документом.

...