Почему при объединении страниц PDF с CGContextDrawPDFPage создаются очень большие выходные файлы? - PullRequest
2 голосов
/ 23 июня 2010

Я столкнулся с этим, пытаясь собрать простой скрипт Automator для объединения нескольких одностраничных PDF-файлов. У меня было 88 файлов для объединения, каждый примерно по 300 КБ, поэтому я ожидал, что конечный продукт будет около 30 МБ; результирующий файл PDF с использованием действия «Объединить PDF-файлы» имел размер 300 + МБ.

В действии Automator используется сценарий Python с привязками Foundation для создания нового документа PDF с API-интерфейсами CoreGraphics PDF. Ничто не кажется неуместным. По сути, он делает это (упрощенно, но это основные моменты):

writeContext = CGPDFContextCreateWithURL(outURL, None, None)
for url in inURLs:
    doc = CGPDFDocumentCreateWithURL(url)
    page = CGPDFDocumentGetPage(doc, 1)
    mediaBox = CGPDFPageGetBoxRect(page, kCGPDFMediaBox)
    CGContextBeginPage(writeContext, mediaBox)
    CGContextDrawPDFPage(writeContext, page)
    CGContextEndPage(writeContext)
CGPDFContextClose(writeContext)

Я не могу себе представить, что CGContextDrawPDFPage, при рисовании в контексте PDF, будет делать что угодно, только не копировать данные PDF для этой страницы (с некоторыми изменениями окна).

Даже при «объединении» только одного PDF-файла размер файла составляет 2,8 МБ по сравнению с оригинальным одностраничным PDF-файлом объемом 300 КБ.

Полученные PDF-файлы выглядят точно так же постранично, как и исходные страницы: текст выбирается в тех же местах, графика выглядит одинаково, страницы имеют одинаковый размер.

Есть идеи?

1 Ответ

0 голосов
/ 23 июня 2010

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

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