Ghostscript многостраничный PDF в PNG
Я использовал ghostscript, чтобы сделать PDF для создания изображений одной страницы из PDF. Теперь мне нужно иметь возможность извлечь несколько страниц из PDF и создать длинное вертикальное изображение.
Есть ли аргумент, который я пропускаю, который позволил бы это?
Пока я использую следующие аргументы при вызове ghostscript:
string[] args ={
"-q",
"-dQUIET",
"-dPARANOIDSAFER", // Run this command in safe mode
"-dBATCH", // Keep gs from going into interactive mode
"-dNOPAUSE", // Do not prompt and pause for each page
"-dNOPROMPT", // Disable prompts for user interaction
"-dFirstPage="+start,
"-dLastPage="+stop,
"-sDEVICE=png16m",
"-dTextAlphaBits=4",
"-dGraphicsAlphaBits=4",
"-r300x300",
// Set the input and output files
String.Format("-sOutputFile={0}", tempFile),
originalPdfFile
};
3 ответа
В итоге я добавил "%d" в параметр "OutputFile", чтобы он генерировал один файл на страницу. Затем я просто прочитал все файлы и соединил их в своем коде на C# так:
var images =pdf.GetPreview(1,8); //All of the individual images read in one per file
using (Bitmap b = new Bitmap(images[0].Width, images.Sum(img=>img.Height))) {
using (var g = Graphics.FromImage(b)) {
for (int i = 0; i < images.Count; i++) {
g.DrawImageUnscaled(images[i], 0, images.Take(i).Sum(img=>img.Height));
}
}
//Do Stuff
}
Если вы можете использовать ImageMagick, вы можете использовать одну из ее хороших команд:
montage -mode Concatenate -tile 1x -density 144 -type Grayscale input.pdf output.png
где
-density 144
определяет разрешение в dpi, увеличьте его, если необходимо, по умолчанию 72-type Grayscale
используйте его, если в вашем PDF нет цветов, вы сохраните несколько килобайт в полученном изображении
Сначала проверьте параметры устройства вывода; но я не думаю, что есть вариант для этого.
Скорее всего, вам нужно будет выполнить наложение самостоятельно, либо заставить GhostScript сделать это (вам придется написать программу на PostScript), либо сшить получившиеся отрисованные страницы с помощью ImageMagick или чего-то подобного.
Если вы хотите попробовать маршрут PostScript (вероятно, наиболее эффективный), проверьте примеры N-up, включенные в пакет GhostScript.