2017-08-03 12 views
0

私はUWPアプリケーションを開発しており、PDFファイルを動的に生成するために必要な要件の1つです。UWP PDFベストのアプローチを作成する

数contraints /私はconciderする必要がある要件があります

  • 可能性に関するレポートを生成する能力を必要とする直接/オフラインUWPアプリシナリオ
  • からPDFを生成する機能が必要サーバー - 理想的には同じソーステンプレートから
  • レポート多少動的にする必要があります(つまり、アプリの再コンパイルなしで編集可能なアプリのIT自己と形式にコンパイルされていない)
  • 理想的 - /クローズドソースpropetiaryライブラリに依存しませんコンポーネント

私はこれにアプローチする方法についてのアイデアをいくつ持っていた:XAMLページを

  1. を持って、隠された印刷ダイアログからPDFとしてそのXAMLビューを印刷してPDFに変換 - によって制限XAMLをアプリにコンパイルする必要がある+という事実は、同じアプローチを使用してサーバー側でレポートを生成することはおそらく不可能です。
  2. WebViewやHTMLと似たようなことをしますが、JavaScriptロジックを実行する必要があります。私はUWPアプリケーションで可能かどうか分かりません。

誰も過去に似たようなことを達成したことがありますか?その場合、どのようなアプローチをとっていますか?

答えて

1

現在、UWPでPDFを生成するための多くのサードパーティ製の有料パッケージ(SyncfusionおよびXFiniumなど)があります。 PDFSharpのような無料ライブラリーについては、UWPでは利用できません。あなたが有料のものを望んでいないので、あなたは無料のライブラリを持つ古典的なアプリケーションを作成し、それを処理するAppServiceを作成することを検討するかもしれません。詳細はAppServiceBridgeSampleを参照してください。

は、XAMLページを持って、printing機能により、PDFがうまく機能することができます生成

を印刷してPDFに変換します。しかし、あなたの "隠された印刷ダイアログ"の要求は不可能です。印刷UIを印刷するために非表示にすることはできません。

オープンjsPDFライブラリは、JavaScriptでPDFにHTMLを生成することができますWebViewのとHTMLと似た何かを。そして、InvokeScriptAsyncからPDF結果をWebViewから得ることができます。たとえば:

はJavaScript

<html> 
<head> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.4/jspdf.debug.js"></script> 
    <script type='text/javascript'> 
     function print() { 
      var doc = new jsPDF() 
      doc.text('Hello world!', 10, 10); 
      doc.circle(50, 50, 50); 
      var pdfresult = doc.output(); 
      document.getElementById('myDiv').innerText = pdfresult; 
      //doc.save('a4.pdf'); 
      return pdfresult; 
     } 
    </script> 
</head> 
<body> 
    <div id='myDiv'>Hello</div> 
</body> 
</html> 

WebViewのすべての後

Webview.Navigate(new Uri("ms-appx-web:///Assets/test.html")); 
string pdfresult = await Webview.InvokeScriptAsync("eval", new string[] { "print()" }); 
StorageFile pdf = await ApplicationData.Current.LocalFolder.CreateFileAsync("test.pdf"); 
await FileIO.WriteTextAsync(pdf, pdfresult); 

、あなたはPDFファイル形式を自分で書く考えることができます。 HereはWindows phone用のドキュメントですが、まだ参照している可能性があります。

関連する問題