Какие-либо предложения для уменьшения файла PDF?

Это зависит от того, является ли это короткой или длинной строкой:

std::string a_string = a + a;
// reassign a new string to a_string
a_string = b + b + b; 

Во-первых, a + a создается непосредственно как a_string благодаря гарантированной копии elison (c ++ 17) , Здесь не происходит освобождения.

Затем, если a_string достаточно короткий, он размещается в стеке без дополнительных распределений кучи. Эта оптимизация коротких строк (SSO) выполняется большинством компиляторов, но не обязана стандартом.

Если SSO имел место, то это не освобождает место в a_string, а просто использует его повторно. Память уходит в никуда:

a_string = b + b + b; 

Однако, если a_string слишком длинный для SSO, то эта строка освобождает пространство кучи, выделенное для строки.

Ясно видеть, куда уходит память, когда проверяется объявление std::string :

template< 
   class CharT,
   class Traits = std::char_traits,
   class Allocator = std::allocator
> class basic_string;
blockquote>

Память строка без единого входа выделяется и освобождается с помощью std::allocator. Этот распределитель распределяет и освобождает память с помощью операторов new и delete. Обычно они используют malloc / free за кулисами. Так работает malloc и free.

Легко узнать, насколько большой может быть строка SSO, запустив

std::cout << std::string().capacity() << '\n';

Для clang 8.0.0 на 64-битном Intel SSO для строк длиной до 22 символов, а для gcc 8.3 - только 15 символов.

10
задан Community 23 May 2017 в 11:46
поделиться

10 ответов

Используйте Ghostscript, который также доступен для платформ Windows на 64 бита и на 32 бита. Это распознает все параметры Adobe Distiller [1] и соблюдает большинство из них. Вдобавок ко всему, можно ввести программы PostScript в процесс преобразования. Я использую его в течение года теперь в продуктивной среде перед печатью на тяжелом изображением PDFs. Если параметры устанавливаются корректные, размер файла может пойти от 40 МБ вниз к 800 КБ без видимой потери качества. Я нашел, что это было довольно быстро, на самом деле документация указывает, что это может быть быстрее, чем Adobe Distiller.

И это свободно (как в пиве, а также в речи).

[1] См. distparm.pdf в папке справки Производителя алкогольной продукции или взгляда здесь.

Как Вы используете его

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

Быстрый пример:

gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite\
   -dCompatibilityLevel=1.3 -dEncodeColorImages=true\
   -sOutputFile=output.pdf input.pdf

Некоторые ценные ресурсы:

17
ответ дан 3 December 2019 в 18:00
поделиться

Существует несколько разновидностей PDF с различными компромиссами функциональности размера. При преобразовании основанных на тексте документов (слово/Excel/и т.д.) по сравнению с документами изображения (TIFF/JPG/BMP/etc) затем, оно, вероятно, объяснило бы меньшие размеры файла, которые производитель алкогольной продукции дает Вам. Необходимо удостовериться, что утилита только создает файлы PDF Только для изображения (который обычно намного больше) из всего. Также формат сжатия очень важен СПЕЦИАЛЬНО ДЛЯ цветных документов. Ищите параметры конфигурации, которые позволяют Вам настраивать те настройки. Если Вы упоминаете определенного разработчика PDF инструмент, мы смогли давать Вам более определенную справку на этом.

Вот достойная ссылка на "разновидностях" файлов PDF:

2
ответ дан 3 December 2019 в 18:00
поделиться

Зарегистрировать ошибку с производителем Вашей библиотеки PDF? Если это - открытый исходный код, зафиксируйте несколько низко висящих плодов (существуют, вероятно, многие), и отправьте патч?

0
ответ дан 3 December 2019 в 18:00
поделиться

Apago имеют много инструментов для 'уборки' PDFs

http://www.apagoinc.com/

1
ответ дан 3 December 2019 в 18:00
поделиться

PDF обычно использует JBIG/JBIG2/JPEG2000 сжатие. PDFCompressor Cvision является лучшим для сжатия PDF.

2
ответ дан 3 December 2019 в 18:00
поделиться

У меня нет определенного ответа на Ваш вопрос, таким образом, я надеюсь, что мой ответ не является плохой формой.

Я использовал pdftk для множества СВЯЗАННЫХ С PDF задач. Это просто в использовании от оболочки, и я вижу, что это действительно имеет функцию сжатия. Вы могли испытать его быстро, чтобы видеть, является ли это что-то, что работало бы на обработку сообщения для Вашего приложения.

0
ответ дан 3 December 2019 в 18:00
поделиться

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

Как в стороне, Ваш веб-сервер позволяет HTTP gzipped содержание? Прозрачный конечному пользователю!

(Однако короткие файлы PDF должны быть довольно непроницаемы для большинства методов сжатия - изображения должны быть сжаты во время рендеринга (и JPEG>> ZIP в этом случае) - но если у Вас есть много текста, gzip может помочь),

0
ответ дан 3 December 2019 в 18:00
поделиться

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

0
ответ дан 3 December 2019 в 18:00
поделиться

Не включайте все шрифты в PDF. Заботиться о том может сохранить несколько мегабайтов.

0
ответ дан 3 December 2019 в 18:00
поделиться

Если Ваша библиотека PDF делает субоптимальный PDFs, затем загружающийся, и сохраняющий PDF в любой другой библиотеке должен дать Вам меньшие файлы. PDFNet, которым Тип 3 SDK должен быть до этой задачи и на уровне 360 долларов США, является более дешевым, чем библиотека Adobe PDF.

0
ответ дан 3 December 2019 в 18:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: