17

HTMLドキュメント(URLではなくファイル)を画像に、またはPDFを画像に変換する方法はありますか?

Ghostscript DLL を使用して上記を実行できます。Ghostscript DLL を使用せずに実行できる方法はありますか?

C# Windows アプリケーションを開発しています。

4

8 に答える 8

4

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
于 2012-10-11T03:35:05.673 に答える
2

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();
于 2012-10-11T04:14:01.153 に答える
1

githubのこの例に基づいてdocnetを使用して、非常にシンプルで機能的なこれを行いました。

この例で使用される pdf

//...
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);
}

于 2021-10-21T14:24:58.017 に答える