2013-02-12 368 views
1

谁能告诉我如何将PdfReader对象转换为PdfDocument将pdfreader转换为pdfdocument

我读过一个磁盘文件并转换为内存流,但我需要它作为我的C#程序中其他方法的PdfDocument

我正在将应用程序转换为使用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 2013-02-12 10:27:14

+1

@Snixtor注释只是部分正确nowerdays --- iText now ** does **包含从现有的PDF中提取文本和图像的框架,但结果是**不是**准备好的“PdfDocument”,而是一个序列字母组和位图数据的位图,没有段落等信息了。因此,对于user1423958,结果是相同的:这是不可能的(除非他花费相当长的时间来开发启发式方法,从文本和图像位构建这些缺失的结构)。 – mkl 2013-02-12 11:00:08

+0

@ user1423958您可能应该说明您需要满足哪些要求。虽然您无法从某个“PdfReader”创建“PdfDocument”,但实际上您可能只需要一个“PdfStamper”或“PdfCopy”实例。 – mkl 2013-02-12 11:04:26

回答

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

因为这样的例子导致了大量的支持问题,如:“复制内容的页面大小与原始文档不同”,“所有注释在复制后都不见了”等等,人们应该阅读文档: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“我想知道为什么这么多人找到错误的例子第一...“ – 2013-02-16 15:06:21

+1

@布鲁诺 - 那么也许你应该提供一个答案,而不是只是downvoting。这回答了这个问题 - 来自pdf阅读器的pdf文档。我不知道他的要求的背景,或者他正在做什么,这可能是有效的。 – Paddy 2013-02-18 11:42:46

+3

P.S.当您开始为您的产品收取许可证时,提供更好的文档资料可能会有所帮助,而不仅仅是销售书籍。 – Paddy 2013-02-18 11:43:17