“iOS渲染”;“你好,世界”;(Helv.Neue Light,180磅)作为PDF格式?
我想在UIKit中动态生成一个最小的PDF页面 所以直接发送到AirPrint(不涉及文件) 只包含一行文本,例如 你好,世界 如Helvetica Neue Light 180pt TBC它必须在PDF中实际排版,而不是作为图像呈现 请注意,渲染位图的代码非常简单且广泛可用。。范例 我读了又试,直到脸色发青。谁能做到这一点 PS如果您正在阅读本文,并且您是一名Postscript程序员,那么我将特别介绍iPad中的PDF生成系统,例如: (我完全不清楚石英是否是实现这一点的最佳方法——这是一场噩梦。) 顺便说一句,下面是使用html方法完成此操作的确切代码 本例将一些动态html直接发送到AirPrint,不涉及任何文件 PDF更为棘手“iOS渲染”;“你好,世界”;(Helv.Neue Light,180磅)作为PDF格式?,ios,pdf,postscript,Ios,Pdf,Postscript,我想在UIKit中动态生成一个最小的PDF页面 所以直接发送到AirPrint(不涉及文件) 只包含一行文本,例如 你好,世界 如Helvetica Neue Light 180pt TBC它必须在PDF中实际排版,而不是作为图像呈现 请注意,渲染位图的代码非常简单且广泛可用。。范例 我读了又试,直到脸色发青。谁能做到这一点 PS如果您正在阅读本文,并且您是一名Postscript程序员,那么我将特别介绍iPad中的PDF生成系统,例如: (我完全不清楚石英是否是实现这一点的最佳方法——这是一场
-(NSString*)_sample
{
NSString *r = @"<table border=0 cellpadding=0 cellspacing=0 width=100%>"
"<tr><td align=right>"
"<font face=courier size=1>Almost a header!</font>"
"</tr></td></table>"
"<br><br><br><br>"
"<font size=4 face=sans-serif>"
"Hello"
"<br><br><br><br>"
"Some <i>italics</i>."
"<br><br><br><br>"
"<table border=1 cellpadding=10 cellspacing=1>"
"<tr><td align=right>one</td><td>two</td><td>three</td></tr>"
"</table>"
"</font>";
return r;
}
-(IBAction)printRawHtml:(UIView *)sender
{
UIPrintInfo *pif = [UIPrintInfo printInfo];
pif.outputType = UIPrintInfoOutputGeneral;
pif.jobName = @"Test HTML-like Job";
UIMarkupTextPrintFormatter *formatter = [[UIMarkupTextPrintFormatter alloc]
initWithMarkupText:[self _sample]
];
formatter.startPage = 0;
formatter.contentInsets = UIEdgeInsetsMake(10, 72.0, 72.0, 72.0);
//top,left,bottom,right
UIPrintInteractionController *pic =
[UIPrintInteractionController sharedPrintController];
pic.delegate = self;
pic.printInfo = pif;
pic.printFormatter = formatter;
pic.showsPageRange = NO;
pic.showsNumberOfCopies = NO;
void (^cph)(UIPrintInteractionController *, BOOL, NSError *) =
^(UIPrintInteractionController
*printController, BOOL completed, NSError *error)
{
if (!completed && error) NSLog(@"print error %@", error);
};
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
[pic presentFromRect:sender.frame
inView:self.view animated:YES completionHandler:cph];
else
[pic presentAnimated:YES completionHandler:cph];
}
-(NSString*)\u示例
{
NSString*r=@“”
""
“几乎是头球!”
""
“
”
""
“你好”
“
”
“一些斜体字。”
“
”
""
“一对三”
""
"";
返回r;
}
-(iAction)printRawHtml:(UIView*)发件人
{
UIPrintInfo*pif=[UIPrintInfo printInfo];
pif.outputType=UIPrintInfoOutputGeneral;
pif.jobName=@“像作业一样测试HTML”;
UIMarkupTextPrintFormatter*格式化程序=[[UIMarkupTextPrintFormatter alloc]
initWithMarkupText:[自我样本]
];
formatter.startPage=0;
formatter.contentInsets=UIEdgeInsetsMake(10,72.0,72.0,72.0);
//上、左、下、右
UIPrintInteractionController*图片=
[UIPrintInteractionController sharedPrintController];
pic.delegate=self;
pic.printInfo=pif;
pic.printFormatter=格式化程序;
pic.showsPageRange=否;
pic.showsNumberOfCopies=否;
无效(^cph)(UIPrintInteractionController*,BOOL,n错误*)=
^(UIPrintInteractionController)
*printController,布尔完成,N错误*错误)
{
如果(!已完成和错误)NSLog(@“打印错误%@”,错误);
};
if(UI\u USER\u INTERFACE\u IDIOM()==UIUserInterfaceIdiomPad)
[pic presentFromRect:sender.frame
inView:self.view动画:YES completionHandler:cph];
其他的
[pic presentAnimated:YES completionHandler:cph];
}
与前面提到的@luser droog一样,您可以使用Quartz2D在iOS中生成PDF。我从来没有试过,但你可以去看看。他的教程特别详细介绍了如何通过编程创建PDF以显示简单的“Hello world”字符串。来自苹果开发者网站的代码
- (IBAction)savePDFFile:(id)sender
{
// Prepare the text using a Core Text Framesetter.
CFAttributedStringRef currentText = CFAttributedStringCreate(NULL, (CFStringRef)textView.text, NULL);
if (currentText) {
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(currentText);
if (framesetter) {
NSString *pdfFileName = [self getPDFFileName];
// Create the PDF context using the default page size of 612 x 792.
UIGraphicsBeginPDFContextToFile(pdfFileName, CGRectZero, nil);
CFRange currentRange = CFRangeMake(0, 0);
NSInteger currentPage = 0;
BOOL done = NO;
do {
// Mark the beginning of a new page.
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 612, 792), nil);
// Draw a page number at the bottom of each page.
currentPage++;
[self drawPageNumber:currentPage];
// Render the current page and update the current range to
// point to the beginning of the next page.
currentRange = [self renderPageWithTextRange:currentRange andFramesetter:framesetter];
// If we're at the end of the text, exit the loop.
if (currentRange.location == CFAttributedStringGetLength((CFAttributedStringRef)currentText))
done = YES;
} while (!done);
// Close the PDF context and write the contents out.
UIGraphicsEndPDFContext();
// Release the framewetter.
CFRelease(framesetter);
} else {
NSLog(@"Could not create the framesetter needed to lay out the atrributed string.");
}
// Release the attributed string.
CFRelease(currentText);
} else {
NSLog(@"Could not create the attributed string for the framesetter");
}
}
这是苹果公司的官方文件
为什么要使用标签[ios]?为什么[后记]?(如果你想要“任何”的解决方案,我可以在原始的附言中打高尔夫球!)PS在这里添加“太宽”标志的人是不连贯的。你知道这么做的“方法太多了?!好悲伤。请告诉我一个或两个:)你的链接显示了如何打开pdf作为输出设备。只要使用普通的石英文字工具(我对它一无所知),你就应该很好了。假设链接文档中的所有内容都是真的(可能是真的),如果已经创建了PDF图形上下文,那么该上下文中的所有图形(和文本设置)都将进入PDF。我对该软件了解不够,无法保证您的文本将保持为文本且不会被光栅化。但它可能会,因为这是pdf的全部要点。你可能还需要在pdf中嵌入字体(或只包含你使用的字形的子集)。嗯-好主意!这是一个很好的链接。它专注于写入文件,但可能这是唯一的方式…我相信它也会用于显示它。。。我不确定从长远来看你想用它做什么,但如果你需要用它做其他事情,你也可以在它显示出来后再查看AirPrint。或者只需使用“共享”按钮将其添加为电子邮件附件,等等。当然,整个要点是直接进行AirPrint-我将在问题中澄清!再次伟大的链接,谢谢!我只是没想到去看那里