在不改变方向的情况下旋转 PDF

Posted

技术标签:

【中文标题】在不改变方向的情况下旋转 PDF【英文标题】:Rotate a PDF without changing orientation 【发布时间】:2013-10-25 13:27:54 【问题描述】:

虽然我的问题主题似乎是许多 PDF 操作包和工具的良好支持功能,但我需要明确表示我不想旋转 PDF。

我有一个 PDF,它显示纵向 (A4),尺寸为 WxH 297x210(A4 旋转)。

现在,我需要实现的是,此 PDF 在保留尺寸的同时具有横向。

我不确定这需要我做什么。

如果我使用 Adob​​e Illustrator 将文档格式更改为所需位置,我还需要旋转内容。如果我将此页面放入设计不佳的 PDF 中,则此页面上的表单域和所有注释仍然是纵向的。

如何旋转它们以匹配新的页面方向?这种任务似乎没有工具支持。

感谢您的支持!

托马斯

【问题讨论】:

我真的不明白你想要什么 :) 还有其他人吗? @maf-soft 在 PDF 中,页面的尺寸由矩形和旋转角度给出。如果您想要 A4 横向,您可以使用 297x210 矩形且不旋转(或 180°)或 210x297 矩形和 90° 或 270° 旋转。 OP 似乎有一种方式,需要另一种方式。我还没有具体方式的要求。因此,不幸的是,我不知道任何工具可以提供帮助。 此问题仅在打印时出现。使用包括 ghostscript 的工具链将 PDF 创建为 PS 文件。生成的 PS 文件直接发送到打印机。在这种情况下,打印机无法识别文件应旋转以适合页面大小,并像纵向一样打印 A4 横向格式并切断右侧三分之一。 【参考方案1】:

尚不完全清楚您想要什么,但我认为您可能想要更改查看旋转,反向旋转内容和页面尺寸以进行补偿。

在这种情况下,CPDF command line tools 可以这样做:

cpdf -upright in.pdf -o out.pdf

这将使查看旋转为 0,旋转内容并更改页面尺寸以进行补偿。然后,您可以根据需要更改查看旋转

cpdf -rotate <angle> in.pdf -o out.pdf

(绝对)或

cpdf -rotate-by <angle> in.pdf -o out.pdf

(相对)其中&lt;angle&gt;0, 90, 180, 270, 360

如果这还不够,你还有

cpdf -rotate-contents <angle> in.pdf -o out.pdf

其中是顺时针旋转的度数,并且

cpdf -mediabox "minx miny width height" in.pdf -o out.pdf

【讨论】:

您好,我不知道您的提议是否能达到同样的目的。我将发布我为解决它所做的工作,但如果这也能解决它,我愿意给你点赞:首先,我在 Adob​​e Illustrator 中创建了新页面,带有方向横向而不旋转。然后,我将原始 PDF 的内容复制到了横向文件中。为了适应页面,必须旋转内容。然后我在 Adob​​e Acrobat Pro 中加载了损坏的 PDF,用新创建的页面替换了所有页面。现在所有字段仍然旋转。我使用 javascript 来修复它。 好的,我用你提到的方法尝试了 cpdf。 “直立”似乎可以解决我在下面用 Illustrator 所做的事情!我明天需要对此进行测试,这似乎是使 PDF 达到预期方向的最快方法。这些字段没有被修复,我的 JavaScript 仍然是必需的。【参考方案2】:

您可以使用FoxitReader。它是免费的吗?它有一个功能 HOME -> ROTATE VIEW,可以做你想要的。

【讨论】:

正如我所说,旋转 PDF 没有帮助。旋转时,它可以正确打印,但生成的图像现在是纵向的。我只需要改变方向。但是,页面中的所有元素仍然保持旋转并与布局成 90° 角。【参考方案3】:

首先我修复了 PDF。

看来, cpdf -upright 也可以解决这个问题。如果由于商业用途而无法使用 cpdf,您可以使用 Adob​​e Illustrator 所示的手动方法。

cpdf 没有更正 Acrofields 方向,也没有更正 pdf 中的注释。我不得不重新创建注释。可以使用 JavaScript 修复 Acrofields,如下所示。

    在 Adob​​e Illustrator 中打开 PDF 对文档的每一页重复 1..n,在以下步骤中当前页为“x”: 在 A4 横向模式下创建一个新文档,确保大小正好是 297x210 (WxH)!
      在 Illustrator 中打开 PDF 页面 x 使用复制/粘贴功能将第 x 页的所有元素复制到新文档中 使用Object/Transform/Rotate旋转到直角,通常需要-90°或+90° 将旋转的对象放置在页面上以符合您的期望 将文档另存为“page-x.pdf” 关闭 PDF 页面 x 重复下一页直到完成...
    打开 Acrobat X 将单页-....pdf 合并为一个大 PDF。如果您对此不确定,请查看在线文档。不要乱页顺序! 打开损坏的 PDF 用新名称保存 打开页面工具,选择“替换页面”功能。 选择合并的 PDF 作为页面源,并将损坏的 PDF 中的所有页面替换为合并 PDF 中的固定页面。 您应该看到田野,与它们应该在的位置成 90° 角

然后我在 Acrobat Pro 中使用 PDF JavaScript 修复了 Acrofields。

    打开 Javascript 控制台。

    输入以下脚本:

    var box = getPageBox();
    var  w = box[2] - box[0];
    var  h = box[1] - box[3]; 
    // left,top         right,bottom
    // bottom, h-left     top, h-right
    for(i=0; i<numFields; i++) 
        var f = getField(getNthFieldName(i));
        var orig = f.rect;
        f.rect = [orig[3], h-orig[0], orig[1], h-orig[2]];
        f.rotation = 0;
    
    

    要执行,请突出显示脚本并按 ENTER 键,而不是 RETURN。 ENTER 键是键盘上的输入键。这将执行突出显示的 JavaScript。表单域将旋转 +90°,并且应该放置在几乎正确的位置,但至少靠近它们应该在的位置。

    浏览所有页面,选择页面上的所有字段,然后将所有字段一起移动到正确的位置。

【讨论】:

以上是关于在不改变方向的情况下旋转 PDF的主要内容,如果未能解决你的问题,请参考以下文章

如何在不锁定活动方向的情况下锁定片段方向?

如何在不旋转设备的情况下单击按钮更改设备方向

Python:在不依赖枕头库的情况下旋转图像?

如何在不产生 y 旋转抖动的情况下统一使用触摸输入来钳制游戏对象的 z 旋转

如何在没有活动旋转的情况下旋转活动内的片段?

在不影响导航栏的情况下更改 NavigationController 的内容视图宽度