Как обрезать каждую страницу в формате PDF с помощью PDFBOX в Java?

Я хочу удалить нижнюю часть каждой страницы в PDF, но не изменить размер страницы, как это рекомендуется сделать в java в PDFBOX? Как удалить нижний колонтитул с каждой страницы в PDF?

Есть ли способ использовать PDRectangle, чтобы просто удалить весь текст/изображения внутри него?

фрагмент того, что я пробовал, использование прямоугольника с setCropBox, кажется, теряет размер страницы, может быть, cropBox не предназначен для этого?

            PDRectangle rectangle = new PDRectangle();
            rectangle.setUpperRightY(mypage.findCropBox().getUpperRightY());
            rectangle.setLowerLeftY(50);
            rectangle.setUpperRightX(mypage.findCropBox().getUpperRightX());
            rectangle.setLowerLeftX(mypage.findCropBox().getLowerLeftX());                  
            mypage.setCropBox(rectangle);
            croppedDoc.addPage(mypage);
            croppedDoc.save(filename);              
            croppedDoc.close();

Ближайший пример в примерах поваренной книги pdfbox, который я смог найти, касается того, как удалить всю страницу, однако это не то, что я ищу, я хотел бы просто удалить несколько элементов со страницы: http://pdfbox.apache.org/userguide/cookbook.html


person Ville M    schedule 12.09.2012    source источник
comment
Почему -1? Я не вижу никаких комментариев, хотя бы объясните, почему это неправильный вопрос, или укажите на другие вопросы или источники?   -  person Ville M    schedule 12.09.2012
comment
Я согласен, что человек, который проголосовал за это, мог оставить комментарий. Однако одна из возможных причин может быть связана с самим вашим вопросом - то, что вы написали, не показывает никаких ваших собственных исследований. Возможно, вы хотите попробовать что-то новое или, если у вас уже есть, сообщите нам о своих препятствиях, и тогда, возможно, люди здесь смогут вам помочь. Всегда полезно показать что вы пробовали   -  person Sujay    schedule 12.09.2012
comment
Хорошо, вот еще немного предыстории. В основном я просмотрел API в поисках функции, что-то вроде клипа, который я использовал в прошлом (в pdflib), также просмотрел примеры кулинарной книги и не нашел пример, который охватывает обрезку страницы. Я вижу, что есть что-то под названием Cropbox, но я не был уверен, как именно это должно использоваться, и моя попытка использовать его привела к изменению размера страницы. Поскольку и в pdflib, и в iText есть четкие примеры обрезки/обрезки, я подумал, что, может быть, у кого-нибудь будет аналогичный пример для pdfbox.   -  person Ville M    schedule 13.09.2012
comment
Я думаю, было бы полезно, если бы вы отредактировали сам вопрос и всю эту информацию как часть самого вашего вопроса.   -  person Sujay    schedule 13.09.2012
comment
stackoverflow.com/questions/6831194/   -  person Alvin Pradeep    schedule 20.09.2012
comment
: кадрирование, обрезка, ссылка: prepression.com/pdf/basics/page_boxes. Пытаться   -  person Alvin Pradeep    schedule 20.09.2012
comment
спасибо, я посмотрел на этот вопрос, по какой-то причине удаление кода imamges в этом примере не будет работать с логотипами в нижнем колонтитуле моего pdf, в любом случае, теперь я думаю об использовании PDFStreamParser и удалении токенов, которые соответствуют определенным правилам   -  person Ville M    schedule 21.09.2012


Ответы (2)


Я тоже новичок, но взгляните на эту страницу, в частности, на Описание ТримБокс. Если на странице нет TrimBox, по умолчанию используется CropBox, что может привести к тому, что вы видите.

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

