2011年3月23日水曜日

PDFから画像ファイルを作成(GhostScriptLiteを使用)

PDFから画像ファイルを作成(GhostScriptLiteを使用)
複数ページ対応する為に、tiff形式にしました。

pdfを一旦、画像ファイル(tiff)に変換後
画像下部を白抜き編集した後に、再度pdfを作成しました。

pdfから画像を作成するのは、GhostScriptLiteを使用 Ver9.0
画像の編集は、PdfSharpを使用しました。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using PdfSharp;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using PdfSharp.Drawing;
using System.Drawing;
using System.Drawing.Imaging;

namespace PDF得意先発注Clear
{
class Program
{
static void Main(string[] args)
{
if (args.Length == 0)
{
Console.WriteLine("コマンドライン引数はありません。");
return;
}

String vTempFile = args[0] + "_.bmp";

// ファイルを削除する
if (System.IO.File.Exists(vTempFile))
{
try { File.Delete(vTempFile); }
catch { };
}

if (System.IO.File.Exists(vTempFile))
{
try { File.Delete(vTempFile); }
catch { };
}

//PDFを画像に変換 PDFConvertはPDFtoImage.csにある
PDFConvert converter = new PDFConvert();
bool Converted = false;

//Setup the converter
converter.RenderingThreads = -1;

converter.TextAlphaBit = -1;

converter.OutputToMultipleFile = false;
converter.FirstPageToConvert = -1;
converter.LastPageToConvert = -1;
converter.FitPage = false;
converter.JPEGQuality = 100; //100は圧縮しない
//converter.OutputFormat = "jpeg";
converter.OutputFormat = "tifflzw";

Converted = converter.Convert(args[0].ToString(), vTempFile);

// Open the output document
PdfDocument outputDocument = new PdfDocument();

//複数ページに対応 2011/03/23
//画像の読み取り
var ReadImage = Image.FromFile(vTempFile);

//ディメンジョンリストを作成する
Guid[] DimensionList = ReadImage.FrameDimensionsList;

//ディメンジョンが続く限りループ
foreach(Guid dimens in DimensionList )
{
//フレームディメンジョンを作成し
var fd = new FrameDimension(dimens);

//ページ数を取得する
int Pages = ReadImage.GetFrameCount(fd);

//全頁処理対象
for (int frameIndex = 0; frameIndex < Pages; frameIndex++)
{
//アクティブフレームを切り替える
ReadImage.SelectActiveFrame(fd, frameIndex);

//新しいビットマップにコピーする
var img = new Bitmap(ReadImage);
img.SetResolution(ReadImage.HorizontalResolution, ReadImage.VerticalResolution);

//ページ追加
PdfPage page = outputDocument.AddPage();

using (XImage image = XImage.FromGdiPlusImage(img))
{
page.Width = image.PointWidth;
page.Height = image.PointHeight;

using (XGraphics gfx = XGraphics.FromPdfPage(page))
{

gfx.DrawImage(image, 0, 0);
var options = new XPdfFontOptions(PdfFontEmbedding.Always);

XPen pen = new XPen(XColors.White, Math.PI);

gfx.DrawRectangle(pen, XBrushes.White, 360, 640, 600, 870);
gfx.DrawRectangle(pen, XBrushes.White, 0, 720, 600, 870);
}
}
}
}
outputDocument.Save(args[0]);

ReadImage.Dispose();

//元ファイルを削除
File.Delete(vTempFile);
}
}
}

0 件のコメント:

コメントを投稿