Может ли Mathematica создавать многостраничные PDF-файлы?

#pdf #wolfram-mathematica

#PDF #wolfram-mathematica

Вопрос:

Когда кто-то импортирует многостраничный PDF-файл (файл, который я имею в виду, содержит изображения иллюстраций, по одному на страницу) в Mathematica 8.0.1 с помощью

книга = Импорт[«simple.pdf»]

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

Экспорт[«DistortedSimple.pdf», distortedbook]

результирующий файл содержит все изображения на одной странице. Есть ли удобный способ экспортировать список изображений в PDF, по одному на страницу?

Ответ №1:

(Привет, Кевин!)

Я только что оценил:

 Print[ExampleData[#]] amp; /@ Take[ExampleData["TestImage"], 6]

Export["Desktop/Kevin.pdf", EvaluationNotebook[]]
 

используя версию 8.0.1 для OS X, полученный PDF-файл был разделен на четыре страницы. Поэтому я думаю, что вам лучше всего (программно) создать записную книжку с вашими измененными изображениями и экспортировать эту записную книжку.

Комментарии:

1. Привет, Бретт, давно не виделись! Это помещает его в файл, но результирующий файл на самом деле не подходит для отображения в классе (или на kindle). Мне нужно больше постраничного управления…

2. @Sjoerd Я просто еще не сделал 8.0.4 версией Mathematica в моем доке.

Ответ №2:

Кажется, это невозможно Export , независимо от того, сколько я играю с Pages элементом (кроме решений на основе ноутбуков, предлагаемых другими).

Альтернативой является установка pdftk (относительно небольшого инструмента командной строки, который мы будем использовать для сборки страниц) и использование следующей функции Mathematica:

 exportMultipagePDF[name_String, g_List, options___] :=
  Module[
    {fileNames, quote},
    quote[s_] := """ <> s <> """;
    fileNames = 
      Table[
        FileNameJoin[{$TemporaryDirectory, "mmapage" <> IntegerString[i] <> ".pdf"}],
        {i, Length[g]}
      ];
    Check[
      Export[#1, #2, "PDF", options] amp; @@@ Thread[{fileNames, g}], 
      Return[$Failed]
    ];
    If[
      Run["pdftk", Sequence @@ (quote /@ fileNames), "cat output", name] =!= 0,
      Return[$Failed]
    ];
    DeleteFile /@ fileNames;
  ]
 

В Windows мне нужно было заключать имена файлов в кавычки, прежде чем передавать их в PDFtk. Я не знаю о других платформах, надеюсь, это не вызовет никаких проблем.

Попробуйте с

 exportMultipagePDF["test.pdf", Table[Graphics[{Hue[x], Disk[]}], {x, 0, 1, .2}]]
 

Комментарии:

1. С философской точки зрения мне больше всего нравится этот подход, но он возвращает $Failed (из команды Run, которая сама возвращает 32512). Я на Mac OS X 10.6…

2. @Kevin, он все равно создает PDF-файл? Вы установили pdftk и можете запустить его из командной строки?

3. @Kevin Определите printCommand[s___String] := (Print@StringJoin@Riffle[{s}, " "]; 0) и замените Run в моем коде на printCommand (никаких других изменений не требуется). При этом будет выведена точная команда, используемая для вызова pdftk , которую затем можно отладить. Одна из возможностей заключается в том, что командная строка слишком длинная (слишком много страниц), что мы можем попытаться исправить, не добавляя полный временный каталог к каждому имени файла, а вместо этого выполняя обработку внутри временного каталога. Или, может быть, OS X не любит / не нуждается в кавычках?

4. Если я вырезаю и вставляю вывод pf printCommand в терминал, создается нужный PDF-файл (в любом случае, ваш тестовый файл на 6 страниц; работает как с кавычками, так и без них). Но вырезать и вставить в команду запуска, и файл не создается, а возвращается 32512.

5. @Kevin Я понятия не имею, почему… это работает в Windows. Я попробую на Linux, когда у меня будет такая возможность. Здесь нет компьютеров Mac…

Ответ №3:

Попробуйте сохранить записную книжку в формате PDF, а не экспортировать набор ячеек в формате PDF.

Редактировать:

Чтобы убедиться, что у вас есть разрывы страниц там, где вы хотите, настройте Screen Environment на печать (вы можете сделать это с помощью команды меню или программно) и вставьте разрывы страниц с помощью соответствующей команды меню. Эта страница руководства может быть полезной.

Из вашего комментария кажется, что вам нужно установить ImageSize параметр для преобразованного изображения, чтобы убедиться, что оно имеет желаемый размер при отображении на экране.

Комментарии:

1. Это работает, но не совсем удовлетворительно. Изображения маленькие, поэтому я теряю контроль над нумерацией страниц (я бы хотел, чтобы новое изображение и старое изображение были на одном и том же номере страницы для каждого сравнения). Кроме того, при просмотре pdf в полноэкранном режиме изображение масштабируется не до экрана (как в исходном файле), а до страницы. Это оставляет искаженное изображение крошечным.

2. @Kevino’Bryant вы можете исправить это, вставив разрывы страниц там, где вы хотите, и соответствующим образом масштабируя графику. Я добавлю еще несколько деталей к своему ответу, чтобы уточнить.

3. Одна вещь, которую я не могу проверить (не рядом с установкой Mathematica прямо сейчас), — это работает ли программная NotebookSave команда для сохранения в формате PDF. ссылка. wolfram.com/mathematica/ref/NotebookSave.html