首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >支持旋转的CGPDF drawPDFPage

支持旋转的CGPDF drawPDFPage
EN

Stack Overflow用户
提问于 2017-01-04 04:35:03
回答 2查看 509关注 0票数 1

我在iOS 10下用CGPDF保存了一个PDF文件,为此我加载了一个已有的PDF页面,并将其写入一个带有上下文的新文件中。这样做时,旋转信息会丢失,生成的PDF文件的所有页面都会以0°重新排列。

代码语言:javascript
复制
let writeContext: CGContext = CGContext(finalPDFURL, mediaBox: nil, nil)!

// Loop through all pages
let page: CGPDFPage = ...
var mediaBox = page.getBoxRect(.mediaBox)
writeContext.beginPage(mediaBox: &mediaBox)
writeContext.drawPDFPage(page)
writeContext.endPage()
// Loop finished

writeContext.closePDF()

然后我想出了这段代码,它可以很好地处理旋转,但似乎绘制的内容有轻微的偏移。在PDF中使用它,如果PDF中包含文本或任何接近页边距的内容,则会导致内容中断。后来还尝试了在pageInfo字典上设置x,y等,但我猜我误解了这里的一些东西,请参见下面的第二个问题。

代码语言:javascript
复制
let page: CGPDFPage = ...

// Set the rotation
var pageDict = [String: Int32]()
pageDict["Rotate"] = CGFloat.init(page.rotationAngle)

writeContext.beginPDFPage(pageDict as CFDictionary?)
writeContext.drawPDFPage(page)
writeContext.endPDFPage()

所以我的问题是,

1)如何使用第一种方法,但支持旋转?或者第二个,但不裁剪内容?

2)在哪里可以找到此方法所有可用的pageInfo键-值对的完整列表?https://developer.apple.com/reference/coregraphics/cgcontext/1456578-beginpdfpage

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2020-11-18 12:03:12

这个问题很老了,但希望下面的答案对将来的人有用。它将保留原始PDF页面的旋转信息

  1. 如何使用第一种方法,但支持旋转?

代码语言:javascript
复制
let writeContext: CGContext = CGContext(finalPDFURL, mediaBox: nil, nil)!

// Loop through all pages
let page: CGPDFPage = ...
var mediaBox = page.getBoxRect(.mediaBox)
writeContext.beginPage(mediaBox: &mediaBox)

let m = page.getDrawingTransform(.mediaBox, rect: mediaBox, rotate: 0, preserveAspectRatio: true)

// Following 3 lines makes the rotations so that the page look in the right direction
writeContext.translateBy(x: 0.0, y: mediaBox.size.height)
writeContext.scaleBy(x: 1, y: -1)
writeContext.concatenate(m)

writeContext.drawPDFPage(page)
writeContext.endPage()
// Loop finished

writeContext.closePDF()
票数 0
EN

Stack Overflow用户

发布于 2017-07-27 05:24:47

我从一位iOS程序员那里得到了反馈,他建议遵循以下原则:

这三个步骤应该允许您在保持页面旋转字段的同时,在目标中重新创建原始页面:(1)通过页面字典在目标页面中设置源页面旋转,(2)设置该旋转(或者可能的旋转* -1?)在您要绘制的CGContext中,最后(3)明确设置目标中的媒体框与源媒体框相同(没有旋转)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41451900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档