TL;DR: Если вы печатаете UIWebView
, который содержит HTML
контент, состоящий из элементов с выравниванием текста right
/center
, в результате документ будет иметь страницы с неожиданно большими нижними полями.
Я столкнулся с этой проблемой и был очень удивлен, когда не смог найти никого с подобной проблемой. Я подал радар с яблоком (# 20760071), а также создал issue в ResearchKit
GitHub repo, так как это влияет на их 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>
Однако ни одно из вышеперечисленных действий не подходит для выравнивания текста переменной длины, который является основным прецедентом, с которым я связан.