TLDR:如果您打印的内容UIWebView
包含HTML
由文本对齐的元素组成的内容right
/ center
,则生成的文档的页面将具有意外大的底部边距。
我遇到了这个问题,当我无法用谷歌搜索任何有类似问题的人时,我感到非常惊讶。我已经向苹果 (#20760071) 提交了一份雷达文件,并且还在GitHub 存储库上创建了一个问题ResearchKit
,因为这会影响他们的ORKHTMLPDFWriter
.
AFAIK 这也会影响所有UIWebView
用于转换HTML
为的库PDF
,我已经测试过:
我想知道是否有人可以提出一些解决方法。
如何重现:
NSMutableString* html = [NSMutableString string];
[html appendString:@"<html><body>"];
for (int i=0; i<200; i++) {
[html appendString:@"<div align=\"right\">line</div>"];
}
[html appendString:@"</body></html>"];
UIPrintInteractionController* pc = [UIPrintInteractionController sharedPrintController];
UIPrintInfo* printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputGrayscale;
pc.printInfo = printInfo;
pc.showsPaperSelectionForLoadedPapers = YES;
UIWebView* web = [UIWebView new];
[web loadHTMLString:html baseURL:nil];
pc.printFormatter = web.viewPrintFormatter;
[pc presentAnimated:YES completionHandler:^(UIPrintInteractionController *printInteractionController, BOOL completed, NSError *error) {
NSLog(@"%d -- %@",completed, error);
}];
您还可以克隆演示此问题的项目ResearchKit
。
编辑 - 一些有用的解决方法:
知道内容的特定宽度(例如图像),可以在不指定文本对齐方式的情况下对齐它,例如:
使用自动边距:
<div>
<div style="width:200px; margin-left:auto; margin-right:0px;">
content
</div>
</div>
浮动列:
<div>
<div style="width:200px; float:right;">
content
</div>
</div>
但是,以上都不适用于对齐可变长度文本,这是我关心的主要用例。