2013-02-12 3 views
1

Может ли кто-нибудь сказать мне, как преобразовать объект PdfReader в PdfDocument?конвертировать PDF-документ в pdf-документ

Я прочитал файл на диске и преобразован в memystream, но мне он нужен как PdfDocument для других методов в моей программе на C#.

Я конвертирую заявку на использование iTextSharp вместо PdfSharp.

MemoryStream pdfstream = new MemoryStream(); 

/* Convert the attachment to an byte array */ 
byte[] pdfarray = (byte[])dr["Data"]; 
/* Write the attachment into the memory */ 
pdfstream.Write(pdfarray, 0, pdfarray.Length); 
/* Set the memorystream to the beginning */ 
pdfstream.Seek(0, System.IO.SeekOrigin.Begin); 

/* Open the pdf document */ 
PdfSharp.Pdf.PdfDocument document = PdfSharp.Pdf.IO.PdfReader.Open(pdfstream, PdfDocumentOpenMode.Modify); 
//iTextSharp.text.Document doc1 = iTextSharp.text.pdf.PdfReader.GetStreamBytes(
//ITS.pdf.PdfReader rdr = ITS.pdf.PdfReader(

string filename = DateTime.Now.Ticks.ToString() + "_" + dr["AttachmentName"].ToString(); 
string path = Path.Combine(FolderName, filename); 

document.Save(path); 
+0

Я не уверен, что это все еще так, но комментарий здесь - http://stackoverflow.com/a/2554230/855363 - предполагает, что это невозможно. – Snixtor

+1

@Snixtor комментарий только частично правильный nowerdays --- iText теперь ** делает ** содержит фреймворк для извлечения текста и изображений из существующих PDF-файлов, но в результате получается ** не ** готовый 'PdfDocument', а вместо этого последовательность групп букв и растровых изображений с данными позиционирования, никакой информации пунктов и т. д. больше. Поэтому для user1423958 следствие одно и то же: это невозможно (если он не потратит достаточно времени на разработку эвристики для создания этих недостающих структур из битов текста и изображения). – mkl

+0

@ user1423958 Вы, вероятно, должны объяснить, какие требования вам необходимо выполнить. Хотя вы не сможете создать 'PdfDocument' из некоторого' PdfReader', вам может потребоваться только экземпляр 'PdfStamper' или' PdfCopy'. – mkl

ответ

2

Я думаю, что вы можете сделать что-то вроде этого (примечание код не работает или испытано, возможно, потребуется подправить):

using (MemoryStream ms = new MemoryStream()) 
{ 
    Document doc = new Document(PageSize.A4, 50, 50, 15, 15); 

    PdfWriter writer = PdfWriter.GetInstance(doc, ms); 

    using (var rdr = new PdfReader(filePath)) 
    { 
     PdfImportedPage page; 

     for(int i = 1; i <= rdr.PageCount; i++) 
     { 
      page = writer.GetImportedPage(templateReader, i) 

      writer.DirectContent.AddTemplate(page, 0, 0); 

      doc.NewPage(); 
     } 
    } 
} 

Это будет читать на странице PDF постранично и вывода его на свой документ.

+0

Downvoted, потому что подобные примеры вызывают огромное количество вопросов поддержки, таких как: «размер страницы скопированного контента отличается от исходного документа», «все аннотации исчезли после копирования» и т. Д. Люди должны прочитать документацию : http://www.manning.com/lowagie2/samplechapter6.pdf PdfStamper и PdfCopy - это классы, которые следует использовать в таких случаях. См. Также http://stackoverflow.com/questions/14770942/itext-pdf-merge-document-overflow-outside-pdf-text-truncated-page-and-not-di/14771651 «Интересно, почему так много людей находят неправильные примеры сначала ... » –

+1

@Bruno - тогда, возможно, вам следует предоставить ответ, а не просто downvoting. Это отвечает на вопрос - pdf-документ из PDF-ридера. Я не знаю контекста его просьбы или того, что он делает с этим, это может быть справедливо. – Paddy

+3

P.S. Когда вы начнете взимать лицензию на свой продукт, предоставление лучшей документации за деньги может оказаться полезным, а не просто продавать книги. – Paddy

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