Я использую Aspose.Pdf для преобразования PDF в изображение, а затем конвертировать изображение обратно в PDF. Я хотел бы сохранить разрешение, ширину и высоту нового PDF-файла таким же, как и у исходного PDF-файла.
using (var newDocument = new Document())
{
using (var originalDocument = new Document("c:\\source.pdf"))
{
foreach (Aspose.Pdf.Page page in originalDocument.Pages)
{
if (page.Rotate != Aspose.Pdf.Rotation.None)
{
using (var ms = new MemoryStream())
{
// Create Jpegdevice with specified attributes
// Width, Height, Resolution, Quality
// Quality [0-100], 100 is Maximum
// Create Resolution object
Resolution resolution = new Resolution(Convert.ToInt32(page.ArtBox.Width), Convert.ToInt32(page.ArtBox.Height));
JpegDevice device = new JpegDevice(resolution, 100);
// Convert a particular page and save the image to stream
device.Process(page, ms);
var newPage = newDocument.Pages.Add();
// Set margins so image will fit, etc.
newPage.PageInfo.Margin.Bottom = 0;
newPage.PageInfo.Margin.Top = 0;
newPage.PageInfo.Margin.Left = 0;
newPage.PageInfo.Margin.Right = 0;
// Create an image object
Aspose.Pdf.Image image1 = new Aspose.Pdf.Image();
// Set the image file stream
image1.ImageStream = ms;
// Add the image into paragraphs collection of the section
newPage.Paragraphs.Add(image1);
// YES, save after every page otherwise we get out of memory exception
newDocument.Save(txtFolder.Text + "\\out.pdf");
}
}
else
{
newDocument.Pages.Add(page);
newDocument.Save(txtFolder.Text + "\\out.pdf");
}
}
}
}
Qustions
1> Исходный размер PDF составляет 18 МБ, ноПриведенный выше код создает большой файл размером 163 МБ. Я хотел бы сохранить размер, как он есть или, по крайней мере, несколько ближе к исходному размеру файла, сохраняя то же разрешение. Класс
2> Resolution
также принимает параметры int valueX
и int valueY
. И JpegDevice
класс принимает параметры int width
и int height
. Однако он не указывает unit
, выдерживает ли его в пунктах, пикселях, дюймах и т. Д.?
Согласно документации Aspose.Pdf
Преобразование из точки в пиксель зависит от свойства DPI (точек на дюйм) изображения. Например, если DPI изображения составляет 96 (96 пикселей на каждый дюйм), а его высота составляет 100 точек, его высота в пикселях составляет (100/72) * 96 = 133,3. Общая формула выглядит следующим образом: пиксели = (точек / 72) * DPI.
Однако это не отвечает на вопрос, какую единицу измерения задает API?
Оригинальный выпуск
Мы получаем PDF от наших клиентов. Некоторые из PDF-файлов, которые мы получаем, имеют поворот на 90 или 270 градусов. Однако, когда вы открываете их в Adobe или любом другом средстве просмотра PDF, ориентация страницы является правильной (она не горизонтальная или горизонтальная). Весь этот беспорядок, который я должен сделать, потому что Aspose.Pdf не может сохранять ту же самую ориентацию, когда изменяют вращение на Нет. Таким образом, предлагаемый подход заключается в преобразовании PDF в изображение и последнем преобразовании изображения обратно в Pdf
https://forum.aspose.com/t/cannot-set-cropbox-on-rotated-page/201659/3
https://forum.aspose.com/t/remove-rotation-from-a-document-and-set-it-upright/29170