Обрезать PDF без сохранения невидимого содержимого (.NET или ObjC)

#.net #objective-c #pdf #itextsharp

#.net #objective-c #PDF #itextsharp

Вопрос:

Я пытаюсь обрезать PDF с помощью .NET (используя PDF4NET или iTextSharp, но не закрытый для них) Или Objective-C (CGContextXXX, CGPDFXXX и т. Д.)… Но без сохранения невидимого содержимого!

В настоящее время я могу выполнить операцию обрезки, используя поле обрезки или область обрезки, но все невидимое содержимое по-прежнему присутствует в PDF…

Возможно ли это?

Спасибо (и извините, я француз …)

Ответ №1:

Для этой задачи вы можете попробовать Amyuni PDF Creator .Net. Вы могли бы использовать метод IacDocument .GetObjectsInRectangle для извлечения всех интересующих вас «графических объектов»:

IacDocument.Метод GetObjectsInRectangle

Метод GetObjectsInRectangle получает все объекты, которые находятся в указанном прямоугольнике.

Затем вы можете перебрать все объекты на странице и удалить те, которые вас не интересуют:

 //open a pdf document
document.Open (testfile,"");
IacPage page1 = document.GetPage (1);
Amyuni.PDFCreator.IacAttribute attribute = page1.AttributeByName ("Objects");
// listobj is an array list of graphic objects
System.Collections.ArrayList listobj = (System.Collections.ArrayList) attribute.Value;
foreach ( object pdfObj in listobj )
{
   // if pdfObj is not in the collection of interest
   // then call pdfObj.Delete();
}
 

Обновить:
Amyuni PDF Creator .Net версия 5.0 добавляет новый метод IacDocument.Redact, который также может быть полезен в подобных сценариях:

Метод Redact извлекает все объекты указанного типа в указанном прямоугольнике, удаляет их и рисует сплошной цветной прямоугольник на их месте.

Отказ от ответственности: я работаю в Amyuni Technologies

Комментарии:

1. Спасибо. Одна (еще) проблема: если есть «большой» объект (например, строка), который начинается внутри прямоугольника, но заканчивается очень далеко… Это тоже будет включено, не так ли? Можно ли «уменьшить» этот объект, чтобы он идеально вписывался в прямоугольник?

2. ingham GetObjectsInRectangle позволяет вам выбирать, хотите ли вы сохранить пересекающиеся элементы или нет, но если вы хотите сохранить только часть каждого из них, тогда вам нужно будет использовать обрезку, извините.

3. Я пробую ваше решение, я могу получить массив с нужным IacObject, но я не нахожу, как скопировать эти элементы на новую страницу (или как удалить все остальные объекты)…