Разделите страницу PDF формата А4 на две страницы А5 и снова - PullRequest
2 голосов
/ 21 июня 2010

У меня есть PDF со страницами формата А4. Каждая страница содержит две идентичные страницы формата A5 для печати. В моей Java-программе я хочу разделить эти страницы и использовать каждую уникальную страницу A5 от нуля до нескольких раз в качестве шаблона для добавления / замены некоторого текста. После этого я хочу снова приклеить страницы формата A5 к страницам формата A4 (по тем же причинам, что и при печати).

Пример: использовать страницу один три раза и страницу два один раз.

  • Разделить страницы. (И выбрасывать одинаковые правильные страницы А5)
  • Создайте три копии первой страницы и одну копию второй страницы.
  • Добавить / заменить текст.
  • Склейте страницы, чтобы получить две страницы формата А4. Первый с первыми двумя «страницами», а второй с третьей «первой страницей» и единственной «второй страницей».

Это должно быть возможно? Не должно ли это? Я думаю об использовании iText. Но если у кого-то есть другие рекомендации, я с радостью передумаю по этому поводу.

Ответы [ 3 ]

4 голосов
/ 03 июня 2015

Возможно менее неуклюжее решение для записи, использующее pdfjam связанные биты.Если test.pdf является альбомным документом формата А4, который нужно разбить на портрет A5:

1) извлечь левые полстраницы

pdfcrop --bbox "0 0 421 595" --clip --papersize "a5" test.pdf test-left.pdf

Примечание.

2) извлечь правые полстраницы:

pdfcrop --bbox "421 0 842 595" --clip --papersize "a5" test.pdf test-right.pdf

3) сопоставить страницы по желанию, например

pdfjoin test-left.pdf test-right.pdf "1" --outfile test-collated.pdf

4) reglue:

pdfnup --nup 2x1 test-collated.pdf --a4paper --outfile test-done.pdf
2 голосов
/ 26 июля 2010

Однажды я сделал что-то подобное с camlpdf . В моем случае у меня был PDF, где физическая страница формата А4 состояла из двух логических страниц формата A5, и я хотел получить обычный файл PDF со страницами формата A5 (то есть, когда логическая и физическая страница были одинаковыми).

Это было в OCaml (camlpdf также существует для F #), и мой код был следующим:

let pdf = Pdfread.pdf_of_file None in_file ;;

let pdf =
  let (pdf,_perms) = Pdfcrypt.decrypt_pdf "" pdf in
  match pdf with
  | Some pdf -> pdf
  | None -> failwith "Could not decrypt"
;;

let pdf = Pdfmarks.remove_bookmarks pdf ;;

let pages = Pdfdoc.pages_of_pagetree pdf ;;

let pages = List.fold_right (fun page acc ->
  let (y1,x1,y2,x2) = Pdf.parse_rectangle page.Pdfdoc.mediabox in
  let box y1 x1 y2 x2 = Pdf.Array
    [ Pdf.Real y1; Pdf.Real x1; Pdf.Real y2; Pdf.Real x2 ]
  in
  let xm = x1 *. 0.5 +. x2 *. 0.5 in
  let pagel = {page with Pdfdoc.mediabox = box y1 x1 y2 xm}
  and pager = {page with Pdfdoc.mediabox = box y1 xm y2 x2}
  in pagel::pager::acc
) pages [] ;;

let pdf = Pdfdoc.change_pages false pdf pages ;;

Pdf.remove_unreferenced pdf ;;

Pdfwrite.pdf_to_file pdf out_file ;;

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

  1. Прочитать и (необязательно) расшифровать pdf
  2. Удалить закладки (необязательно)
  3. Получить страницы из дерева страниц
  4. Манипулирование страницами: вы можете переставлять, дублировать и удалять страницы, а также можете изменять их медиабоксы (ограничивающие рамки); этого должно быть достаточно для вашей цели?
  5. Реконструкция документа с новыми страницами
  6. Удалите объекты без ссылок (например, сборщик мусора)
  7. Запишите полученный PDF
0 голосов
/ 26 июля 2010

Попробуйте библиотеку iText http://itextpdf.com/. Вы можете использовать существующий PDF-файл для шаблона, редактировать, поворачивать и разделять существующие документы.Полезные образцы вы можете найти здесь: http://www.1t3xt.info/examples/browse/

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