首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hiqpdf html转换问题

hiqpdf html转换问题
EN

Stack Overflow用户
提问于 2015-03-23 23:33:48
回答 2查看 4.4K关注 0票数 0

我正在使用HiQPdf转换和组合成一个pdf文件的html页面列表。我是这样做的:

代码语言:javascript
复制
public class HtmlToPdfEditor
{
    private string _firstPage;
    private string _secondPage;
    //private const string _HiQPdfSerialNumber = "";
    private PdfDocument _document;
    public HtmlToPdfEditor(string firstPage, string secondPage)
    {
        _firstPage = firstPage;
        _secondPage=secondPage;
    }

    public void ConvertAll(string outputPath) 
    {
         HtmlToPdf htmlToPdfConverter = new HtmlToPdf();
        _document = new PdfDocument();
        //_document.SerialNumber = _HiQPdfSerialNumber;
        string firstPageDoc = GetDocument(_firstPage, "firstPage.pdf");
        string secondPageDoc = GetDocument(_secondPage, "secondtPage.pdf");

        this.JoinDocument(PdfFromFile(firstPageDoc));
        this.JoinDocument(PdfFromFile(secondPageDoc));
        _document.WriteToFile(outputPath);
        _document.Close();
        _document = null;
    }

    private PdfDocument PdfFromFile(string path)
    {
        return PdfDocument.FromFile(path);
    }


    private int JoinDocument(PdfDocument document)
    {
        var nbPages = _document.Pages.Count;
        _document.AddDocument(document);
        document.Close();
        return nbPages;
    }

    private string GetDocument(string content, string outputFile)
    {
       var baseUrl = "";
       var htmlToPdfConverter = GetPdfExporter();
       htmlToPdfConverter.ConvertHtmlToFile(content, baseUrl, outputFile);
       return outputFile;
    }

    public HtmlToPdf GetPdfExporter()
    {
        HtmlToPdf htmlToPdfConverter = new HtmlToPdf();
        //htmlToPdfConverter.SerialNumber = _HiQPdfSerialNumber;
        htmlToPdfConverter.Document.PageSize = PdfPageSize.A4;
        htmlToPdfConverter.Document.PageOrientation = PdfPageOrientation.Portrait;
        htmlToPdfConverter.Document.Margins = new PdfMargins(2);
        htmlToPdfConverter.HtmlLoadedTimeout = 60;
        htmlToPdfConverter.TriggerMode = ConversionTriggerMode.WaitTime; //Time to load the html
        htmlToPdfConverter.WaitBeforeConvert = 1;
        return htmlToPdfConverter;

    }
}

这里的问题是,在结果文档中,从html转换的页面显示为空页面,只有google chrome才能正确显示它们,在firefox中,这些页面无限期地继续处于加载状态。

请注意,如果我将Html转换为PdfDocument,而不是将其存储到文件中,然后将其连接起来。生成的文档完全可读,但不幸的是,我不能使用这种方法。

任何帮助都将非常感谢!!谢谢!!

EN

回答 2

Stack Overflow用户

发布于 2016-02-16 17:23:44

是的,这是正确的,您添加到主文档的PDF文档必须保持打开状态,直到您关闭主文档。

如果您合并的PDF文档是从HTML生成的,那么实际上有一种更简单的方法可以按照Convert Many HTML to PDF示例中的方法将HTML文档合并到PDF中。

代码语言:javascript
复制
// create an empty PDF document
PdfDocument document = new PdfDocument();

// add a page to document
PdfPage page1 = document.AddPage(PdfPageSize.A4, new PdfDocumentMargins(5), 
        PdfPageOrientation.Portrait);

try
{
    // set the document header and footer before 
    // adding any objects to document
    SetHeader(document);
    SetFooter(document);

    // layout the HTML from URL 1
    PdfHtml html1 = new PdfHtml(textBoxUrl1.Text);
    PdfLayoutInfo html1LayoutInfo = page1.Layout(html1);

    // determine the PDF page where to add URL 2
    PdfPage page2 = null;
    System.Drawing.PointF location2 = System.Drawing.PointF.Empty;
    if (checkBoxNewPage.Checked)
    {
        // URL 2 is laid out on a new page with the selected orientation
        page2 = document.AddPage(PdfPageSize.A4, new PdfDocumentMargins(5), 
            GetSelectedPageOrientation());
        location2 = System.Drawing.PointF.Empty;
    }
    else
    {
        // URL 2 is laid out immediately after URL 1 and html1LayoutInfo
        // gives the location where the URL 1 layout finished
        page2 = document.Pages[html1LayoutInfo.LastPageIndex];
        location2 = new System.Drawing.PointF(html1LayoutInfo.LastPageRectangle.X, 
            html1LayoutInfo.LastPageRectangle.Bottom);
    }

    // layout the HTML from URL 2
    PdfHtml html2 = new PdfHtml(location2.X, location2.Y, textBoxUrl2.Text);
    page2.Layout(html2);

    // write the PDF document to a memory buffer
    byte[] pdfBuffer = document.WriteToMemory();

    // inform the browser about the binary data format
    HttpContext.Current.Response.AddHeader("Content-Type", "application/pdf");

    // let the browser know how to open the PDF document
    HttpContext.Current.Response.AddHeader("Content-Disposition", 
                String.Format("attachment; filename=LayoutMultipleHtml.pdf;
                        size={0}",
                pdfBuffer.Length.ToString()));

    // write the PDF buffer to HTTP response
    HttpContext.Current.Response.BinaryWrite(pdfBuffer);

    // call End() method of HTTP response 
    // to stop ASP.NET page processing
    HttpContext.Current.Response.End();
}
finally
{
    document.Close();
}
票数 1
EN

Stack Overflow用户

发布于 2015-03-24 16:05:28

好的,我解决了这个问题,通过确保所有要合并的pdf文档在关闭最终文档后被关闭。换句话说,方法JoinDocument将不再调用document.Close()。我将在关闭最终文档(_document)之后调用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29214223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档