HTMLドキュメント(URLではなくファイル)を画像に、またはPDFを画像に変換する方法はありますか?
Ghostscript DLL を使用して上記を実行できます。Ghostscript DLL を使用せずに実行できる方法はありますか?
C# Windows アプリケーションを開発しています。
HTMLドキュメント(URLではなくファイル)を画像に、またはPDFを画像に変換する方法はありますか?
Ghostscript DLL を使用して上記を実行できます。Ghostscript DLL を使用せずに実行できる方法はありますか?
C# Windows アプリケーションを開発しています。
PDFから画像への変換にはLibPdfを使用します
LibPdfライブラリは、PDFファイルを画像に変換します。サポートされている画像形式はPNGとBMPですが、簡単に追加できます。
使用例:
using (FileStream file = File.OpenRead(@"..\path\to\pdf\file.pdf")) // in file
{
var bytes = new byte[file.Length];
file.Read(bytes, 0, bytes.Length);
using (var pdf = new LibPdf(bytes))
{
byte[] pngBytes = pdf.GetImage(0,ImageType.PNG); // image type
using (var outFile = File.Create(@"..\path\to\pdf\file.png")) // out file
{
outFile.Write(pngBytes, 0, pngBytes.Length);
}
}
}
ImageMagick、この無料で利用できる強力なツールもご覧ください。それはあなたが望むことをすることができ、またいくつかの.NETバインディング(そして他のいくつかの言語へのバインディング)を提供します。
最も単純な形式では、コマンドを作成するのと同じです。
convert file.pdf imagefile.png
PDFから画像への変換には、以下のいずれかのライブラリを使用できます
以下のAspose.pdf リンク を使用してください: http://www.aspose.com/docs/display/pdfnet/Convert+all+PDF+pages+to+JPEG+Images
コードサンプル:
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document(MyPdfPath));
using (FileStream imageStream = new FileStream(MyOutputImage.png, FileMode.Create))
{
Resolution resolution = new Resolution(300);
PngDevice pngDevice = new PngDevice(resolution);
pngDevice.Process(pdfDocument.Pages[PageNo], MyOutputImage);
imageStream.Close();
}
以下の Bytescout PDF レンダラー リンク を使用してください: http://bytescout.com/products/developer/pdfrenderersdk/convert-pdf-to-png-basic-examples
コードサンプル:
MemoryStream ImageStream = new MemoryStream();
RasterRenderer renderer = new RasterRenderer();
renderer.RegistrationName = "demo";
renderer.RegistrationKey = "demo";
// Load PDF document.
renderer.LoadDocumentFromFile(FilePath);
for (int i = 0; i < renderer.GetPageCount(); i++)
{
// Render first page of the document to PNG image file.
renderer.RenderPageToStream(i, RasterOutputFormat.PNG, ImageStream);
}
Image im = Image.FromStream(ImageStream);
im.Save("MyOutputImage.png");
ImageStream.Close();
githubのこの例に基づいてdocnetを使用して、非常にシンプルで機能的なこれを行いました。
//...
using Docnet.Core;
using System.IO;
using Docnet.Core.Models;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
//paths
string pathPdf = @"C:\pathToPdfFile\lorem-ipsum.pdf";
string finalPathWithFileName = @"C:\pathToFinalImageFile\finalFile.png";
//using docnet
using (var docReader = DocLib.Instance.GetDocReader(pathPdf, new PageDimensions(1080, 1920)))
{
//open pdf file
using (var pageReader = docReader.GetPageReader(0))
{
var rawBytes = pageReader.GetImage();
var width = pageReader.GetPageWidth();
var height = pageReader.GetPageHeight();
var characters = pageReader.GetCharacters();
//using bitmap to create a png image
using (var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb))
{
AddBytes(bmp, rawBytes);
using (var stream = new MemoryStream())
{
//saving and exporting
bmp.Save(stream, ImageFormat.Png);
File.WriteAllBytes(finalPathWithFileName, stream.ToArray());
};
};
};
};
//extra methods
private static void AddBytes(Bitmap bmp, byte[] rawBytes)
{
var rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
var bmpData = bmp.LockBits(rect, ImageLockMode.WriteOnly, bmp.PixelFormat);
var pNative = bmpData.Scan0;
Marshal.Copy(rawBytes, 0, pNative, rawBytes.Length);
bmp.UnlockBits(bmpData);
}