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を試みることができる