Сжатие PDF-файлов на Windows Server автоматически

У меня есть пользовательская система отправки PDF-файлов, в то время как довольно часто пользователи загружают PDF-файлы очень большого размера, которые изначально предназначались для печати, когда они нужны нам только для просмотра в Интернете. Мне нужно автоматически сжать их на сервере. Мы работаем под управлением Windows Server 2003. Сейчас у нас есть пользователь, который загружает PDF через SoftArtisans.FileUp метод.

Мой вопрос: каков наилучший или самый простой способ сделать это на сервере автоматически после того, как пользователь загрузит PDF?

2 ответа

Решение

Почему бы не попробовать этот сайт. Использовал его раньше, и он работает нормально:

http://www.neeviapdf.com/PDFcompress/?w=code

Библиотека Docotic.Pdf может быть полезна в вашем случае.

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

Ниже приведен пример кода для такого сценария. Код:

  • перечисляет все изображения в данном файле
  • масштабирует эти изображения
  • удаляет неиспользуемые объекты и
  • оптимизирует PDF для быстрого просмотра в Интернете и сохраняет его в новый файл

Используя код, как в примере, вы сможете оптимизировать загруженные файлы.

public static void compressPdf(string path, string outputPath)
{
    using (PdfDocument doc = new PdfDocument(path))
    {
        foreach (PdfImage image in doc.Images)
        {
            // image that is used as mask or image with attached mask are
            // not good candidates for recompression
            // 
            // also, small images might be used as mask even though image.IsMask for them is false
            //
            if (!image.IsMask && image.Mask == null && image.Width >= 8 && image.Height >= 8)
            {
                if (image.ComponentCount == 1)
                {
                    // for black-and-white images fax compression gives better results
                    image.RecompressWithGroup4Fax();
                }
                else
                {
                    // scale image and recompress it with JPEG compression
                    // this will cause image to be smaller in terms of bytes
                    // please note that some of the image quality will be lost
                    image.Scale(0.5, PdfImageCompression.Jpeg, 65);

                    // or you can just recompress the image without scaling
                    //image.RecompressWithJpeg(65);

                    // or you can resize the image to specific size
                    //image.ResizeTo(640, 480, PdfImageCompression.Jpeg, 65);
                }
            }
        }

        doc.SaveOptions.RemoveUnusedObjects = true;

        // this option causes smaller files but 
        // such files can only be opened with Acrobat 6 (released in 2003) or newer
        doc.SaveOptions.UseObjectStreams = true;

        // this option will cause output file to be optimized for Fast Web View
        doc.SaveOptions.Linearize = true;

        doc.Save(outputPath);
    }
}

Отказ от ответственности: я работаю на Bit Miracle, поставщика библиотеки.

Другие вопросы по тегам