一周后,我很确定这是不可能完成的,但我想我会付出最后的努力。
我有一个调用的API,它在response.result.value中返回一个数据对象。该数据是一个完整的PDF文件。例如,如果我用Postman调用API,然后单击保存结果,我可以使用任何PDF查看器打开保存的文件。
现在,既然我是viewController中的数据对象,我就可以调用data.write( to : pdfURL)并将文件写入我指定的URL。
此时PDF仍然很好,我可以打印那个URL,然后在查找器中定位该文件,然后再用任何PDF查看器查看它,没有问题。
问题出在这里。最后,我想把PDF文件发送到一个小标签打印机,在打印机中的标签是2“宽,1”高。我从API获得的PDF文件,创建了8.5“x11”大小的PDF。
因此,当它打印在标签上时,它会缩小文件以适应标签,使标签上的文本和图像变得如此小,以至于无法读取。
我不能改变来自API的PDF。我不能再改变打印机上的设置了。
唯一的机会,我必须“放大”这是改变文件或页的PDF文件的大小。
我尝试过获取写入磁盘的文件的句柄,然后得到它的页面,然后设置它的界限。
但这一页只是空白。我知道PDF以x=0开头,y=0位于左下角,所以我使用这两种方法作为页面大小:
let page = CGRect(x: 0, y: 0, width: 85, height: 40)
let page = CGRect(x: 472, y: 707, width: 85, height: 40)
guard let data = response.result.value else {
print("Did not get PDF data from API")
return
}
let page = CGRect(x: 472, y: 707, width: 85, height: 40)
let documentURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let fileName = "shelfTag.pdf"
let pdfURL = documentURL.appendingPathComponent("\(fileName)")
do {
print(pdfURL)
try data.write(to: pdfURL)
} catch {
print("Couldn't write PDF to file.)
}
if #available(iOS 11.0, *) {
let pdfDocument = PDFDocument(url: pdfURL)
let pdfPage = pdfDocument?.page(at: 0)
pdfPage?.setBounds(page, for: .mediaBox)
pdfDocument?.write(toFile: pdfURL.path)
} else {
// Fallback on earlier versions
}要么图像和文本太小而无法阅读,要么打印的标签只是空白。
发布于 2019-09-04 21:26:29
iOS中的PDF功能有限。如果您可以访问PDF上的数据,可以使用这些类重新创建所需大小的PDF。https://developer.apple.com/documentation/uikit/1623915-uigraphicsbeginpdfpagewithinfo?language=objc
另一个选择是使用像Foxit这样的第三方应用程序。也许你可以使用一个免费的版本。
不幸的是,没有简单的答案!
发布于 2020-07-06 16:48:54
这在我看来很有前途:https://github.com/prachigauriar/ResizePDF
作者这样描述它:"resizepdf是macOS的一个工具,可以调整PDF的大小!它是用Swift编写的,非常简单。它没有外部依赖。“
在我对它的简单实验中,我发现尽管它是一个作为命令行工具的Mac应用程序,但我认为它可以很容易地迁移到iOS。
我发现这个应用程序很好用,但是一些小错误使它无法马上运行。(在启动时运行的测试查找的文件名与资产具有的文件名不同。在资产上匹配该名称以获得成功。没有必要将应用程序作为命令行工具运行--在Xcode中运行时,它会启动一个测试任务。)
https://stackoverflow.com/questions/57719771
复制相似问题