2016-09-12 4 views
0

Мне нужно удалить первые несколько страниц PDF-файла. По-видимому, самый простой способ сделать это - создать его копию, а не дублировать нежелательные страницы. Это работает, но они выглядят намного меньше, чем должны. Есть идеи?Почему мой скопированный PDF-файл неправильный?

Как это должно выглядеть How it should look

Как это выглядит на самом деле How it actually looks

 private static void ClipSpecificPDF(string input, string output, int pagesToCut) 
    { 

     PdfReader myReader = new PdfReader(input); 

     using (FileStream fs = new FileStream(output, FileMode.Create, FileAccess.Write, FileShare.None)) 
     { 
      using (Document doc = new Document()) 
      { 
       using (PdfWriter myWriter = PdfWriter.GetInstance(doc, fs)) 
       { 

        //Open the desitination for writing 
        doc.Open(); 
        //Loop through each page that we want to keep 
        for (int i = pagesToCut; i < myReader.NumberOfPages; i++) 
        { 

         //Add a new blank page to destination document 
         var PS = myReader.GetPageSizeWithRotation(i); 
         myWriter.SetPageSize(PS); 
         doc.NewPage(); 

         //Extract the given page from our reader and add it directly to the destination PDF 
         myWriter.DirectContent.AddTemplate(myWriter.GetImportedPage(myReader, i + 1), 0, 0); 

        } 
        //Close our document 
        doc.Close(); 
       } 
      } 
     } 
    } 
+0

Какие типы myReader и myWriter соответственно? Являются ли эти типы из iText? –

+1

Видимо, вы взяли наихудший пример, который вы могли найти. Почему, почему никто не читал официальную документацию ??? –

+0

Я добавил информацию о типе. –

ответ

1

Проблема вы описываете объясняется в FAQ. Например, в ответ на вопросы:

Использование PdfWriter манипулировать PDF документы очень плохая идея. Прочитайте chapter 6 of my book, чтобы узнать, почему это плохая идея, и взгляните на таблицу 6.1, чтобы узнать, какой класс лучше подходит.

В той же главе вы найдете пример SelectPages. Предположим, что вы хотите создать новый PDF, содержащий только страницы 4 до 8. В этом случае, вы просто используете метод SelectPages() и PdfStamper:

PdfReader reader = new PdfReader(src); 
reader.SelectPages("4-8"); 
PdfStamper stamper = new PdfStamper(reader, new FileStream(dest, FileMode.Create, FileAccess.Write)); 
stamper.Close(); 
reader.Close(); 

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

Ваш подход плохой, потому что вы не уважаете исходный размер страницы: вы копируете документ с буквенным (?) Форматом в документ со страницами А4. Если происхождение страницы не соответствует нижнему левому углу, части вашего документа будут невидимыми. Если в вашем PDF-файле есть интерактивные функции, они будут потеряны. Из всех возможных примеров, которые вы могли бы выполнить, вы выбрали худший ...

Смежные вопросы