2009-08-03 11 views
0

Question 298829は、PDFを線形化してページごとにユーザーのブラウザにストリーミングする方法を説明しているため、ユーザーはドキュメントを表示する前にドキュメント全体をダウンロードするまで待つ必要はありません。私たちはこのようなPDFをうまく使ってきましたが、今や新たな皺を抱えています。ページ単位でストリーミングをしたいのですが、PDF文書の前に新しいカバーページを挿入する。 (カバーページには日付などの重要な情報が含まれるため、ディスク上のPDFにカバーページを含めることは現実的ではありません)。ブラウザにストリーミングするために、リニアライズされたPDFにカバーページをすばやく追加しますか?

これを支援するために、プレリニアライズされたPDFにカバーページを追加し、ストリーミング可能で線形化されたPDFを出力しますか?最大の関心事は、PDFをマージする合計時間ではなく、マージされたドキュメントの一部をユーザーにストリーミングできるかどうかです。

我々はitextsharpでこれを行うにしようとしていたが、それはライブラリが出力線形化されたPDFできないことが判明。 (http://itext.ugent.be/library/question.php?id=21を参照)それにもかかわらず、次のASP.NET /itextsharpスクラッチコードは、私たちが考えているAPIの種類を示しています。特に、itextsharp常に出力線形化PDFファイルならば、このようなものはすでに解決策になるかもしれません:

public class StreamPdf : IHttpHandler 
{ 
     public void ProcessRequest(HttpContext context) 
     { 
      context.Response.ContentType = "application/pdf"; 
      RandomAccessFileOrArray ramFile = new RandomAccessFileOrArray(@"C:\bigpdf.pdf"); 
      PdfReader reader1 = new PdfReader(ramFile, null); 

      Document doc = new Document(); 

      // We'll stream the PDF to the ASP.NET output 
      // stream, i.e. to the browser: 
      PdfWriter writer = PdfWriter.GetInstance(doc, context.Response.OutputStream); 

      writer.Open(); 
      doc.Open(); 

      PdfContentByte cb = writer.DirectContent; 

      // output cover page: 
      BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); 
      Font font = new Font(bf, 11, Font.NORMAL); 
      ColumnText ct = new ColumnText(cb); 
      ct.SetSimpleColumn(60, 300, 600, 300 + 28 * 15, 15, Element.ALIGN_CENTER); 
      ct.AddText(new Phrase(15, "This is a cover page information\n", font)); 
      ct.AddText(new Phrase(15, "Date: " + DateTime.Now.ToShortDateString() + "\n", font)); 
      ct.Go(); 

      // output src document: 
      int i = 0; 
      while (i < reader1.NumberOfPages) 
      { 
       i++; 

       // add next page from source PDF: 
       doc.NewPage(); 
       PdfImportedPage page = writer.GetImportedPage(reader1, i); 
       cb.AddTemplate(page, 0, 0); 

       // use something like this to flush the current page to the 
       // browser: 
       writer.Flush(); 
       s.Flush(); 
       context.Response.Flush(); 


      } 
      doc.Close(); 
      writer.Close(); 
      s.Close(); 
     } 
    } 
} 

は、理想的には、.NETライブラリを探しているが、それは同様に他のオプションを聞い価値があるだろう。あなたはGhostscriptを試みることができる

答えて

0

、私は一緒にPDFのステッチするために、その可能性を考えるが、それはPDFに来るとき線形化について知りません。私はGhostScript dllで直接使用できるC#GhostScript Wrapperを持っていますが、これはPDFをマージするために変更できると確信しています。連絡先:redmanscave.blogspot.com

関連する問題