Slide 1

Slide 1 text

XamarinでPDFを作る 伊勢  シン Japan Xamarin User Group Conference #5

Slide 2

Slide 2 text

⾃自⼰己紹介 •  伊藤  伸裕 / 伊勢  シン –  @iseebi / id:iseebi •  フェンリル株式会社 アプリケーション共同開発部所属 –  iOS / Android のアプリ開発してます –  MvvmCross 派

Slide 3

Slide 3 text

最近のお仕事 •  BoltzEngine – ⾼高速プッシュエンジン

Slide 4

Slide 4 text

ࠓ೔ͷ͓࿩

Slide 5

Slide 5 text

PDFをアプリ側でつくりたい! •  Androidタブレットで⼊入⼒力力された情報を帳票化したい •  帳票は追加しやすくしてほしい –  PDFのアップロードでやりたい •  サーバーは既製品なのでカスタマイズ不不可 –  APIはWSDL/SOAPベース

Slide 6

Slide 6 text

PDFをアプリ側でつくりたい! •  Androidタブレットで⼊入⼒力力された情報を帳票化したい •  帳票は追加しやすくしてほしい –  PDFのアップロードでやりたい •  サーバーは既製品なのでカスタマイズ不不可 –  APIはWSDL/SOAPベース PDF出⼒力力は茨の道。ライブラリ⾼高い or GPL AndroidでWSDL/SOAPするまともなライブラリなし

Slide 7

Slide 7 text

1%'Ἒ 84%-Ἒ

Slide 8

Slide 8 text

84%- /&5

Slide 9

Slide 9 text

84%-/&5ͷ൪ ※Xamarinでも使えます (Business 以上かも)

Slide 10

Slide 10 text

84%-/&5ͷ൪ public async Task Process() { var s = new www.webservicex.net.GeoIPService(); var result = await Task.Factory.FromAsync( s.BeginGetGeoIP("220.151.231.84", null, null), ar => s.EndGetGeoIP(ar)); } ※.NET 2.0 でラッパー作ると  IAsyncResult が出るけど、  Task.Factory.FromAsync で変換できます。

Slide 11

Slide 11 text

9BNBSJO ͔͠ͳ͍

Slide 12

Slide 12 text

1%' /&5

Slide 13

Slide 13 text

Xamarin.Android で  PDF ライブラリ検討 •  iTextSharp – AGPLなので業務ではちょっと… •  その他諸々OSS系ライブラリ  (をJava Integration) – GPLなのでクライアントアプリではちょっと… •  Aspose.Pdf (をJava Integration…できず) – ¥323,500 (Developer OEM Subscription 付きライセンス) – 中で Mono を魔改造して利利⽤用してるっぽく、 Xamarin の Framework と競合してバインディングで きず ※その節はお世話になりました>⽥田淵さん

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

9'*/*6.1%'

Slide 17

Slide 17 text

9BNBSJO3FBEZ ༗ঈ͚ͩͲ͍҆ ͪΌΜͱ࢖͑Δ

Slide 18

Slide 18 text

XFINIUM.PDF •  .NET ⽤用 PDF 操作ライブラリ – Standard Edition と Professional Edition – Professional になると PDF レンダリングもできる •  PDFに関して、だいたいのことはできる – http://www.xfiniumpdf.com/xfinium-pdf- crossplatform/xfinium-pdf-features.html •  もちろんXamarin対応!

Slide 19

Slide 19 text

XFINIUM.PDF •  機能レベル x プラットフォームの組み合わせでライセンス が決まる •  プラットフォーム –  Win/Mono (.NET, WinForm, ASP.NET, Mono) –  WPF/SL/WinRT (WPF, Silverlight, Store App) –  Mobile (WP7, WP8, Xamarin.iOS, Xamarin.Android) •  Standard Edition Mobile Edition – $299 (Single Developer w/1 Year Support) – $99 (Support Subscription Renewal)

Slide 20

Slide 20 text

%&.0

Slide 21

Slide 21 text

XFINIUM.PDF の基本 •  PdfFixedDocumentを作る –  新規の時は引数無しコンストラクタ –  開く時はファイルの Stream を渡す •  リソース系のストリーム渡すと Seek できないから Exception ⾷食らう – 保存するときは Save var doc = new PdfFixedDocument(); // anything using (var file = File.Open(filename, FileMode.Create)) { doc.Save(file); }

