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

BMPをJPEGに

ビットマップ(BMP)ファイルをJPEGファイルに変換できないものか。 そんなテーマが頭の中で渦巻いていた。 既存のアプリ(フリーソフトなど)を使えば簡単だが、 プログラム的にやるとなると、なかなか。 …

no image

zlibの研究結果

zip圧縮・解凍のフリーソフトであるzlibについていろいろと調べた結果。最新版の1.2.11を使ってzlibwapi.dllを作ることはできたが、それを実際に使ってみるとまともに動かなかった。圧縮は …

C#でzip圧縮と解凍したりasync/awaitで非同期処理をするソースコード公開

zipcopyという名の開発プロジェクトはここらで終わりにしようと思い至ったので、そのソースコードを公開する。 zipcopyのソースコード 開発環境はVisualStudio 2017 C#で、Nu …

PDFアレコレVer1系は1.02で打ち止めとするにあたって最後の強化をした

iTextSharp7を組み込んでVer2にしようというプランに移行するにあたって、心残りだったところをVer1.02として強化しておいた。

no image

CArrayで配列の配列(ネスト)を実現する方法

CArrayで配列の配列(ネスト)を実現したいことがよくある。 シンプルにこんなことやると、ビルドエラーになる。 typedef struct { // 構造体 CStringArray m_ary; …