2014-02-26 24 views
-1

我有一个使用MigraDoc生成PDF文件的小型HTML-to-PDF。似乎有一个向段落添加格式化文本的错误。问题在于,多页PDF中的第一页上的所有文本的下划线格式会丢失。粗体和斜体格式保留在所有页面上,但下划线仅显示从第二页开始。这是一个已知的Migradoc错误吗?Migradoc在分页符之前丢失了下划线格式

,只是为了避免在这里进一步的问题是我的代码:

var textFormat = this.BuildTextFormat(isBold, isItalic, isUnderline); 
var formattedText = paragraph.AddFormattedText(textFormat); 
formattedText.Add(new Text(text)); 


private TextFormat BuildTextFormat(bool isBold, bool isItalic, bool isUnderline) 
{ 
    var textFormat = TextFormat.NoUnderline; 

    if (isUnderline) 
    { 
     textFormat = TextFormat.Underline; 
    } 

    if (isBold) 
    { 
     textFormat |= TextFormat.Bold; 
    } 

    if (isItalic) 
    { 
     textFormat |= TextFormat.Italic; 
    } 

    return textFormat; 
} 

UPDATE:

只是为了让PdfSharp开发者知道,虽然我解决了这个问题,但我仍然无法理解它是否是一个实现或库错误,或两者兼而有之。问题通过改变样式的定义来解决,更确切地说,是字体颜色。

对于正常的风格,我们加入了类似下面的代码:

var style = document.Styles["Normal"]; 
    style.Font.Color = Color.Parse("0x222222"); 

然后,从正常的风格继承了其他风格也可以有不同的颜色,也从一个十六进制代码解析的字体。

最终的修复是微小的,只是让改变每个解析颜色是这样的:

style.Font.Color = Color.Parse("0xFF222222"); 

另一种方式来解决这个bug是建立一个CMYK颜色。作为一个单独的问题,当我这样做时,我也注意到用上面的行解析的颜色和CMYK生成的颜色略有不同,所以颜色解析器也似乎是bug。这里我假定十六进制颜色0x222222应该与CMYK(0,0,0,86.7)相同。

问题是为什么描述的修复解决了下划线问题错误,为什么错误只出现在页面制动之前?另外,有趣的是,在调试这个问题时,我最初开始删除一些PDF内容,并且当某些表从PDF文档中删除时,bug也会消失,这对我来说没有任何意义。

无论如何,谢谢你让我知道如何创建一个mdddl文件。这有助于我测试几件事情。

+0

避免问题的最佳方法是提供SSCCE(另请参阅:http://sscce.org/)。可能是MigraDoc错误,可能是一个使用问题。您可以提供显示错误的MigraDoc DDL文件,而不是SSCCE:http://pdfsharp.net/wiki/MigraDocDDL.ashx –

+0

“这是已知的Migradoc错误吗?”这是一个MigraDoc错误还是它是一个使用问题?除了截至目前为止发布的代码片段之外,获得一些反馈意见还不错。 –

+0

颜色“0x222222”是透明的,所以“0xff222222”是不透明颜色的正确值。 MigraDoc将“0xff222222”转换为CMYK(0,0,0,86.7),所以代码似乎没有问题。但Adobe Reader似乎计算有点不同,CMYK(0,0,0,86.7)与“0xff222222”略有不同。所以“0x222222”应该是一个完全透明的颜色 - 但对于文本和下划线以及第1页和第2页应该看起来一样。但是“0xff222222”是正确的值,并且该值一切正常。 MDDDL文件允许您删除机密数据,并且可以复制该错误。 –

回答

0

我无法复制MigraDoc的问题。

这是我加入MigraDoc的Hello World示例代码:

paragraph2 = section.AddParagraph(); 
var textFormat0 = BuildTextFormat(false, false, false); 
var textFormat1 = BuildTextFormat(false, false, true); 
var textFormat2 = BuildTextFormat(false, true, false); 
var textFormat3 = BuildTextFormat(false, true, true); 
var textFormat4 = BuildTextFormat(true, false, false); 
var textFormat5 = BuildTextFormat(true, false, true); 
var textFormat6 = BuildTextFormat(true, true, false); 
var textFormat7 = BuildTextFormat(true, true, true); 
var formattedText = paragraph2.AddFormattedText(textFormat0); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat1); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat2); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat3); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat4); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat5); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat6); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat7); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat0); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat1); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat2); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat3); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat4); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat5); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat6); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat7); 
formattedText.Add(new Text("Hello, World! ")); 
paragraph2 = section.AddParagraph(); 
formattedText = paragraph2.AddFormattedText(textFormat0); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat1); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat2); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat3); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat4); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat5); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat6); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat7); 
formattedText.Add(new Text("Hello, World! ")); 
section.AddPageBreak(); 
paragraph2 = section.AddParagraph(); 
formattedText = paragraph2.AddFormattedText(textFormat0); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat1); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat2); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat3); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat4); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat5); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat6); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat7); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat0); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat1); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat2); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat3); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat4); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat5); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat6); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat7); 
formattedText.Add(new Text("Hello, World! ")); 
paragraph2 = section.AddParagraph(); 
formattedText = paragraph2.AddFormattedText(textFormat0); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat1); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat2); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat3); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat4); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat5); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat6); 
formattedText.Add(new Text("Hello, World! ")); 
formattedText = paragraph2.AddFormattedText(textFormat7); 
formattedText.Add(new Text("Hello, World! ")); 

这导致两个页面的PDF文件,然后带下划线的文本正确显示两个页面上。

不是一个普遍的问题 - 我应该等待SSCCE。

+0

感谢并且很抱歉让您等待。我更新了我的初始帖子。这个问题有点复杂,难以复制。抱歉,我无法在此处提交我的完整代码 – lekso