壓縮PDF爲了將它們存儲到數據庫中之前壓縮上傳PDF格式的文件,我有這樣的代碼在mojolicious控制器:忽略臨時文件時使用Ghostscript
# if > 100k compress with gs
my $pdf;
if ($size > 100_000) {
# create tmp-file to be read by gs
my $tmp_fn = '/tmp/badb_pdf_input.pdf';
$file->move_to("$tmp_fn");
use Capture::Tiny 'capture';
my ($stdout, $stderr, $exit) = capture {
my $cmd = '/usr/local/bin/gs';
my @args = (qw(-sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=-)) ;
push @args, $tmp_fn;
system($cmd, @args) == 0
or die "system @args failed: $!"
};
die "ERROR compressing pdf: $stderr" if $stderr;
unlink $tmp_fn;
$pdf = $stdout;
} else {
$pdf = $file->slurp;
}
有誰知道的方式,以避免輸入的臨時文件(/tmp/badb_pdf_input.pdf)?
感謝您花時間解釋基礎!因此,將一些PDF編入ghostscript當然是不可能的。 (例如'cat mayflle.pdf | ghostscript ...'是不行的,由於PDF文件的性質,它將永遠不會工作) – lanti
它可以工作,但是GS在幕後會做的事情是將stdin輸入到一個臨時文件在磁盤上,因爲正如你所說,這是PDF文件的性質,你必須在裏面尋找。 – KenS