Finished implementation for header/footer for iOS
This commit is contained in:
parent
ee88021da0
commit
69541fb13e
@ -23,6 +23,12 @@
|
|||||||
#include "APPPrinterRenderer.h"
|
#include "APPPrinterRenderer.h"
|
||||||
#include "APPPrinterUnit.h"
|
#include "APPPrinterUnit.h"
|
||||||
|
|
||||||
|
@interface APPPrinterRenderer ()
|
||||||
|
|
||||||
|
@property (nonatomic, retain) NSDictionary *settings;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
@implementation APPPrinterRenderer
|
@implementation APPPrinterRenderer
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
@ -48,51 +54,178 @@
|
|||||||
if (header)
|
if (header)
|
||||||
{
|
{
|
||||||
dots = [APPPrinterUnit convert:header[@"unit"]];
|
dots = [APPPrinterUnit convert:header[@"unit"]];
|
||||||
self.headerHeight = dots * [header[@"height"] doubleValue];
|
self.headerHeight = dots * [header[@"height"] floatValue];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (footer)
|
if (footer)
|
||||||
{
|
{
|
||||||
dots = [APPPrinterUnit convert:header[@"unit"]];
|
dots = [APPPrinterUnit convert:footer[@"unit"]];
|
||||||
self.footerHeight = dots * [footer[@"height"] doubleValue];
|
self.footerHeight = dots * [footer[@"height"] floatValue];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_settings = spec;
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
#pragma mark Private
|
#pragma mark Callbacks
|
||||||
|
|
||||||
- (void) drawHeaderForPageAtIndex:(NSInteger)index inRect:(CGRect)rect
|
- (void) drawHeaderForPageAtIndex:(NSInteger)index inRect:(CGRect)rect
|
||||||
{
|
{
|
||||||
NSString *header = [NSString stringWithFormat:@"Sample header at page %ld", index + 1];
|
[self drawLabelsFromDictionary:_settings[@"header"]
|
||||||
NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
|
forPageAtIndex:index
|
||||||
|
inRect:rect];
|
||||||
style.alignment = NSTextAlignmentRight;
|
|
||||||
|
|
||||||
UIFont *font = [UIFont fontWithName:@"Courier" size:UIFont.labelFontSize];
|
|
||||||
|
|
||||||
NSDictionary *attrs = @{ NSFontAttributeName: font,
|
|
||||||
NSParagraphStyleAttributeName: style,
|
|
||||||
NSForegroundColorAttributeName: [UIColor redColor]};
|
|
||||||
|
|
||||||
[header drawInRect:rect withAttributes:attrs];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) drawFooterForPageAtIndex:(NSInteger)index inRect:(CGRect)rect
|
- (void) drawFooterForPageAtIndex:(NSInteger)index inRect:(CGRect)rect
|
||||||
{
|
{
|
||||||
NSString *footer = @"Sample Footer";
|
[self drawLabelsFromDictionary:_settings[@"footer"]
|
||||||
NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
|
forPageAtIndex:index
|
||||||
|
inRect:rect];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark -
|
||||||
|
#pragma mark Private
|
||||||
|
|
||||||
|
- (void) drawLabelsFromDictionary:(NSDictionary *)spec
|
||||||
|
forPageAtIndex:(NSInteger)index
|
||||||
|
inRect:(CGRect)rect
|
||||||
|
{
|
||||||
|
NSDictionary* label = spec[@"label"];
|
||||||
|
NSArray *labels = label ? @[label] : spec[@"labels"];
|
||||||
|
|
||||||
|
if (!labels)
|
||||||
|
{
|
||||||
|
NSString *text = spec[@"text"];
|
||||||
|
|
||||||
|
if (![self strIsNullOrEmpty:text])
|
||||||
|
{
|
||||||
|
labels = @[@{ @"text":text }];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!labels) return;
|
||||||
|
|
||||||
|
for (label in labels) {
|
||||||
|
[self drawLabelFromDictionary:label forPageAtIndex:index inRect:rect];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) drawLabelFromDictionary:(NSDictionary *)spec
|
||||||
|
forPageAtIndex:(NSInteger)index
|
||||||
|
inRect:(CGRect)rect
|
||||||
|
{
|
||||||
|
NSString *label = spec[@"text"];
|
||||||
|
NSString *align = spec[@"align"];
|
||||||
|
BOOL showIndex = [spec[@"showPageIndex"] boolValue];
|
||||||
|
|
||||||
|
if (showIndex)
|
||||||
|
{
|
||||||
|
label = [self strIsNullOrEmpty:label] ? @"%ld" : label;
|
||||||
|
label = [NSString stringWithFormat:label, index + 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([self strIsNullOrEmpty:label])
|
||||||
|
return;
|
||||||
|
|
||||||
|
NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle]
|
||||||
|
mutableCopy];
|
||||||
|
|
||||||
|
if ([align isEqualToString:@"left"])
|
||||||
|
{
|
||||||
|
style.alignment = NSTextAlignmentLeft;
|
||||||
|
}
|
||||||
|
else if ([align isEqualToString:@"right"])
|
||||||
|
{
|
||||||
|
style.alignment = NSTextAlignmentRight;
|
||||||
|
}
|
||||||
|
else if ([align isEqualToString:@"center"])
|
||||||
|
{
|
||||||
style.alignment = NSTextAlignmentCenter;
|
style.alignment = NSTextAlignmentCenter;
|
||||||
|
}
|
||||||
|
else if ([align isEqualToString:@"justified"])
|
||||||
|
{
|
||||||
|
style.alignment = NSTextAlignmentJustified;
|
||||||
|
}
|
||||||
|
|
||||||
UIFont *font = [UIFont fontWithName:@"Helvetica" size:UIFont.buttonFontSize];
|
NSString *hex = spec[@"color"];
|
||||||
|
UIColor *color;
|
||||||
|
|
||||||
|
if ([self strIsNullOrEmpty:hex])
|
||||||
|
{
|
||||||
|
color = UIColor.darkTextColor;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ([hex characterAtIndex:0] == '#')
|
||||||
|
{
|
||||||
|
hex = [hex substringFromIndex:1];
|
||||||
|
}
|
||||||
|
|
||||||
|
color = [self colorFromHexString:hex];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!color)
|
||||||
|
{
|
||||||
|
color = UIColor.darkTextColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
double size = [spec[@"size"] doubleValue];
|
||||||
|
|
||||||
|
if (size <= 0.0)
|
||||||
|
{
|
||||||
|
size = UIFont.smallSystemFontSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
UIFont *font = [UIFont fontWithName:spec[@"font"] size:size];
|
||||||
|
|
||||||
|
if (!font)
|
||||||
|
{
|
||||||
|
font = [UIFont systemFontOfSize:size];
|
||||||
|
}
|
||||||
|
|
||||||
|
UIFontDescriptorSymbolicTraits traits = 0;
|
||||||
|
|
||||||
|
if ([spec[@"bold"] boolValue])
|
||||||
|
{
|
||||||
|
traits = traits | UIFontDescriptorTraitBold;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([spec[@"italic"] boolValue])
|
||||||
|
{
|
||||||
|
traits = traits | UIFontDescriptorTraitItalic;
|
||||||
|
}
|
||||||
|
|
||||||
|
font = [UIFont fontWithDescriptor:[font.fontDescriptor fontDescriptorWithSymbolicTraits:traits]
|
||||||
|
size:size];
|
||||||
|
|
||||||
NSDictionary *attrs = @{ NSFontAttributeName: font,
|
NSDictionary *attrs = @{ NSFontAttributeName: font,
|
||||||
NSParagraphStyleAttributeName: style,
|
NSParagraphStyleAttributeName: style,
|
||||||
NSForegroundColorAttributeName: [UIColor blueColor]};
|
NSForegroundColorAttributeName: color };
|
||||||
|
|
||||||
[footer drawInRect:rect withAttributes:attrs];
|
[label drawInRect:rect withAttributes:attrs];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL) strIsNullOrEmpty:(NSString *)string
|
||||||
|
{
|
||||||
|
return [string isEqual:[NSNull null]] || string.length == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIColor *)colorFromHexString:(NSString *)hex
|
||||||
|
{
|
||||||
|
unsigned rgb = 0;
|
||||||
|
|
||||||
|
NSScanner *scanner = [NSScanner scannerWithString:hex];
|
||||||
|
|
||||||
|
[scanner setCharactersToBeSkipped:
|
||||||
|
[NSCharacterSet characterSetWithCharactersInString:@"#"]];
|
||||||
|
|
||||||
|
[scanner scanHexInt:&rgb];
|
||||||
|
|
||||||
|
return [UIColor colorWithRed:((rgb & 0xFF0000) >> 16)/255.0
|
||||||
|
green:((rgb & 0xFF00) >> 8)/255.0
|
||||||
|
blue:(rgb & 0xFF)/255.0 alpha:1.0];
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -57,12 +57,18 @@ exports.getDefaults = function () {
|
|||||||
|
|
||||||
header: {
|
header: {
|
||||||
unit: 'cm',
|
unit: 'cm',
|
||||||
height: 0,
|
height: 1,
|
||||||
},
|
|
||||||
|
|
||||||
footer: {
|
labels: [{
|
||||||
unit: 'cm',
|
text: 'Awesome Printer Plug-in',
|
||||||
height: 0
|
align: 'center',
|
||||||
|
italic: true,
|
||||||
|
color: '#FF0000'
|
||||||
|
},{
|
||||||
|
showPageIndex: true,
|
||||||
|
align: 'right',
|
||||||
|
bold: true
|
||||||
|
}]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user