Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“iOS渲染”;“你好,世界”;(Helv.Neue Light,180磅)作为PDF格式?_Ios_Pdf_Postscript - Fatal编程技术网

“iOS渲染”;“你好,世界”;(Helv.Neue Light,180磅)作为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生成系统,例如: (我完全不清楚石英是否是实现这一点的最佳方法——这是一场

我想在UIKit中动态生成一个最小的PDF页面

所以直接发送到AirPrint(不涉及文件)

只包含一行文本,例如

你好,世界

如Helvetica Neue Light 180pt

TBC它必须在PDF中实际排版,而不是作为图像呈现

请注意,渲染位图的代码非常简单且广泛可用。。范例

我读了又试,直到脸色发青。谁能做到这一点

PS如果您正在阅读本文,并且您是一名Postscript程序员,那么我将特别介绍iPad中的PDF生成系统,例如:

(我完全不清楚石英是否是实现这一点的最佳方法——这是一场噩梦。)

顺便说一句,下面是使用html方法完成此操作的确切代码

本例将一些动态html直接发送到AirPrint,不涉及任何文件

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-我将在问题中澄清!再次伟大的链接,谢谢!我只是没想到去看那里