PDFsharpおよびMigraDoc Foundation(基礎)

招待を受けた記事がどこかで消えたので、もう一度公開したいと思います。



.NetでPDFを操作するための無料のライブラリの数が少ないことと、ロシア語でそれらのカバレッジが不十分であることを考慮して、PDFsharpやMigradDocなどのすばらしいライブラリでの作業についてお話したいと思います。



最初から始めましょう-ソースはここまたはここからダウンロードできます

次に、プロジェクトにリンクを追加します。

using MigraDoc; using PdfSharp; using MigraDoc.DocumentObjectModel; using MigraDoc.Rendering; using PdfSharp.Pdf;
      
      





新しいドキュメントを作成する

 Document document = new Document();
      
      





各MigraDocドキュメントは、独自の形式を持つことができる独立したセクションで構成されます。

セクションの作成:
 Section section = document.AddSection();
      
      



このような初期化の後、 セクションを使用して -ドキュメントdocumentの一部を使用します

セクションには、 Add、AddParagraph()、AddImage()、AddTable()などの情報を操作するための関数と、 PageSetupセクション自体の形式を変更するためのクラスがあります。

フォーマットの変更:

 section.PageSetup.PageFormat = PageFormat.5;//   section.PageSetup.Orientation = Orientation.Portrait;// section.PageSetup.BottomMargin = 10;//  section.PageSetup.TopMargin = 10;// 
      
      





情報は、 Add(Param)を使用して追加されます。Paramは段落(Paragraph)、画像(Image)、表(Table)、グラフ(Chart)、またはテキストフレーム(TextFrame)です。

 Paragraph paragraph =new Paragraph(); section.Add(paragraph);
      
      





またはセクションを追加する例に従ってください

 Paragraph paragraph = section.AddParagraph();
      
      





さらに、各段落に対して、個別の形式(クラスFormat)とスタイル(クラスStyle)を設定することもできます。

 paragraph.Format.Font.Color = Color.FromCmyk(100, 30, 20, 50);
      
      





段落ごとに、情報を追加できます。

 Text text = new Text("text"); paragraph.AddText("text");// paragraph.AddFormattedText("formatted text", styleName);//   paragraph.Add(text);//     paragraph.AddBookmark("Bookmark");// paragraph.AddChar('c');// paragraph.AddDateField("10.10.2010");// paragraph.AddFootnote("Footnote");//  //   
      
      





基礎を収集しましたが、PdfDocumentRendererが使用される本格的なPDF文書に変換するために残っています。

 pdfRenderer = new PdfDocumentRenderer(true, PdfFontEmbedding.Always); pdfRenderer.Document = document; pdfRenderer.RenderDocument(); pdfRenderer.PdfDocument.Save(filePath);// 
      
      





DejaVuSansMono.ttfなど、OSにデフォルトでインストールされていないフォントを使用する必要がある場合があります。 これを行うには、まず上記のフォントのファイルを実行可能ファイルと同じフォルダーに配置します。

 Uri uri = new Uri(@"file://" + System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + @"\DejaVuSansMono.ttf"); XPrivateFontCollection pfc = XPrivateFontCollection.Global; try { pfc.Add(uri, "./#DejaVu Sans Mono"); } catch (Exception) {} pdfRenderer.DocumentRenderer.PrivateFonts = pfc;
      
      





作成したドキュメントをアプリケーションに表示する必要がある場合は、 MigraDoc作成されたドキュメントを出力するためのコントロールであるMigraDoc.Rendering.Windows.DocumentPreviewが役立ちます。 最初にフォームまたはWPFウィンドウに配置してから、次のコードを使用する必要があります。

 Document doc = new Document(); doc = oDocument.Clone(); preview.Ddl = DdlWriter.WriteToString(doc);
      
      





残念ながら、既に作成されたPDFドキュメントを表示する機能は利用できません。

MigraDocオブジェクト(ドキュメント、セクション、段落など)を割り当てるときに重要なClone()関数に注意することをお勧めします。使用しない場合、最初のオブジェクトを変更すると、最初に割り当てられたオブジェクトが変更されます。

MigraDocドキュメントを印刷するには、 MigraDocPrintDocumentを使用できます。

 MigraDocPrintDocument migraDocPrint = new MigraDocPrintDocument(preview.Renderer); migraDocPrint.Print();
      
      





しかし、このような問題は、この方法はサーバーを介して印刷するときに機能しないことに気づきました。ローカルプリンターを介した印刷は正常です。

したがって、オプションとして、Foxit Readerを使用して印刷できます。

 pdfDocumentRenderer.PdfDocument.Save(@"temp.pdf"); Process.Start(@"Resources\Foxit Reader.exe", @"/p temp.pdf");
      
      





結論として、 この投稿のすべてのライブラリをテストした後、このライブラリを最も便利で十分な機会があると決めました。




All Articles