我需要将PDF页面的内容旋转任意角度,然后旋转PDF页面。setRotation(int)命令限制为90度的倍数。页面的内容是矢量和文本,我需要能够在以后放大内容,这意味着我无法将页面转换为图像,因为分辨率降低。
请阅读ISO-32000-1(这是PDF的ISO标准),更具体地说是表30(“页面对象中的条目”)。它像这样定义了Rotate
条目(文字复制/粘贴):
显示或打印页面时顺时针旋转的度数。该值应为90的倍数。默认值:0。
每当ISO标准使用“应”一词时,您都会遇到一条规范性规则(与标准使用“应”一词时相反,在这种情况下,您会遇到一条建议)。
简言之:您提出的问题是PDF规范明确禁止的。满足您的要求在PDF中是不可能的。页面的方向可以是0、90、180或270度。您必须旋转页面上的内容,而不是旋转页面。
评论中已经指出,要以任意角度在新的常规纵向或横向页面上绘制一些内容,例如现有的常规纵向或横向页面,可以使用此答案中提供的机制。
正如此处所示的代码
不过,这里有一个快速
这种方法
void transformPage(PDDocument document, PDPage page, AffineTransform at) throws IOException, COSVisitorException
{
PDRectangle cropBox = page.findCropBox();
float xOffset = (cropBox.getUpperRightX() + cropBox.getLowerLeftX()) / 2f;
float yOffset = (cropBox.getUpperRightY() + cropBox.getLowerLeftY()) / 2f;
AffineTransform transform = AffineTransform.getTranslateInstance(xOffset, yOffset);
transform.concatenate(at);
transform.concatenate(AffineTransform.getTranslateInstance(-xOffset, -yOffset));
PDPageContentStream stream = new PDPageContentStream(document, page, true, false);
stream.concatenate2CTM(transform);
stream.close();
COSBase contents = page.getCOSDictionary().getDictionaryObject(COSName.CONTENTS);
if (contents instanceof COSStreamArray)
{
COSStreamArray contentsArray = (COSStreamArray) contents;
COSArray newArray = new COSArray();
newArray.add(contentsArray.get(contentsArray.getStreamCount() - 1));
for (int i = 0; i < contentsArray.getStreamCount() - 1; i++)
{
newArray.add(contentsArray.get(i));
}
COSStreamArray newStreamArray = new COSStreamArray(newArray);
page.getCOSDictionary().setItem(COSName.CONTENTS, newStreamArray);
}
}
将给定转换应用于给定页面。为了使手头的用例(旋转PDF页面的内容)更容易,转换包含在翻译中,将坐标系的原点移动到转换页面的中心。
方法可以这样使用
try ( InputStream sourceStream = getClass().getResourceAsStream("13.pdf") )
{
final PDDocument document = PDDocument.load(sourceStream);
final AffineTransform transform = AffineTransform.getRotateInstance(Math.PI / 4);
List<PDPage> pages = document.getDocumentCatalog().getAllPages();
for (PDPage page: pages)
{
transformPage(document, page, transform);
}
document.save("13-transformedPages.pdf");
}
将文档的页面逆时针旋转45°(PI/4,数学上为正旋转方向)。
我想生产一个PDF的网页在景观。虽然可以使用以下方法将页面大小设置为横向: 这并没有达到我想要的,因为我添加的任何内容仍然是面向左->右的,而我希望它是底部->顶部的。 即。这就是我得到的: 我已经能够实现所需的输出打开PDF后,它已经创建并使用iText旋转它,但我想要一个解决方案,让我旋转后立即与iText添加内容。
我有一个22*17的PDF文件,我需要它来适应11*8.5的页面内容。 基本上减小了现有的页面大小。我正在使用断章。 我该怎么做?
本文向大家介绍Unity实现绕任意轴任意角度旋转向量,包括了Unity实现绕任意轴任意角度旋转向量的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Unity实现绕任意轴任意角度旋转向量的具体代码,供大家参考,具体内容如下 游戏中有一需求,就是一个矩形或者Cube绕着某一点旋转任意角度,现在给出下面算法。 测试用例 效果图 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大
我尝试使用iTextSharp创建一个多页pdf文档。我有一个包含自身方向(横向或纵向)的对象。当第一个对象包含需要横向模式的信息时,我用< code > Document doc = new Document(PageSize。A4.Rotate(),10f,10f,10f,0f)。这工作得很好,直到下一个元素是肖像模式!如果一个元素处于纵向模式,我再次设置页面大小:< code>doc。Set
我从供应商那里收到单页pdf文件的邮资标签。这些标签可以贴在A5纸上,但它们在A4纸上是纵向的,也是纵向的。我希望能够在A4纸上打印两个这样的标签,以减少浪费。 这可以通过旋转页面内容而不旋转页面本身来实现。或者通过交换内容的高度和宽度来调整页面的大小。我知道这两种情况都会导致内容丢失,但这对于我的用例来说不是问题。理想情况下,我希望命令行应用程序既可以在Linux机器上运行,也可以在Window
本文向大家介绍java实现图片无损任意角度旋转,包括了java实现图片无损任意角度旋转的使用技巧和注意事项,需要的朋友参考一下 前言 在做项目的时候遇到一个业务需要对图片进行旋转,于是找到一个工具类,亲测有效;在此与大家共享,需要用时可以直接用哈! 实战 一、旋转工具类代码: 二、调用工具类的代码: 三、效果 1、被旋转的图片: 2、顺时针旋转90度图片: 3、顺时针旋转180度图片: 4、顺时针