CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発

PDFium ViewerによるPDFレンダリングがイケてる

投稿日:2018年9月1日 更新日:

PDFが電子ペーパーの絶対的な標準になったなか、PDFをプログラムであつかうのがとても簡単になってきた。ブラウザ戦争の勝者であるGoogle ChromeがPDFレンダリングエンジンに採用しているPDFium(ピーディーエフ・イアム)。ライセンスは修正BSDライセンスなので、企業が商用利用する上でのハードルは低い。ていうか、ハードルなんてないと言ってもいい。

今日は、VisualStudioでPDFium Viewerなる便利な部品を使ってPDFをJpegにするというチョー簡単なプログラムに取り組んでみる。言語はC#だから、おいらにとっては専門外だが、何事もやってみないと始まらないんで。。
1.新しいプロジェクトでWindowsフォームアプリケーションを作成
2.ツール → NuGetパッケージマネージャー → ソリューションのNuGetパッケージ管理
3.参照 でPdfiumViewer を検索して、以下2つをインストール
 PdfiumViewer、PdfiumViewer.Native.x86_64.v8-xfa
4.プロジェクトのプロパティ → ビルドで「32ビットを優先」 のチェックを外す
5.フォームにボタンを配置
6.ボタンのクリックイベントに以下3行を挿入(ファイル名は適宜変更)
 PdfDocument pdfDoc = PdfDocument.Load(“C:\\work\\test.pdf”);
 Image img = pdfDoc.Render(0, 300, 300, false);
 img.Save(“C:\\work\\test.jpg”, ImageFormat.Jpeg);
7.参照を解決するために以下2行を追加
 using PdfiumViewer;
 using System.Drawing.Imaging;
8.ビルドして実行

test.pdfの1ページ目をtest.jpgにすることができたでしょ。なんとまぁ簡単なことか。Renderメソッド引数の意味は以下の通り。
PdfDocument.Reader(int page, float dpiX, float dpiY, bool forPringing);
PDFは複数ページあるわけだから、全ページ分のラスタライズをしてあげましょ。

using PdfiumViewer;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PDFiumTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            PdfDocument pdfDoc = PdfDocument.Load("D:\\work\\test.pdf");
            for (int i = 0; i < pdfDoc.PageCount; i++)
            {
                Image img = pdfDoc.Render(i, 300, 300, false);
                string output = string.Format("D:\\work\\test{0}.jpg", i+1);
                img.Save(output, ImageFormat.Jpeg);
            }
        }
    }
}

今回はPDFium ViewerというC#の部品を使ってみたわけだが、PDFium本体はC++の部品らしい。世間的にはドットnetたるC#のほうが使いやすいんだろうけど、おいらとしては使い慣れたC++で組みたい気持ちが強い。いずれそいつを探し出して、いじってみようかなと。

-ソフト開発

執筆者:


  1. […] CAD日記 PDFium ViewerによるPDFレンダリングがイケてるテックメモ C# PDFiumでPDFを読み込む […]

  2. […] CAD日記 PDFium ViewerによるPDFレンダリングがイケてるテックメモ C# PDFiumでPDFを読み込む […]

comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

no image

デバイスコンテキスト

デバイスコンテキストとは何かを調べてみた。 Device Context=装置の状況。直訳すると意味わからん。状況という言葉があいまいで、背景・場面・状況・文脈という意味があるが、やっぱわからないこと …

no image

WinMergeのフィルタ

【2018/11/24追記】 この書きっぷりではあまりにもわかりずらいので、整理して追加情報を加えて新たな記事とした。 WinMegeのフィルタについて今すぐ知りたいならココを読め プログラマにとって …

PDFiumはPDFからテキスト抽出するのもちょー簡単

PDFiumを語るのに日本語はいらない。プログラマーはプログラム言語で語る。PDFiumの処理は、tryとfinallyのところだけを見てくれればよい。たったこれだけでPDFからテキストを抽出できるの …

マルチスレッドプログラミング(VB.net編)

マルチスレッドプログラミング(C++編)に続き、今度はVB.net編を公開。マルチスレッドプログラミング(C#編)はこちら。

no image

iTextSharpによるPDFファイルのページ分割

iTextSharpはフリーのPDF関連コンポーネントであり、いろんなことができるのは知っていた。ドットNET、つまりC#かVB使いであれば、けっこう簡単にPDFを操ることができるのだが、あいにくおい …