PDFを作成する
C#や
VBで
PDFを作成するには
NuGetでライブラリをインストールして使用します。
残念なことに純粋な.NETのライブラリにはPDF作成機能はありませんし、自分でPDFの仕様を理解して実装するのはかなり骨が折れます。幸いPdfSharpというライブラリはMITライセンスで公開されており、商用でも非常にゆるい条件の下で無償で使用できます。詳しくはMITライセンスを調べてみてください。なお、iTextSharpというライブラリも有名ですが、こちらはAGPLライセンスですので取り扱いにご注意ください。
PDF作成方法
NuGetでPdfSharpをインストールし、次のようにプログラムするとPDFファイルを作成できます。
Imports PdfSharp.Drawing
Imports PdfSharp.Pdf
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Using pdf As New PdfDocument
Dim page1 As PdfPage = pdf.AddPage
Using g As XGraphics = XGraphics.FromPdfPage(page1)
Dim ops As New XPdfFontOptions(PdfFontEncoding.Unicode, PdfFontEmbedding.Always)
Dim font As New XFont("Arial Unicode MS", 10, XFontStyle.Regular, ops)
g.DrawString("こんにちは", font, XBrushes.Red, New Point(10, 10))
g.DrawEllipse(XBrushes.Blue, New Rectangle(20, 20, 120, 120))
End Using
pdf.Save("C:\temp\test.pdf")
End Using
Process.Start("C:\temp\test.pdf")
End Sub
End Class
■リスト1:VB版 PdfSharpを使ったPDFの作成using System;
using System.Drawing;
using System.Windows.Forms;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
namespace CSPdfTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
using (PdfDocument pdf = new PdfDocument())
{
PdfPage page1 = pdf.AddPage();
using (XGraphics g = XGraphics.FromPdfPage(page1))
{
XPdfFontOptions ops = new XPdfFontOptions(PdfFontEncoding.Unicode, PdfFontEmbedding.Always);
XFont font = new XFont("Arial Unicode MS", 10, XFontStyle.Regular, ops);
g.DrawString("こんにちは", font, XBrushes.Red, new Point(10, 10));
g.DrawEllipse(XBrushes.Blue, new Rectangle(20, 20, 120, 120));
}
pdf.Save(@"C:\temp\test.pdf");
}
System.Diagnostics.Process.Start(@"C:\temp\test.pdf");
}
}
}
■リスト2:C#版 PdfSharpを使ったPDFの作成この例はごく初歩的な使い方として、文字と青い円を含むPFDを生成します。これ以外にももっといろいろな機能があり、公式ページのサンプルが参考になります。PdfSharp Samples
PdfSharp
PdfSharpの良い特徴
- .NET FrameworkのGDI+をまねしたメソッドや発想で作られている。
- 新しくPDFを作成する以外に既存のPDFを編集することもできる。
PdfSharpで困りそうな点- 使用できるフォントに制約がある。私が試した範囲では日本語が表示できるフォントで使用できたのはArial Unicode MSのみ、その他のメイリオやMSゴシックを指定するとエラーになってしまいます。Meiryo、MS Gothicなど英語名で指定してもダメでした。
- 日本語対応が弱い。ヘルプやサイトは基本的に英語。
- 座標を指定しながらPDFを作っていくので面倒。細かく指定できる点はメリットと言えるかもしれませんが、簡便さがなくデメリットでもあります。
HtmlRenderer.PdfSharp
HtmlRenderer.PdfSharpはHTMLを基にPDFを生成できます。これでPdfSharpの面倒な座標指定からは開放されます。しかし、とても残念なことに、日本語に対応していません。日本語はすべて文字化けしてしまいます。どうしてもという場合は画像として貼り付けるという逃げ道はあるようです。
次の例ではすべてASCII文字の範囲でPDFを作成します。 この例ではHTML部分はVBのXMLリテラル機能で書いていますが、普通に文字列で書いてもかまいません。
Dim html = <div>
<h1>HtmlRenderer.PdfSharp</h1>
<hr/>
<p>
The HtmlRenderer.PdfSharp is a libray to generate PDF from HTML.
It is based on HTML4 + CSS2.
Unfortunately, Unicode characters are unavailable.
</p>
</div>
Dim pdf As PdfDocument = PdfGenerator.GeneratePdf(html.ToString, PageSize.A4)
pdf.Save("C:\temp\fromhtml.pdf")
Process.Start("C:\temp\fromhtml.pdf")
■リスト3:VB版 HTMLからPDFを生成する