我同时对rtf和pdf运行了相同的文档,发现这两个渲染看起来不一样。渲染到rtf是关于我的期望,而pdf则不是。
我希望输出为pdf。有人可以告诉我我在哪里做错了吗?
我已包括我认为相关且必要的内容。任何帮助表示赞赏。
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);
}
答案 0 :(得分:0)
您同时为Image和TextFrame设置了WrapStyle.Through
,所以重叠并不是意外的。两个渲染器应产生相同的结果,但我不确定哪个是错误的。
我不明白您为何在这种情况下使用WrapStyle.Through
。您可以使用图像后的换行符将图像和文本简单地添加到单个段落中。或将一个段落用于图像,将一个段落用于文本。如果我正确理解了您的意图,则无需使用TextFrame,也无需更改Image的WrapFormat。