Сжатие PDF-файлов на Windows Server автоматически
У меня есть пользовательская система отправки PDF-файлов, в то время как довольно часто пользователи загружают PDF-файлы очень большого размера, которые изначально предназначались для печати, когда они нужны нам только для просмотра в Интернете. Мне нужно автоматически сжать их на сервере. Мы работаем под управлением Windows Server 2003. Сейчас у нас есть пользователь, который загружает PDF через SoftArtisans.FileUp
метод.
Мой вопрос: каков наилучший или самый простой способ сделать это на сервере автоматически после того, как пользователь загрузит PDF?
2 ответа
Почему бы не попробовать этот сайт. Использовал его раньше, и он работает нормально:
Библиотека 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, поставщика библиотеки.