MigraDoc输出到RTF不同于PDF

时间:2018-06-19 20:11:14

标签: pdf rtf migradoc

我同时对rtf和pdf运行了相同的文档,发现这两个渲染看起来不一样。渲染到rtf是关于我的期望,而pdf则不是。

我希望输出为pdf。有人可以告诉我我在哪里做错了吗?

我已包括我认为相关且必要的内容。任何帮助表示赞赏。

PDF Version

RTF Version

 public static Document CreateWorkOrderPDF2(Document document, string filename, string WorkOrderHeader, string myMessage)
    {
        Section section = document.AddSection();
        section.PageSetup.PageFormat = PageFormat.Letter;

        section.PageSetup.StartingNumber = 1;

        /*Section Margins
         ****************/
        section.PageSetup.LeftMargin = 40;
        section.PageSetup.TopMargin = 100;
        section.PageSetup.RightMargin = 40;
        section.PageSetup.BottomMargin = 40;

        /*HeaderFooter
         *************/
        HeaderFooter header = section.Headers.Primary;
        header.Format.Font.Size = 16;
        header.Format.Font.Color = Colors.DarkBlue;
        //header.AddParagraph();


        /*Logo Image
         ***********/
        MigraDoc.DocumentObjectModel.Shapes.Image headerImage = header.AddImage("../../Fonts/castorgate.regular.png");
        headerImage.Width = "2cm";
        headerImage.Top = 0;
        //headerImage.WrapFormat.DistanceTop = 300;
        headerImage.WrapFormat.Style = WrapStyle.Through;

        /*Blue Work Order Line
        **********************/
        TextFrame BlueWorkOrderLine = header.AddTextFrame();
        BlueWorkOrderLine.Top = 40;
        //BlueWorkOrderLine.WrapFormat.DistanceTop = 40;
        BlueWorkOrderLine.Left = 0;
        BlueWorkOrderLine.Width = 300;
        BlueWorkOrderLine.WrapFormat.Style = WrapStyle.Through;

        Paragraph headerParagraph = BlueWorkOrderLine.AddParagraph(WorkOrderHeader);
        headerParagraph.Format.Font.Name = "Consolas";
        headerParagraph.Format.Font.Color = Colors.Blue;
        headerParagraph.Format.Borders.Width = .5;

        /*Vertical Text TextFrame
        *************************/
        TextFrame WorkOrderVerticalTextFrame = header.AddTextFrame();
        WorkOrderVerticalTextFrame.Orientation = TextOrientation.Downward;
        WorkOrderVerticalTextFrame.Left = 550;
        WorkOrderVerticalTextFrame.Width = 10;
        WorkOrderVerticalTextFrame.Top = 0;
        WorkOrderVerticalTextFrame.Height = 150;
        WorkOrderVerticalTextFrame.WrapFormat.Style = WrapStyle.Through;

        Paragraph WorkOrderVerticalParagraph = WorkOrderVerticalTextFrame.AddParagraph();
        WorkOrderVerticalParagraph.Format.Alignment = ParagraphAlignment.Left;
        WorkOrderVerticalParagraph.Format.Font.Name = "Consolas";
        WorkOrderVerticalParagraph.Format.Font.Size = 8;
        WorkOrderVerticalParagraph.AddText(WorkOrderHeader);
        WorkOrderVerticalParagraph.Format.Borders.Width = .5;

        /*Estimate Records Paragraph
         ***************************/
        Paragraph EstRecordsParagraph = section.AddParagraph(myMessage);
        EstRecordsParagraph.Format.Font.Size = 10;
        EstRecordsParagraph.Format.Font.Color = Colors.DarkRed;
        EstRecordsParagraph.Format.Borders.Width = .5;
        EstRecordsParagraph.Format.RightIndent = 0;

        Paragraph renderDate = section.AddParagraph();
        renderDate = section.AddParagraph("Work Order Generated: ");
        renderDate.AddDateField();

        return document;
    }

private void pdf5(string SaveFilePath, string WorkOrderHeader, string myMessage)
    {
        // Create a MigraDoc document
        Document document = CreateDocument3();
        document = CreateWorkOrderPDF2(document, SaveFilePath, WorkOrderHeader, myMessage);

        MigraDoc.DocumentObjectModel.IO.DdlWriter.WriteToFile(document, "MigraDoc.mdddl");

        PdfDocumentRenderer renderer = new PdfDocumentRenderer(true, PdfSharp.Pdf.PdfFontEmbedding.Always);
        renderer.Document = document;

        renderer.RenderDocument();

        // Save the document...
        string PDFSaveFilePath = string.Concat(SaveFilePath, ".pdf");
        string RTFSaveFilePath = string.Concat(SaveFilePath, ".rtf");


        try
        {
            renderer.PdfDocument.Save(PDFSaveFilePath);

            //Make RTF Version
            miRtf_Click(document, RTFSaveFilePath);
        }
        catch (Exception ex)
        {
            MessageBox.Show($"{ex}");
        }
    }

    /// <summary>
    /// Creates a RTF file from the current document.
    /// </summary>
    private void miRtf_Click(Document document, string SaveFilePath)
    {
        RtfDocumentRenderer rtf = new RtfDocumentRenderer();
        rtf.Render(document, SaveFilePath, null);

        Process.Start(SaveFilePath);
    }

1 个答案:

答案 0 :(得分:0)

您同时为Image和TextFrame设置了WrapStyle.Through,所以重叠并不是意外的。两个渲染器应产生相同的结果,但我不确定哪个是错误的。

我不明白您为何在这种情况下使用WrapStyle.Through。您可以使用图像后的换行符将图像和文本简单地添加到单个段落中。或将一个段落用于图像,将一个段落用于文本。如果我正确理解了您的意图,则无需使用TextFrame,也无需更改Image的WrapFormat。