2

次のコードはPDFファイルをブラウザにストリーミングしますが、ディスク(c:\ myfile.pdf)に保存したい...

Dim FilePath As String = Server.MapPath("/docs/templates/page_1_cover.pdf")
Dim reader As New PdfReader(FilePath)

Dim output As MemoryStream = New MemoryStream()
Dim stamper As PdfStamper = New PdfStamper(reader, output)

stamper.AcroFields.SetField("APPLICANT NAME", "KnowlegeZone")


reader.Close()
stamper.Close()


Response.AddHeader("Content-Disposition", "attachment; filename=YourPDF_I9.pdf")
Response.ContentType = "application/pdf"

Response.BinaryWrite(output.ToArray())
Response.End()

私はiTextSharpを使用しています。

4

3 に答える 3

4

これは、File を呼び出すのと同じくらい簡単です。WriteAllBytes

Response.AddHeader("Content-Disposition", "attachment; filename=YourPDF_I9.pdf")
Response.ContentType = "application/pdf"

Dim data = output.ToArray();

File.WriteAllBytes("c:\\myfile.pdf",data)

Response.BinaryWrite(data)
Response.End()
于 2012-10-18T06:18:10.860 に答える
1

このソリューションでは、他の方法を使用する代わりに、「PdfStamper」を使用してファイルを保存できます。

Dim FilePath As String = Server.MapPath("/docs/templates/page_1_cover.pdf")
Dim reader As New PdfReader(FilePath)

Dim newfile As FileStream
newfile = New FileStream(Server.MapPath("/docs/output/go.pdf"), FileMode.Create, FileAccess.Write)

Dim stamper As PdfStamper = New PdfStamper(reader, newfile)

stamper.AcroFields.SetField("APPLICANT NAME", "han")


reader.Close()
stamper.Close()
于 2012-10-18T06:18:29.080 に答える
0
<%@ WebHandler Language="C#" Class="mergeByteForms" %>
using System;
using System.IO;
using System.Web;
using iTextSharp.text;
using iTextSharp.text.pdf;

public class mergeByteForms : IHttpHandler {
  HttpServerUtility Server;
  public void ProcessRequest (HttpContext context) {
    Server = context.Server;
    HttpResponse Response = context.Response;
    Response.ContentType = "application/pdf";
    using (Document document = new Document()) {
      using (PdfSmartCopy copy = new PdfSmartCopy(
        document, Response.OutputStream) ) 
      {
        document.Open();
        for (int i = 0; i < 2; ++i) {
          PdfReader reader = new PdfReader(_getPdfBtyeStream(i.ToString()));
          copy.AddPage(copy.GetImportedPage(reader, 1));
        }
      }
    }
  }
  public bool IsReusable { get { return false; } }

// simulate your method to use __one__ byte stream for __one__ PDF  
  private byte[] _getPdfBtyeStream(string data) {
// replace with __your__ PDF template
    string pdfTemplatePath = Server.MapPath(
      "~/app_data/template.pdf"
    );
    PdfReader reader = new PdfReader(pdfTemplatePath);
    using (MemoryStream ms = new MemoryStream()) {
      using (PdfStamper stamper = new PdfStamper(reader, ms)) {
        AcroFields form = stamper.AcroFields;
// replace this with your form field data
        form.SetField("title", data);
        // ...
// this is __VERY__ important; since you're using the same fillable
// PDF, if you don't set this property to true the second page will
// lose the filled fields.          
        stamper.FormFlattening = true;
      }
      return ms.ToArray();
    }
  }
}
于 2012-10-18T06:40:39.233 に答える