現在ログインしていません。
新規アカウント作成
ログイン

PDFを作成する

C#VBPDFを作成するには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 EventArgsHandles 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を生成する