Сокращение ресурсов ваших объектов страницы
Ну, я думаю, что ваша текущая задача намного проще, чем то, что вы просите в своем вопросе. Я истолковываю ваши
Я использую эту технику , чтобы экспортировать acroform в новый файл PDF из другого исходного файла PDF.
означает, что вы действительно просто хотите перенести поля и функции AcroForm из одного PDF-файла в другой и не заинтересованы в статическом содержимом страницы исходного файла.
Таким образом, ответ на вопрос, какие ресурсы вы фактически используете , прост: Нет ! Ресурсы страницы - это ресурсы, используемые в статическом контенте (в потоке контента страницы), который вас не интересует.
Таким образом, нет необходимости сначала копировать ресурсы страницы в новый документ, просто удалите строку
documentDest.getPage(pageIndex).setResources(page.getResources());
из кода в ссылочном ответе.
В качестве отступления: @Tilman уже заметил в комментарии к ответу, который вы использовали в качестве шаблона, что интересующие вас ресурсы - это "ресурсы по умолчанию для акроформы", а не ресурсы страницы . Таким образом, вы можете не только скопировать поля между PDAcroForm
экземплярами:
acroFormDest.setFields(acroFormSrc.getFields());
, но также ресурсы по умолчанию, внешний вид по умолчанию и четырехугольник по умолчанию
acroFormDest.setDefaultAppearance(acroFormSrc.getDefaultAppearance());
acroFormDest.setDefaultResources(acroFormSrc.getDefaultResources());
acroFormDest.setQ(acroFormSrc.getQ());
Другие вопросы
Аннотации со ссылкой на неправильную страницу
На этот раз форма без ресурсов - 73Ko, а мой оригинальный PDF - 75Ko.
Если заглянуть немного глубже в ваш "form-without-resources.pdf", проблема становится понятной:
Как видите, аннотации виджетов в вашем поле указывают на неправильную страницу!
Это значение P указано как
P
толковый словарь
(Не обязательно, за исключением случаев, указанных ниже; PDF 1.3; не используется в файлах FDF) Косвенная ссылка на объект страницы, с которым связана эта аннотация.
(ISO 32000-1, Таблица 164 - Записи, общие для всех словарей аннотаций)
Таким образом, вы устанавливаете аннотации вашей целевой страницы на аннотации исходной страницы, но эти аннотации в их значении P все еще ссылаются на исходную страницу. Как следствие, вы перетаскиваете исходную страницу со всем ее ресурсом в новый документ по этой ссылке. Так что совсем не удивительно, что ваш файл результатов не меньше вашего источника.
Если вы измените свой код для исправления ссылок P , например, как это:
int pageIndex = 0;
for (PDPage page : documentSrc.getPages()) {
PDPage destPage = documentDest.getPage(pageIndex);
destPage.setAnnotations(page.getAnnotations());
for (PDAnnotation annotation : destPage.getAnnotations())
annotation.setPage(destPage);
// after disabling this size increase
//documentDest.getPage(pageIndex).setResources(page.getResources());
pageIndex++;
}
( CopyForm test testCopyLikeBeeImproved
)
вы потеряете эти ссылки на старые данные.