SORU
26 AĞUSTOS 2009, ÇARŞAMBA


Arama HTML PDF oluşturmak için wkhtmltopdf

Bir HTML dosyası bir PDF dosyası oluşturmak için çalışıyorum. Biraz etrafa baktıktan sonra buldum: mükemmel olmak wkhtmltopdf. Bu ara ihtiyacım var .ASP.NET sunucudan exe. Çalıştık:

    Process p = new Process();
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.FileName = HttpContext.Current.Server.MapPath("wkhtmltopdf.exe");
    p.StartInfo.Arguments = "TestPDF.htm TestPDF.pdf";
    p.Start();
    p.WaitForExit();

Tüm dosyaları sunucuda oluşturulan hiçbir başarı ile. Herkes doğru yönde bana bir işaretçi verebilir misiniz? Sitenin üst düzey dizinine wkhtmltopdf.exe dosya koydum. Her yerde tutulmalı var mı?


Düzenleme:Eğer dinamik olarak html pdf dosyaları oluşturmak için daha iyi çözümler varsa, lütfen bana bildirin.

CEVAP
9 Kasım 2009, PAZARTESİ


Güncelleme:
Cevabım aşağıda, pdf dosyası disk oluşturur. Ben daha sonra kullanıcıların bir indirme olarak tarayıcı bu dosya, bir akış. Akışı çıkışı için wkhtml2pdf yerine getirin ve doğrudan kullanıcı için göndermek için aşağıdaki izinleri vb dosya ile ilgili sorunlar bir sürü bypass edecek İndirdiği cevabı gibi bir şey kullanmayı düşünün.

Benim orijinal cevap:
Sunucu üzerinde IIS çalışan ASP.NET süreci (genellikle sanırım NETWORK_SERVİCE tarafından yazılabilir olduğundan PDF için bir çıkış yolu belirttiğinizden emin olun.

Bu (ve çalışıyor) gibi bir çıktı alırsınız:

/// <summary>
/// Convert Html page at a given URL to a PDF file using open-source tool wkhtml2pdf
/// </summary>
/// <param name="Url"></param>
/// <param name="outputFilename"></param>
/// <returns></returns>
public static bool HtmlToPdf(string Url, string outputFilename)
{
    // assemble destination PDF file name
    string filename = ConfigurationManager.AppSettings["ExportFilePath"]   "\\"   outputFilename   ".pdf";

    // get proj no for header
    Project project = new Project(int.Parse(outputFilename));

    var p = new System.Diagnostics.Process();
    p.StartInfo.FileName = ConfigurationManager.AppSettings["HtmlToPdfExePath"];

    string switches = "--print-media-type ";
    switches  = "--margin-top 4mm --margin-bottom 4mm --margin-right 0mm --margin-left 0mm ";
    switches  = "--page-size A4 ";
    switches  = "--no-background ";
    switches  = "--redirect-delay 100";

    p.StartInfo.Arguments = switches   " "   Url   " "   filename;

    p.StartInfo.UseShellExecute = false; // needs to be false in order to redirect output
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.RedirectStandardError = true;
    p.StartInfo.RedirectStandardInput = true; // redirect all 3, as it should be all 3 or none
    p.StartInfo.WorkingDirectory = StripFilenameFromFullPath(p.StartInfo.FileName);

    p.Start();

    // read the output here...
    string output = p.StandardOutput.ReadToEnd(); 

    // ...then wait n milliseconds for exit (as after exit, it can't read the output)
    p.WaitForExit(60000); 

    // read the exit code, close process
    int returnCode = p.ExitCode;
    p.Close(); 

    // if 0 or 2, it worked (not sure about other values, I want a better way to confirm this)
    return (returnCode == 0 || returnCode == 2);
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • arnejann

    arnejann

    3 Kasım 2007
  • RD

    RD

    19 NİSAN 2006
  • Vintendo Power

    Vintendo Pow

    2 Ocak 2007