Slide 22

Slide 22 text

諸々描画する •  PdfPage.Graphics を使って⾏行行う // 追加したページに var page = doc.Pages.Add(); // 円を描いたり var pen = new PdfPen(new PdfRgbColor(0, 0, 0), 1); page.Graphics.DrawEllipse(pen, 150, 150, 50, 50); // 線を引いたり page.Graphics.DrawLine(pen, new PdfPoint(15, 20), new PdfPoint(120, 180)); // ⽂文字を描いたり page.Graphics.DrawString("こんにちはこんにちは!”, new PdfStandardFont(PdfStandardFontFace.HeiseiKakuGothicW5, 30), new PdfBrush(new PdfRgbColor(80, 80, 80)), 60, 60);

Slide 23

Slide 23 text

1%'ʹ ॻ͖ࠐΜͰग़ྗ͸ Ͱ͖ͦ͏ͳΜ͚ͩͲ

Slide 24

Slide 24 text

࠲ඪ Θ͔ΒΜ ʘ ?P? ʗ

Slide 25

Slide 25 text

࠲ඪܭࢉͨ͘͠ͳ͍ ΏͱΓܥΤϯδχΞ

Slide 26

Slide 26 text

1%''PSN http://www.irs.gov/pub/irs-pdf/fw8ben.pdf

Slide 27

Slide 27 text

PDFフォーム •  PDFにHTMLみたいなフォームを作れる機能 •  JSとか送信とかもできる •  Adobe Acrobat で GUIデザイン可能 •  可変⻑⾧長・⾃自動リサイズ をサポートする テキストボックスなど 兵庫県伊丹丹市  ふるさと寄付申込書 http://www.city.itami.lg.jp/HURUSATO_KIHU/1392987373564.html

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

テキストフィールド Tips •  ダブルクリックしてプロパティ –  表⽰示⽅方法タブのフォントサイズを「⾃自動」にすると内容に合わせて⾃自動的に ⽂文字のサイズが変わる –  オプションタブで中央揃え・複数⾏行行テキストできる。

Slide 30

Slide 30 text

XFINIUM.PDFでフォーム操作 •  PdfFixedDocument, PdfPage 共に  Fields プロパティがあり、 そこからフォームのフィールドを取得できる –  PdfPage のを使うと、検索索のコンテキストをページに限定できる?(未確認) var nameField = doc.Form.Fields["Name"] as PdfTextBoxField; nameField.Value = "伊勢  シン”; var ageField = doc.Form.Fields["Age_30"] as PdfCheckBoxField; ageField.Checked = true;

Slide 31

Slide 31 text

フォームで描画位置を決める •  該当する年年代に丸をつける (けしてチェックではない) •  フォームの⼊入⼒力力欄がある位置に描画する

Slide 32

Slide 32 text

フォームで描画位置を決める •  PDFは1つのフォーム項⽬目が複数の表⽰示箇所を持つことが想定に ⼊入っている様⼦子。(なのでWidgetsから項⽬目をとる) •  VisualRectangle の位置に描画する •  ついでにReadOnlyにすることで枠も消える var ageField = doc.Form.Fields["Age_30"] as PdfCheckBoxField; var ageWidget = ageField.Widgets.First(); var rect = ageWidget.VisualRectangle; ageWidget.Page.Graphics.DrawEllipse( new PdfPen(new PdfRgbColor(0, 0, 0), 1), rect.Left, rect.Top, rect.Width, rect.Height); ageWidget.ReadOnly = true;

Slide 33

Slide 33 text

フォームで描画位置を決める •  チェックボックス側は枠も背景も透明にしておくのがミソ

Slide 34

Slide 34 text

%&.0

Slide 35

Slide 35 text

まとめ •  クロスプラットフォーム以外のところでXamarinを選択す る理理由はある。 –  ネイティブライブラリがなくても.NETならなんとかなることがある –  WSDL使うなら.NETのほうがいい •  XFINIUM.PDF おすすめです。 –  ライセンス的にも、値段的にも、悪くない。 –  フォーム周りは今回めっちゃレポート上げて 直してもらってますので⽇日本語もだいたいいけるはずです。