2016-04-29 2 views
0

Я сделал некоторое слияние файлов с помощью PDFsharp раньше, и теперь я пытаюсь изменить несколько файлов (вставить или удалить некоторые страницы), и я столкнулся с проблемой, что библиотека не видит страницы. Он говорит, что PageCount == 0 и я не могу найти страницы в объекте (во время отладки). И конечно, я не могу выполнять свою текущую работу. Я использую этот очень простой код:PDFsharp не видит страниц в документах

var destinationPdf = new PdfDocument(destinationFilePath); 
Int32 count = destinationPdf.PageCount; 

А также, вот код, который я использовал для слияния файлов в один PDF перед:

public class PdfCreator 
{ 
    private PdfDocument document; 

    public PdfCreator() 
    { 
     this.document = new PdfDocument(); 
    } 

    public void AddImage(String imageFilePath) 
    { 
     PdfPage newPage = this.document.AddPage(); 
     XGraphics xGraphics = XGraphics.FromPdfPage(newPage); 
     XImage image = XImage.FromFile(imageFilePath); 
     xGraphics.DrawImage(image, 0, 0); 
    } 

    public void AddPdfFile(String pdfFilePath) 
    { 
     PdfDocument inputDocument = PdfReader.Open(pdfFilePath, PdfDocumentOpenMode.Import); 
     Int32 count = inputDocument.PageCount; 
     for (Int32 currentPage = 0; currentPage < count; currentPage++) 
     { 
      PdfPage page = inputDocument.Pages[currentPage]; 
      this.document.AddPage(page); 
     } 
    } 

    public void AddTextFile(String txtFilePath) 
    { 
     PdfPage newPage = this.document.AddPage(); 
     XGraphics xGraphics = XGraphics.FromPdfPage(newPage); 
     var xFont = new XFont("Times New Roman", 12, XFontStyle.Bold); 
     var xTextFormatter = new XTextFormatter(xGraphics); 
     var rect = new XRect(30, 30, 540, 740); 
     xGraphics.DrawRectangle(XBrushes.Transparent, rect); 
     xTextFormatter.Alignment = XParagraphAlignment.Left; 
     xTextFormatter.DrawString(File.ReadAllText(txtFilePath), xFont, XBrushes.Black, rect, XStringFormats.TopLeft); 
    } 

    public void Save(String destinationFilePath) 
    { 
     if (this.document.Pages.Count > 0) 
     { 
      this.document.Save(destinationFilePath); 
      this.document.Close(); 
     } 
    } 
} 
+0

Возможный дубликат [слияния двух ошибок PDF файлов с помощью PDFsharp] (http://stackoverflow.com/questions/32756544/error-merging-two-pdf-files-using-pdfsharp) –

+0

@ThomasH кажется, быть дублированным, потому что причина проблемы и решение одинаковы, но на самом деле, я уверен, что «симптомы» определенно разные. – user2216

ответ

3

Ваш код

var destinationPdf = new PdfDocument(destinationFilePath); 
Int32 count = destinationPdf.PageCount; 

создает новый документ в памяти - и, безусловно, этот документ пуст.

Используйте PdfReader.Open, чтобы создать документ в памяти из существующего файла.

Когда я поместите курсор мыши над PdfDocument в коде я получаю эту подсказку:

Создает новый PDF-документ с указанным именем файла. Файл сразу же создается и фиксируется до тех пор, пока документ не будет закрыт, по адресу , в тот момент, когда документ будет сохранен автоматически. Не вызывайте Save() для документов, созданных с помощью этого конструктора, просто вызовите Close(). Чтобы открыть существующий PDF-файл и импортировать его, используйте класс PdfReader.