2016-04-01 1 views
1

благодарит за потраченное время, чтобы прочитать мою странную проблему с PDFSharp.PDFSharp сокращает ландшафтные страницы с помощью C# и WPF

Я использую PDFSharp Library Version 1.50.4000.0 (я обновляюсь с версии 1.3.2 и имею такую ​​же проблему) в то время, чтобы защитить файл PDF с паролем.

Программа работает очень хорошо с портретными документами, но иногда у меня есть документы со смешанными ориентациями.

Но все время, когда страница пейзажа находится в документе, страница вырезана.

Код для справки:

PdfDocument document = PdfReader.Open(System.IO.Path.Combine("H:/Bloq1/", file.Name), "PasswordHere"); 

        PdfSecuritySettings securitySettings = document.SecuritySettings; 
        securitySettings.OwnerPassword = "PasswordHere"; 


        securitySettings.PermitAccessibilityExtractContent = false; 
        securitySettings.PermitAnnotations = false; 
        securitySettings.PermitAssembleDocument = false; 
        securitySettings.PermitExtractContent = false; 
        securitySettings.PermitFormsFill = true; 
        securitySettings.PermitFullQualityPrint = true; 
        securitySettings.PermitModifyDocument = false; 
        securitySettings.PermitPrint = true; 

        document.Save(System.IO.Path.Combine("H:/Bloq1/", file.Name)); 

        tbx.Text = "Complete"; 
        tbx.Background = Brushes.ForestGreen; 

Спасибо заранее за ваше время чтения или ответа на этот вопрос = D

**************** ************* решаемые ************************************ *********

переключается на iTextSharp и протестировать пару документов и работает довольно хорошо, я поделюсь кодом для справки:

private void Button_Full(object sender, RoutedEventArgs e)//PROTEGE PDF PERMITIENDO IMPRESION 
    { 
     string Password = "password"; 

     DirectoryInfo dir = new DirectoryInfo("H:/Bloq1/"); 

     if(dir.GetFiles("*.pdf").Length ==0) 
     { 
      MessageBox.Show("There are no files in the default directory", "No Files", MessageBoxButton.OK, MessageBoxImage.Warning); 
      tbx.Background = Brushes.OrangeRed; 
      tbx.Text = "No Files Found"; 
     } 
     else 
     { 
      tbx.Background = Brushes.White; 
      tbx.Text = "Protecting...."; 

      foreach (FileInfo file in dir.GetFiles("*.pdf")) 
      { 
       try 
       {  
        string InputFile = System.IO.Path.Combine("H:/Bloq1/", file.Name); 
        string OutputFile = System.IO.Path.Combine("H:/Bloq1/", "@"+file.Name); 
        using (Stream input = new FileStream(InputFile, FileMode.Open, FileAccess.Read, FileShare.Read)) 
        { 
         using (Stream output = new FileStream(OutputFile, FileMode.Create, FileAccess.Write, FileShare.None)) 
         { 
          PdfReader.unethicalreading = true; 
          PdfReader reader = new PdfReader(input);         
          PdfEncryptor.Encrypt(reader, output, true, null, Password, PdfWriter.AllowPrinting);         

         } 
        } 

        file.Delete(); 
        File.Move(@"H:\Bloq1\@"+file.Name, @"H:\Bloq1\"+file.Name); 

        tbx.Text = "Full Protected"; 
        tbx.Background = Brushes.ForestGreen; 
       } 
       catch (Exception ex) 
       { 
        tbx.Text = "Error in: " + file.Name + ex; 
        tbx.Background = Brushes.IndianRed; 

       } 
      } 
     }      
    } 
+2

Возможная Дубликат [Страница усечение в правой части при альбомной ориентации с использованием trimmargins PDFsharp] (http://stackoverflow.com/questions/10948731/page-truncate-in-right-side-for-landscape- Ориентация-с-trimmargins-using-pdf) –

+0

В сообщении, которое вы связываете, это рендеринг нового pdf. Я пытаюсь защитить существующий, спасибо за чтение. – Kuri

ответ

0

переключается на iTextSharp и протестировать пару документов и работает довольно хорошо, я поделюсь кодом ссылки в верхней части.

Спасибо всем

0

Если вы используете версию исходного кода PDFsharp вы можете сделать это изменение в PdfPage.cs, чтобы увидеть, если он решит вашу проблему:

internal PdfPage(PdfDictionary dict) 
    : base(dict) 
{ 
    // Set Orientation depending on /Rotate. 
    //int rotate = Elements.GetInteger(InheritablePageKeys.Rotate); 
    //if (Math.Abs((rotate/90)) % 2 == 1) 
    // _orientation = PageOrientation.Landscape; 
} 

Я был бы рад видеть обратную связь, если вы должны делать дальше изменения, чтобы заставить его работать.

Смотрите также:
http://forum.pdfsharp.net/viewtopic.php?p=9591#p9591

+0

Я переключаюсь на itextsharp, потому что у меня нет исходного кода versión = (, я поделюсь кодом в верхней части, спасибо за ответ @ThomasH – Kuri

+0

Исходный код на CodePlex, SourceForge, GitHub. –

2

Для тех, кто верит «я переключился на IText» это не ответ, я нашел «исправить» для PDFsharp.

Без погружения в исходный код PDFSharp, похоже, делает избыточное вращение на ландшафтных страницах. Это скорректировало ландшафтные страницы в документах, с которыми я работал, и имело как портретные, так и альбомные страницы.

PdfPages pageCollection = pdfDoc.Pages; 
     for (int i = 0; i < pageCollection.Count; i++) 
     { 
      if pageCollection[i].Orientation.ToString().Equals("Landscape")) 
      { 
       if (pageCollection[i].Rotate == 90) 
       { 
        pageCollection[i].Orientation = ageOrientation.Portrait; 
       } 
      } 
     } 
    } 
Смежные вопросы