我正在使用一堆PDF文件,其中一些已经过一定程度的扫描。 Adobe Acrobat允许我将PDF文件旋转90度或180度。但有没有办法将PDF旋转几度 - 刚好足以让它更直?
我可以截取屏幕截图,在Photoshop中打开它并旋转它,然后以某种方式将Photoshop文件转换为PDF。然而,这似乎是一个非常笨拙的过程。
答案 0 :(得分:3)
PDF仅支持90度的完整页 /Rotate
值,因为这当然是简单的。您需要做的是旋转内容,而不是页面。因此,您需要使用可以为您重制PDF文件的内容。
您可以使用Ghostscript或MuPDF来执行此操作。要么需要一些编码:
使用Ghostscript你需要定义一个BeginPage
程序,它将内容旋转一小部分并稍微移动内容的原点(因为旋转围绕原点旋转,因为它位于左下角,而不是中心)。
答案 1 :(得分:2)
这是一个用于旋转页面的简短实用程序脚本(用Perl编写)。它将输入PDF的每个页面转换为PDF XObject表单,旋转表单,然后输出旋转的页面。
#! /usr/bin/perl
use warnings; use strict;
use PDF::API2;
use Getopt::Long;
my $degrees = 3;
my $scale = 1.0;
my $x = 0;
my $y = 0;
GetOptions ("rotate=i" => \$degrees, "scale=f" => \$scale, "x=f" => \$x, "y=f" => \$y)
or die "usage: $0 IN_PDF OUT_PDF --rotate=DEG --scale=ALPHA --x=POINTS --y=POINTS";
my $infile = shift (@ARGV);
my $outfile = shift (@ARGV);
my $pdf_in = PDF::API2->open($infile);
my $pdf_out = PDF::API2->new;
foreach my $pagenum (1 .. $pdf_in->pages) {
my $page_in = $pdf_in->openpage($pagenum);
#
# create a new page
#
my $page_out = $pdf_out->page(0);
my @mbox = $page_in->get_mediabox;
$page_out->mediabox(@mbox);
my $xo = $pdf_out->importPageIntoForm($pdf_in, $pagenum);
#
# lay up the input page in the output page
# note that you can adjust the position and scale, if required
#
my $gfx = $page_out->gfx;
$gfx->rotate($degrees);
$gfx->formimage($xo, $x, $y, $scale);
}
$pdf_out->saveas($outfile);
您需要确保从CPAN安装PDF::API2
和Geopt::Long
模块。
默认情况下,脚本逆时针旋转3度,这可以通过--rotate
选项进行配置。
还有-x
,-y
和--scale
个选项,可以微调输出页面的位置和比例。
答案 2 :(得分:0)
unix.stackexchange.com也曾问过这个问题。
另一个选择是使用LaTeX:
\documentclass{standalone}
\usepackage{graphicx}
\begin{document}
\includegraphics[angle=-1.5]{odd-scan}
\end{document}
在这种情况下,我将文件odd-scan.pdf
(稍作旋转的一页扫描)与具有上面内容的LaTeX文件rotated.tex
放在同一文件夹中,然后运行pdflatex rotated.tex
。输出为文件rotated.pdf
,PDF顺时针旋转1.5度。
答案 3 :(得分:-1)
我曾经有过这个。我不知道你有多少页。 我所做的是打印磨损的页面,使用切纸机对它们进行平方并重新扫描它们。希望这可以帮助。 是的,我试图找到一些类型的程序来解决这个问题,我仍然没有找到一个。