Как конвертировать PDF файлы в изображение

Мне нужно конвертировать PDF файлы в изображения. Если PDF многостраничный, мне просто нужно одно изображение, которое содержит все страницы PDF.

Существуют ли решения с открытым исходным кодом, которые не оплачиваются как продукт Acrobat?

Ответы

Ответ 1

Следующая тема подходит для вашего запроса. преобразование файла PDF в изображение JPEG

Одним из решений является использование сторонней библиотеки. ImageMagick очень популярен, также доступен бесплатно. Вы можете получить упаковку .NET для этого здесь. Оригинальная страница загрузки ImageMagick находится здесь.

И вы также можете взглянуть на эту тему: как открыть страницу из PDF файла в pictureBox в С#

Если вы используете этот процесс для преобразования PDF в TIFF, вы можете использовать этот класс для извлечения растрового изображения из TIFF.

public class TiffImage
{
    private string myPath;
    private Guid myGuid;
    private FrameDimension myDimension;
    public ArrayList myImages = new ArrayList();
    private int myPageCount;
    private Bitmap myBMP;

    public TiffImage(string path)
    {
        MemoryStream ms;
        Image myImage;

        myPath = path;
        FileStream fs = new FileStream(myPath, FileMode.Open);
        myImage = Image.FromStream(fs);
        myGuid = myImage.FrameDimensionsList[0];
        myDimension = new FrameDimension(myGuid);
        myPageCount = myImage.GetFrameCount(myDimension);
        for (int i = 0; i < myPageCount; i++)
        {
            ms = new MemoryStream();
            myImage.SelectActiveFrame(myDimension, i);
            myImage.Save(ms, ImageFormat.Bmp);
            myBMP = new Bitmap(ms);
            myImages.Add(myBMP);
            ms.Close();
        }
        fs.Close();
    }
}

Используйте это так:

private void button1_Click(object sender, EventArgs e)
{
    TiffImage myTiff = new TiffImage("D:\\Some.tif");
    //imageBox is a PictureBox control, and the [] operators pass back
    //the Bitmap stored at that position in the myImages ArrayList in the TiffImage
    this.pictureBox1.Image = (Bitmap)myTiff.myImages[0];
    this.pictureBox2.Image = (Bitmap)myTiff.myImages[1];
    this.pictureBox3.Image = (Bitmap)myTiff.myImages[2];
}

Ответ 2

Вы можете использовать Ghostscript для преобразования PDF в изображения.

Чтобы использовать Ghostscript из .NET, вы можете взглянуть на библиотеку Ghostscript.NET (управляемая оболочка вокруг библиотеки Ghostscript).

Чтобы создать изображение из PDF с помощью Ghostscript.NET, взгляните на RasterizerSample.

Чтобы объединить несколько изображений в одно изображение, посмотрите этот пример: http://www.niteshluharuka.com/2012/08/combine-several-images-to-form-a-single-image-using-c/#

Ответ 3

Что касается 2018 года, до сих пор нет простого ответа на вопрос, как преобразовать PDF в изображение в С#; многие библиотеки используют GhostScript, лицензированный по AGPL, и в большинстве случаев для производственного использования требуется дорогая коммерческая лицензия.

Хорошей альтернативой может быть использование утилиты poppler 'pdftoppm', которая имеет лицензию GPL; его можно использовать из С# как инструмент командной строки, выполняемый с System.Diagnostics.Process. Инструменты Poppler хорошо известны в мире Linux, но также доступна сборка для Windows.

Если вы не хотите интегрировать pdftoppm самостоятельно, вы можете использовать мою оболочку poppler PdfRenderer (поддерживает как классическую .NET Framework, так и .NET Core) - это не бесплатно, но цены очень доступные.

Ответ 4

Механизм PDF, используемый в Google Chrome и называемый PDFium, имеет открытый исходный код по лицензии "BSD 3-clause". Я считаю, что это позволяет перераспределение при использовании в коммерческом продукте.

Существует .NET, обертка для него называется PdfiumViewer (NuGet), который хорошо работает в той мере, я пробовал. Он находится под лицензией Apache, которая также позволяет распространять.

