2017-10-04 11 views
10

注:私はMacOS用のSwift 4で作業しています。スタティックヘッダーを使用したWeb表示コンテンツの印刷

私はNSTableViewを持っています。これはデータで埋められ、コアデータに保存できます。 私は "デザイン"でTableViewの値を表示したいと思います。私はこのようにそれを実現してい

  • HTMLテンプレート
  • を作成した文字列としてHTMLコードを取得し、私のテーブルビュー値
  • で「HTMLプレースホルダ」を置き換えるには、変更されたHTML文字列を表示しますWeb表示を経由して

enter image description here

うまく動作します!そして、この「ソリューション」は、自動的に改ページを行います:)

ここに私のコードを少し

// Example with statics values 
func createHTML() { 
     let pathToHTMLTemplate = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("basic.html") 
     let pathToNoticeHTMLTemplate = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("notice.html") 
     do { 
      htmlString = try String(contentsOf: pathToInvoiceHTMLTemplate) 
      for _ in 0 ..< 40 { 
       var itemHTMLContent = try String(contentsOf: pathToNoticeHTMLTemplate) 
       itemHTMLContent = itemHTMLContent.replacingOccurrences(of: "#NOTICE_NAME#", with: "My notice") 
       htmlPositionen += itemHTMLContent 
      } 
      htmlString = htmlString.replacingOccurrences(of: "#NOTICE#", with: htmlPositionen) 
      let totalCount = 20 //Fix value as example 
      htmlString = htmlString.replacingOccurrences(of: "#TOTAL_COUNT#", with: "\(totalCount)") 
      myWebView.mainFrame.loadHTMLString(htmlString, baseURL: nil) 
     } catch {} 
    } 

そして、私は、この印刷することができます。

func webView(_ sender: WebView!, didFinishLoadFor frame: WebFrame!) { 

     let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("test.pdf") 

     let printInfo = NSPrintInfo.shared 
     printInfo.paperSize = NSMakeSize(595.22, 841.85) 
     printInfo.isHorizontallyCentered = true 
     printInfo.isVerticallyCentered = true 
     printInfo.orientation = .portrait 
     printInfo.topMargin = 50 
     printInfo.rightMargin = 0 
     printInfo.bottomMargin = 50 
     printInfo.leftMargin = 0 
     printInfo.verticalPagination = .autoPagination 

     let printOp = NSPrintOperation(view: sender.mainFrame.frameView.documentView, printInfo: printInfo) 

     printOp.showsProgressPanel = false 
     printOp.showsPrintPanel = false 
     printOp.run() 
     printOp.cleanUp() 
    } 

をしかし、問題があります: - 各ページが再び上に来ると、赤い「通知ヘッダー」が表示されます。

誰かがアイデアを持っていると思いますが、どうすれば実現できますか?

UPDATE

多分ウェブビューのこの方法は役立ちますでしょうか?

func webView(_ sender: WebView!, drawFooterIn rect: NSRect) { 
    // DO SOMETHING 
} 

func webView(_ sender: WebView!, drawHeaderIn rect: NSRect) { 
    // DO SOMETHING 
} 

答えて

0

あなたのページにヘッダーを使用するよう指定するのではなく、通知を1回だけ表示しています。

nsprintinfo.headerandfooter属性を設定して、ヘッダーを印刷するように定義し、ヘッダーのテキスト/表示テキスト(注記など)をそのセクションに移動することができます。 NSViewは、ここにあなたのために有益である場合

わからない...良い部分は、ここでは、印刷にあります:Printing Programming Guide for Mac

関連する問題