person Ed Staub    schedule 14.09.2012
comment
Спасибо за подсказку по поводу trimBox, я попытался установить его, пока не повезло, все равно получаю тот же результат, т.е. после того, как я установил прямоугольник, установил тримбокс и обрезку, сохранил, документ обрезал нижний колонтитул, но теперь он больше не имеет размер буквы. Если я затем восстановлю размер до буквы (mypage.setTrimBox (PDPage.PAGE_SIZE_LETTER)), нижний колонтитул вернется. Кажется, должна быть функция, позволяющая сделать новый размер постоянным, или возможность удалять вещи, которых нет внутри cropBox/trimBox. В любом случае, я буду продолжать играть с этими коробками, спасибо - person Ville M; 15.09.2012
comment
@VilleM - MediaBox установлен? Мне интересно, если при первом сохранении по умолчанию используется CropBox. См. также раздел 14.11.2 (стр. 627) документа спецификация для мозгового штурма новых идей. - person Ed Staub; 15.09.2012
comment
см. мой комментарий об отладке вывода ниже, в следующем ответе кажется, что все эти другие измерения игнорируются, хотя я их устанавливаю, кажется, что имеет значение только cropBox - person Ville M; 18.09.2012

CropBox — это то, что вам нужно, если вы хотите удалить часть страницы, оставив видимой прямоугольную область. Если вы хотите, чтобы размер страницы оставался прежним, вам нужно, чтобы MediaBox оставался прежним.

Из спецификации PDF:

CropBox — прямоугольник (необязательно; наследуемый) Прямоугольник, выраженный в единицах пользовательского пространства по умолчанию, определяющий видимую область пользовательского пространства по умолчанию. Когда страница отображается или печатается, ее содержимое должно быть обрезано (обрезано) до этого прямоугольника, а затем наложено на носитель вывода некоторым образом, определяемым реализацией (см. Раздел 10.10.1, «Границы страниц»). Значение по умолчанию: значение MediaBox.

MediaBox — прямоугольник (обязательно; наследуется) Прямоугольник (см. Раздел 3.8.4, «Прямоугольники»), выраженный в единицах пользовательского пространства по умолчанию, определяющий границы физического носителя, на котором должна размещаться страница. отображаться или распечатываться (см. Раздел 10.10.1, «Границы страниц»).

Если вы видели (неисправные) приложения и библиотеки, которые заставляют CropBox и MediaBox быть одинаковыми, дважды проверьте, что это не то, что происходит в вашем случае.

Также примите во внимание, что начало координат (0,0) в PDF - это нижний левый угол, некоторые библиотеки делают перевод в верхний левый для вас, некоторые другие нет, вы также можете дважды проверить это в библиотеке, которую вы используют.

person yms    schedule 17.09.2012
comment
ОК, спасибо, я думаю, вы можете быть правы, возможно, PDFbox не работает в соответствии со спецификацией, которую вы описали выше, я установил для кадрирования мой обрезанный прямоугольник, я установил для медиабокса размер LETTER, и тем не менее полученный PDF-файл обрезается, но размер 11x7 .64, т.е. изменился размер страницы. mypage.setCropBox (прямоугольник); mypage.setMediaBox(PDPage.PAGE_SIZE_LETTER); Далее я попытаюсь выполнить отладку более подробно. - person Ville M; 18.09.2012
comment
Вот некоторые выходные данные отладки, я думаю, что Adobe Acrobat должен отображать это в размере LETTER, но это не так, похоже, что все остальные размеры игнорируются, кроме кадрирования: :612.0 новый CroppBox:550.0 новый mediabox:612.0 новый trimBox:612.0 новый bleedBox:612.0 - person Ville M; 18.09.2012
comment
Можете ли вы опубликовать ссылку на старый файл и новый файл? У меня нет готовой среды разработки Java, но я мог бы почерпнуть некоторые идеи, просмотрев эти файлы. - person yms; 18.09.2012
comment
спасибо за предложение, но извините, я не могу поделиться ими из-за содержащихся в них данных, в любом случае, теперь я думаю об использовании PDFStreamParser и удалении токенов, соответствующих определенным правилам, вместо использованияcropBox, так как я не могу заставить его делать то, что Я хотел бы. - person Ville M; 21.09.2012
comment
@Ville M Вам не нужно присылать мне свои производственные файлы, подойдет любой PDF-файл, обработанный вашим приложением, который показывает проблему. - person yms; 21.09.2012