(Обратите внимание, что это НЕ та же "оболочка", как https://pdfium.patagames.com/, для которой требуется коммерческая лицензия).

(Существует еще одна оболочка PDFium.NET, PDFiumSharp, но я не оценивал ее.)

На сегодняшний день, IMO, это может быть лучшим выбором PDF-библиотек с открытым исходным кодом (бесплатно как в пиве) для выполнения работы, которые НЕ накладывают ограничений на закрытый/коммерческий характер программного обеспечения, использующего их. Я не думаю, что что-либо еще в ответах здесь удовлетворяет этим критериям, насколько мне известно.

Ответ 5

Этот пакет Nuget: https://www.nuget.org/packages/Pdf2Png/

доступен бесплатно и защищен только лицензией MIT, которая очень открыта.

Я проверил немного, и это код, чтобы заставить его конвертировать PDF в изображение. (Сохраняет изображение в папке отладки).

using cs_pdf_to_image;
using PdfToImage;

    private void BtnConvert_Click(object sender, EventArgs e)
    {
        if(openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            try
            {
                string PdfFile = openFileDialog1.FileName;
                string PngFile = "Convert.png";
                List<string> Conversion = cs_pdf_to_image.Pdf2Image.Convert(PdfFile, PngFile);
                Bitmap Output = new Bitmap(PngFile);
                PbConversion.Image = Output;
            }
            catch(Exception E)
            {
                MessageBox.Show(E.Message);
            }
        }
    }

Ответ 6

Используйте tanPDF. Это точная и небольшая часть цены Ghostscript для коммерческого использования. И ImageMagick тоже, так как это требует Ghostscript.

tanPDF использует Skia, поэтому, если вы хотите, чтобы одно изображение содержало все страницы, нарисуйте каждую страницу SKImage на SKCanvas.

Отказ от ответственности: я автор.

Ответ 7

Используя стандартные библиотеки Android, такие как AppCompat, вы можете конвертировать все страницы PDF в изображения. Этот способ очень быстрый и оптимизированный. Ниже приведен код для получения отдельных изображений страницы PDF. Может быть, это полезно для вас, так как это очень быстро & быстро.

ParcelFileDescriptor fileDescriptor = ParcelFileDescriptor.open(new File("pdfFilePath.pdf"), MODE_READ_ONLY);
    PdfRenderer renderer = new PdfRenderer(fileDescriptor);
    final int pageCount = renderer.getPageCount();
    for (int i = 0; i < pageCount; i++) {
        PdfRenderer.Page page = renderer.openPage(i);
        Bitmap bitmap = Bitmap.createBitmap(page.getWidth(), page.getHeight(),Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        canvas.drawColor(Color.WHITE);
        canvas.drawBitmap(bitmap, 0, 0, null);
        page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
        page.close();

        if (bitmap == null)
            return null;

        if (bitmapIsBlankOrWhite(bitmap))
            return null;

        String root = Environment.getExternalStorageDirectory().toString();
        File file = new File(root + filename + ".png");

        if (file.exists()) file.delete();
        try {
            FileOutputStream out = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
            Log.v("Saved Image - ", file.getAbsolutePath());
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

=============================================== ========

private static boolean bitmapIsBlankOrWhite(Bitmap bitmap) {
    if (bitmap == null)
        return true;

    int w = bitmap.getWidth();
    int h = bitmap.getHeight();
    for (int i =  0; i < w; i++) {
        for (int j = 0; j < h; j++) {
            int pixel =  bitmap.getPixel(i, j);
            if (pixel != Color.WHITE) {
                return false;
            }
        }
    }
    return true;
}

Ответ 8

(Отказ от ответственности я работал над этим компонентом в Software Siglo XXI)

Вы можете использовать Super Pdf2Image Converter для создания многостраничного файла TIFF со всеми отображаемыми страницами из PDF в высоком разрешении. Он доступен как для 32, так и для 64 бит и очень дешев и эффективен. Я бы порекомендовал вам попробовать.

Только одна строка кода...

GetImage(outputFileName, firstPage, lastPage, resolution, imageFormat)

Converts specifies pages to image and save them to outputFileName (tiff allows multi-page or creates several files)

Вы можете посмотреть здесь: http://softwaresigloxxi.com/SuperPdf2ImageConverter.html