Ios UIGraphicsBeginPDFContextToFile基于区域设置更正页面大小
在我的应用程序中,我生成了pdf(以后可以打印或发送) 我找不到合适的方法来确定纸张的尺寸:Ios UIGraphicsBeginPDFContextToFile基于区域设置更正页面大小,ios,swift,pdf,printing,Ios,Swift,Pdf,Printing,在我的应用程序中,我生成了pdf(以后可以打印或发送) 我找不到合适的方法来确定纸张的尺寸: UIGraphicsBeginPDFContextToFile(pdfURL().path, CGRectZero, nil) 默认情况下,创建pdfANSI A(612.0792.0),这对美国和加拿大(+更多国家)来说是可以的,但对于其他国家,它应该是ISO216 A4(595842) 基本上我需要iOS版本的: NSPrintInfo.sharedPrintInfo().paperSiz
UIGraphicsBeginPDFContextToFile(pdfURL().path, CGRectZero, nil)
默认情况下,创建pdfANSI A(612.0792.0),这对美国和加拿大(+更多国家)来说是可以的,但对于其他国家,它应该是ISO216 A4(595842)
基本上我需要iOS版本的:
NSPrintInfo.sharedPrintInfo().paperSize
我是否遗漏了什么,或者在iOS上唯一的方法就是手动检查区域设置?解决方案:
由于美国字母(ANSI A)仅在北美、玻利维亚、哥伦比亚、巴拿马、委内瑞拉、菲律宾、哥斯达黎加和智利使用。我们可以从我们当前的语言环境中提取国家代码,然后检查它是否在这些国家的列表中
SWIFT 3(延期):
扩展NSLocale{
结构标准页面维度{
静态let ANSI_A=CGSize(宽:612,高:792)
静态let ANSI_B=CGSize(宽:792,高:1224)
静态let ANSI_C=CGSize(宽:1584,高:1224)
静态let ANSI_D=CGSize(宽:2448,高:1584)
静态let ANSI_E=CGSize(宽:3168,高:2448)
静态let ISO216_A0=CGSize(宽:2384,高:3370)
静态let ISO216_A1=CGSize(宽:1684,高:2384)
静态let ISO216_A2=CGSize(宽:1190,高:1684)
静态let ISO216_A3=CGSize(宽:842,高:1190)
静态let ISO216_A4=CGSize(宽:595,高:842)
静态let ISO216_A5=CGSize(宽:420,高:595)
静态let ISO216_A6=CGSize(宽:298,高:420)
静态let ISO216_A7=CGSize(宽:210,高:298)
静态let ISO216_A8=CGSize(宽:148,高:210)
}
静态let ANSI_A_国家/地区:Set=[“美国”、“加拿大”、“墨西哥”、“古巴”、“DO”、“GT”、“CR”、“SV”、“HN”、“BO”、“CO”、“VE”、“PH”、“CL”]
//如果要使用区域设置,请使用regionCode
静态函数defaultPaperSize()->CGSize{
让locale=self.current
返回ANSI_A_Countries.contains(locale.regionCode???)?StandardPageDimensions.ANSI_A:StandardPageDimensions.ISO216_A4
}
//否则强制转换为NSLocale
//静态函数defaultPaperSize()->CGSize{
//让locale=self.current作为NSLocale
//将ANSI_A_Countries.contains(locale.object(forKey:NSLocale.Key.countryCode)返回为!String)?StandardPageDimensions.ANSI_A:StandardPageDimensions.ISO216_A4
// }
}
我没有使用Locale.currencyCode的原因是因为currencyCode并不总是等于CountryCode。
ISO 3166-2!=ISO 4217
您可能需要更新ANSI\U A\U国家/地区以匹配ISO的货币。
例如玻利维亚、波利维亚诺国家()
)ISO代码指定为BO,但货币代码只有BOL
SWIFT 2:
struct StandardPageDimensions {
static let ANSI_A = CGSizeMake(612,792)
static let ANSI_B = CGSizeMake(792,1224)
static let ANSI_C = CGSizeMake(1584,1224)
static let ANSI_D = CGSizeMake(2448,1584)
static let ANSI_E = CGSizeMake(3168,2448)
static let ISO216_A0 = CGSizeMake(2384,3370)
static let ISO216_A1 = CGSizeMake(1684,2384)
static let ISO216_A2 = CGSizeMake(1190,1684)
static let ISO216_A3 = CGSizeMake(842,1190)
static let ISO216_A4 = CGSizeMake(595,842)
static let ISO216_A5 = CGSizeMake(420,595)
static let ISO216_A6 = CGSizeMake(298,420)
static let ISO216_A7 = CGSizeMake(210,298)
static let ISO216_A8 = CGSizeMake(148,210)
}
let ANSI_A_Countries : Set<String> = ["US","CA","MX","CU","DO","GT","CR","SV","HN","BO","CO","VE","PH","CL"]
func defaultSizeForCurrentLocale()->CGSize {
let locale = NSLocale.currentLocale()
return ANSI_A_Countries.contains( locale.objectForKey(NSLocaleCountryCode) as! String ) ? StandardPageDimensions.ANSI_A : StandardPageDimensions.ISO216_A4
}
struct-StandardPageDimensions{
静态let ANSI_A=CGSizeMake(612792)
静态let ANSI_B=CGSizeMake(7921224)
静态let ANSI_C=CGSizeMake(15841224)
静态let ANSI_D=CGSizeMake(24481584)
静态let ANSI_E=CGSizeMake(31682448)
静态let ISO216_A0=CGSizeMake(23843370)
静态let ISO216_A1=CGSizeMake(16842384)
静态let ISO216_A2=CGSizeMake(11901684)
静态let ISO216_A3=CGSizeMake(8421190)
静态let ISO216_A4=CGSizeMake(595842)
静态let ISO216_A5=CGSizeMake(420595)
静态let ISO216_A6=CGSizeMake(298420)
静态let ISO216_A7=CGSizeMake(210298)
静态let ISO216_A8=CGSizeMake(148210)
}
让ANSI_A_国家/地区:Set=[“美国”、“加拿大”、“墨西哥”、“古巴”、“DO”、“GT”、“CR”、“SV”、“HN”、“BO”、“CO”、“VE”、“PH”、“CL”]
func defaultSizeForCurrentLocale()->CGSize{
让locale=NSLocale.currentLocale()
返回ANSI_A_Countries.contains(locale.objectForKey(NSLocaleCountryCode)as!String)?StandardPageDimensions.ANSI_A:StandardPageDimensions.ISO216_A4
}
检查bestPaper.paperSize.width
和bestPaper.paperSize.height
,您将获得基于当前区域的本地化结果:
美国:612x792
,这是美国字母
联合王国:595.2756 x 841.8898
,即A4
请注意,没有文档记录指定空页面大小和空纸张列表将生成此默认值,但我看到的就是这种行为。您是否尝试在其他语言环境中运行该应用程序?是的,我始终使用612.0和792.0。正如Apple documentations所说的UIGraphicsBeginPDFContextToFile bounds:一个指定PDF页面默认大小和位置的矩形。(此值用作每个新页面的默认媒体框。)矩形的原点通常应为(0,0)。指定空矩形(CGRectZero)会将默认页面大小设置为8.5 x 11英寸(612 x 792点)。您可能需要进行本地化操作以检查其区域设置:-(,我确信有更好的方法,但我无能为力,抱歉。无论如何,谢谢。本地化检查是我目前的功能。我将等待,看看是否有人有其他解决方案。我认为这个答案是关于这个主题的正确答案。问题是,本地化设置建议的纸张大小是多少?答案是国家静态的,请让ANSI_A_国家:Set=[“US”、“CA”、“MX”、“CU”、“DO”、“GT”、“CR”、“SV”、“HN”、“BO”、“CO”、“VE”、“PH”、“CL”]是间接假设,用户不可选择。设置首选纸张大小布局是操作系统区域设置功能,而不是应用程序作业。如果操作系统区域设置功能不提供用户界面以让用户了解,则不是应用程序的责任,而是操作系统的责任。我们不能让应用程序作为解决方案覆盖操作系统?问题出在哪里“没有文件证明指定空白页面大小和空白纸张列表将生成此默认值,但我看到的是这种行为”,这是操作系统供应商的文件问题,在这里,这不是操作系统供应商的责任
struct StandardPageDimensions {
static let ANSI_A = CGSizeMake(612,792)
static let ANSI_B = CGSizeMake(792,1224)
static let ANSI_C = CGSizeMake(1584,1224)
static let ANSI_D = CGSizeMake(2448,1584)
static let ANSI_E = CGSizeMake(3168,2448)
static let ISO216_A0 = CGSizeMake(2384,3370)
static let ISO216_A1 = CGSizeMake(1684,2384)
static let ISO216_A2 = CGSizeMake(1190,1684)
static let ISO216_A3 = CGSizeMake(842,1190)
static let ISO216_A4 = CGSizeMake(595,842)
static let ISO216_A5 = CGSizeMake(420,595)
static let ISO216_A6 = CGSizeMake(298,420)
static let ISO216_A7 = CGSizeMake(210,298)
static let ISO216_A8 = CGSizeMake(148,210)
}
let ANSI_A_Countries : Set<String> = ["US","CA","MX","CU","DO","GT","CR","SV","HN","BO","CO","VE","PH","CL"]
func defaultSizeForCurrentLocale()->CGSize {
let locale = NSLocale.currentLocale()
return ANSI_A_Countries.contains( locale.objectForKey(NSLocaleCountryCode) as! String ) ? StandardPageDimensions.ANSI_A : StandardPageDimensions.ISO216_A4
}
let bestPaper = UIPrintPaper.bestPaper(forPageSize: CGSize.zero, withPapersFrom: [])