Обрезать один дюйм файла PDF - PullRequest
1 голос
/ 20 января 2020

Мне нужно изменить размер одностраничного PDF-файла с 8X11 дюймов до 8X9 дюймов (или любого размера) без изменения размера содержимого вообще.

Как я могу сделать это в C#?

Спасибо

1 Ответ

1 голос
/ 11 февраля 2020

Это должно быть возможно при использовании любой приличной библиотеки PDF общего назначения.

Например, чтобы обрезать 1 дюйм справа, используя iText 7:

using (PdfReader reader = new PdfReader(SOURCE_PDF))
using (PdfWriter writer = new PdfWriter(TARGET_PDF))
using (PdfDocument document = new PdfDocument(reader, writer))
{
    for (int i = 1; i <= document.GetNumberOfPages(); i++)
    {
        PdfPage page = document.GetPage(i);
        Rectangle cropBox = page.GetCropBox();
        cropBox.SetWidth(cropBox.GetWidth() - 72);
        page.SetCropBox(cropBox);
    }
}

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

        cropBox.SetWidth(cropBox.GetWidth() - 72);

на

        cropBox.SetWidth(88f * 72f / 25.4f);

Размеры рамки обрезки даны в единицах пространства пользователя по умолчанию, которые в свою очередь по умолчанию составляют 1⁄72 дюйма. Таким образом, чтобы задать размер в мм, нужно сначала умножить это число на (72 / 25,4).


Два замечания:

  • На самом деле единица пространства пользователя по умолчанию может отличаться, если задано свойство страницы UserUnit , которое указано как

    положительное число, которое должно давать размер единиц пространства пользователя по умолчанию , кратно 1⁄72 дюйма. Диапазон поддерживаемых значений зависит от реализации.

    Значение по умолчанию: 1,0 (единица пространства пользователя составляет 1⁄72 дюйма).

    (ISO 32000-1, Таблица 30 - Записи в объекте страницы)

    Это свойство используется редко, хотя, в частности, из-за бита «Диапазон поддерживаемых значений должен зависеть от реализации», поэтому я проигнорировал его выше .

  • Если вы не хотите обрезать , а вместо этого увеличить область страницы, вам, вероятно, потребуется не только увеличить CropBox , а также MediaBox .

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

    (ISO 32000-1, раздел 14.11.2.1 Границы страницы / Общее)

    PdfPage имеет аналогичные методы GetMediaBox и SetMediaBox, которые можно использовать для увеличения MediaBox .

...